(মন্তব্য করার মতো যথেষ্ট খ্যাতি আমার নেই, তাই আমি একটি উত্তর হিসাবে যুক্ত করছি: তার উত্তরের পাশে মন্তব্য হিসাবে এটিকে নির্দ্বিধায় যোগ করুন)
জো ক্যাসাডন্টের ওয়ান-লাইনারটি সঠিক, যদি আপনি চালনা করেন তবে set -e
, যদি আপনার স্ক্রিপ্টটি ত্রুটি থেকে ব্যর্থ হয়ে থাকে এবং যদি এখনও কোনও ক্রোনজবস না থাকে except সেক্ষেত্রে ওয়ান-লাইনার ক্রোনজব তৈরি করবে না, তবে স্ক্রিপ্টটি থামাবে না। নীরব ব্যর্থতা খুব বিভ্রান্তিকর হতে পারে।
কারণটি হ'ল crontab -l
কোনও 1
রিটার্ন কোড দিয়ে রিটার্ন দেয় যার ফলে পরবর্তী কমান্ডটি (দ্য echo
) কার্যকর হয় না ... সুতরাং ক্রোনজব তৈরি হয় না। তবে যেহেতু এগুলিকে সাব-প্রসেস হিসাবে কার্যকর করা হয়েছে (প্রথম বন্ধনীগুলির কারণে) তারা স্ক্রিপ্টটি থামায় না।
(মজার বিষয়, আপনি যদি আবার একই কমান্ডটি চালনা করেন তবে এটি কার্যকর হবে: একবার আপনি কার্যকর হয়ে গেলে crontab -
crontab -l
তবে এটি করার পরেও কিছুই আউটপুট দেয় না, তবে এটি আর কোনও ত্রুটি ফিরিয়ে দেয় না no crontab for <user>
) সুতরাং পরবর্তীটি echo
কার্যকর করা হবে এবং ক্রোনট্যাব তৈরি করা হয়েছে)
যাইহোক, আপনি যদি সাথে চালনা করেন set -e
তবে লাইনটি অবশ্যই:
(crontab -l 2>/dev/null || true; echo "*/5 * * * * /path/to/job -with args") | crontab -