সময়ের তুলনায় ভাল পদ্ধতি?


10

আমার বর্তমান সময়ের জন্য যাচাই করা উচিত এবং স্ক্রিপ্টটি বাতিল করা দরকার যদি এটির সময়টি সঠিকভাবে চালিত না হয় run এছাড়াও, অন্য কেউ যদি এটি চালায় তবে এটি বাতিল করা উচিত।

উদাহরণস্বরূপ: আমার স্ক্রিপ্টটি কেবল চালানোর জন্য প্রয়োজন যদি এটি 10 ​​মিনিট থেকে 2 টা (4 ঘন্টাের উইন্ডো) এর মধ্যে শুরু হয়।

বর্তমানে আমি নিম্নলিখিতগুলি করছি। সময় নিয়ে date +%k%Mএবং হার্ড কোডড সংখ্যার সাথে তুলনা করা

#!/bin/sh
currTime=`date +%k%M`
check_time_to_run()
{
    tempTime=$1
    if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then 
        echo "Time is between 2 AM and 10 PM. Aborting."
        exit 1
    else
        echo "Time is after 10 PM and before 2 AM. Running normally."
    fi
}

check_time_to_run $currentTime

আমি জানতে চাই যে সময়ের তুলনায় শ্রদ্ধার সাথে অন্য কোনও কার্যকর পদ্ধতি আছে shনাকি bash?


1
আপনি দুটি তারিখের তুলনা করার প্রয়োজন হলে উদাহরণস্বরূপ, MJD অথবা UNIX সময় তাদের রূপান্তর করতে চেষ্টা করুন: date +%s
এডি_এএম

1
@ এডি না এটি তারিখ নয়, এটি আমার সাথে তুলনা করা প্রয়োজন।
এমটিকে

1
আমি মনে করি, সেকেন্ডের মধ্যে এটি আরও ভাল হবে: currTime=$(date +%s); lower=$(date +%s --date="2:00"); upper=$(date +%s --date="22:00"); if [$currTime -gt $lower -a $currTime -lt $upper]; then...
এডি_ইম

স্ক্র্যাপটি কেন ক্রোনটবে রাখবেন না? এইভাবে আপনি নিশ্চিত হন যে এটি নির্দিষ্ট সময়ে চলে
বিটস অফনিক্স

1
যে কোনও ব্যবহারকারী যেমন প্রক্রিয়াটির জন্য সময় পরিবর্তন করতে পারেন faketime, আপনার স্ক্রিপ্টটি খুব নিরাপদ নয়। লকফিল ব্যবহার করা সম্ভবত একটি ভাল বিকল্প।
জোফেল

উত্তর:


6

এটি আমার কাছে নিখুঁত দেখাচ্ছে। আপনি কী ভাবছেন এটি উন্নত করা উচিত?

যাইহোক, এর উন্নতির উপায়গুলি হ'ল:

  • ড্যাশ বা পিডিক্সের মতো ব্যাশের চেয়ে আরও ছোট, দ্রুত শেল ব্যবহার করুন।
  • যেমন শেল ব্যবহার করে যার মধ্যে অন্তর্নিহিত তারিখের ক্ষমতা রয়েছে zshবাksh93
  • ব্যবহার gawk(যা ব্যাশের চেয়ে ছোট, তবে ড্যাশের চেয়ে নয় তবে অতিরিক্ত কাঁটাচামচ এড়াতে পারে):

উদাহরণ:

#! /usr/bin/gawk -f
BEGIN {now = strftime("%k%M")+0; exit(now > 200 && now < 2200)}

ঠিক আছে শান্ত হও. শুধু নিশ্চিত করতে চেয়েছিলাম যে আমি যা করছি তা অশোধিত বা মন্দ নয়। পরামর্শের জন্য ধন্যবাদ।
এমটিকে

4

যদি বাহ্যিক সরঞ্জামগুলি অনুমোদিত হয় তবে আপনি চেক করতে চাইতে পারেন dateutils

আপনার "লিপি" হয়ে যায়:

if dtest time --gt '02:00:00' && dtest time --lt '22:00:00'; then
    echo "Time is between 2 AM and 10 PM. Aborting."
fi

দাবি অস্বীকার: আমি সেই সরঞ্জামটির লেখক।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.