web-dev-qa-db-ja.com

将来のある時点で発生する単一のイベントをスケジュールする簡単な方法は何ですか?

コンピューターに単一のタスクを実行させたい場合がよくありますが、現在は実行していません。たとえば、30分以内に仕事を辞める時間であることを通知してもらうことができます。あるいは、他のほとんどの人がオフィスを離れると確信している今から2時間後に複雑なテストを実行したいのかもしれません。

特定の時間に実行するcronジョブを作成できることはわかっていますが、「このスクリプトを10分で実行する」のような単純なものだけが必要な場合は、理解する必要があるだけでなく、多くの作業のように思えます。今から実際にはX分/時間/日になるのは何時ですか。終了したらcronジョブを削除します。

もちろん、このスクリプトを記述してバックグラウンドで実行することもできます。

sleep X
do_task

しかし、それはとても不格好に思えます。タスクごとに新しいスクリプトが必要であるか、必要なことを実行するのに十分な汎用スクリプトを作成して維持する必要があります。もちろん、分に何秒あるかを把握する必要があります。時間、または私が欲しい日。

この問題に対する解決策はすでに確立されていませんか?

15
Cory Klein

atで簡単なスクリプトを使用します。

#!/bin/bash
# email reminder notes using at(1)...

read -p "Time of message? [HH:MM] " time
read -p "Date of message? [dd.mm.yy] " date
read -p "Message body? " message

at "$time" "$date" <<EOF
echo "$message" | mailx -s "REMINDER" [email protected]
EOF

メールの代わりにデスクトップ通知が必要な場合は、$messagenotify-sendまたはdzenに簡単にパイプできます。

27
jasonwryan

at を使用する一般的な方法は

やりたいことを実行するスクリプトを作成します。すべての外部コマンドにフルパスを使用するか、出力を適切なログファイルに記録するか、メールで送信してください。

スクリプトをテストします。

at -f YOURSCRIPT -t MMDDhhmmでアクティブ化します

6
Nils