crontab -e
はstdinから読み込まないため、現在の方法では問題があります。ただし、-e
スイッチのないcrontab
はstdinから読み込みます。
最も明白な方法は、単に既存のcrontabに新しいcronジョブを追加することです。このアプローチで
crontab -l > current_cron
cat >> current_cron << EOF
# new cron job here
EOF
crontab < current_cron
rm -f current_cron
明白な問題は、cronジョブが既に存在するかどうかを確認するには何もチェックがないことである 。それはちょっとやりにくいところです。それに取り組むため
一つの方法は、一番下に、一般的に、crontabファイルに「スクリプトの管理セクション」を持っているだろう:
# DO NOT MODIFY THE SECTION BELOW MANUALLY. IT'S MANAGED BY AUTOMATION.
#---script managed section---
"cron job 1"
"cron job 2"
次に、スクリプトは、このセクションを管理することができます - それは持っているのがベストですすべての自動cronジョブを管理する単一のスクリプト:
crontab -l > current_cron
sed '/---script managed section---/q' current_cron > new_cron
cat >> new_cron << EOF
# updated cron jobs here
EOF
crontab < new_cron
rm -f new_cron current_cron
私たちも、よりきめ細かい制御が必要な場合は、その後、私たちは開始と終了マーカーで、各管理cronジョブのためのセクションを持っているとしてスクリプトの取引を行うことができます毎回特定のセクション。
しかし、Ubuntuの方が良いアイデアがあります。私たちはcrontabを完全にやめ、代わりに/etc/cron.dを使うことができます。ここでは、各cronジョブごとに1つのファイルがあり、それはcronジョブ仕様の正確な形式に従います。 cronジョブと/etc/cron.dファイルの間には1対1の対応があるため、コマンドはcrontab
コマンドではなくファイルとして直接管理されるため、自動化がはるかに容易です。Ubuntuの上man cron
から
:Debianに
、cronが/etc/cron.dディレクトリ内のファイルを読み込みます。 cronは/ etc/crontabファイルと同じ方法で/etc/cron.d内のファイルを扱います(これらのファイルはそのファイルの特別なフォーマットに従います。つまり、ユーザーフィールドを含みます)。しかし、それらは/ etc/crontabから独立しています。たとえば、環境変数の設定を継承しないなどです。この変更はDebianに固有です。