web-dev-qa-db-ja.com

シェルスクリプトを使用して1回限りのスケジュールされたタスクを追加しますか?

ある時間に一度だけタスクを実行したいのですが。

Crontab -eを使用してそこに追加できることはわかっていますが、シェルスクリプトを使用して追加したいと思います。 crontab -eは、予測できない編集用の一時ファイルを提供してくれます。

また、タスクが実行されたら、それをcrontabから再度削除して、混乱を残さないようにします。

では、スクリプトを使用して個人のcrontabからエントリを追加/削除する標準化された方法はありますか?

自分のシステムをロールできることはわかっています。フォルダーから.shファイルを実行および削除するスクリプトを毎分実行し、「addtask」スクリプトでそのフォルダーに.shファイルを作成しますが、自分のシステムをロールする前に、そこにあるかどうか疑問に思います。すでに何かです。

重要な場合は、Mac OS Xとzshを使用しますが、他の* nixでも機能するものを使用したいと思いました。

3
Michael Stum

atコマンドがあなたが求めているものだと思います。

例えば。:

echo "mail -s Test mstumm < /etc/group" | at 16:30

これにより、午後4時30分に/etc/groupのコピーが電子メールで送信されます。

atの詳細については、こちらをご覧ください: http://www.softpanorama.org/Utilities/at.shtml

14
Thomas James

新しいcronジョブの追加:

newJob="/path/to/new/script.sh"
newJobSchedule="0 0 * * 0 $newJob"
cat <(crontab -l) <(echo "$newJobSchedule") | crontab -

古いcronジョブの削除:

oldJob="/path/to/old/script.sh"
cat <(fgrep -i -v "$oldJob" <(crontab -l)) | crontab -

古いcronジョブの置き換え:

oldJob="/path/to/old/script.sh"
newJob="/path/to/new/script.sh"
newJobSchedule="0 0 * * 0 $newJob"
cat <(fgrep -i -v "$oldJob" <(crontab -l)) <(echo "$newJobSchedule") | crontab -

一時ファイルは、パイプとリダイレクトを使用することで回避されます。

0
Tim