将来の特定の時間に単一のイベントが発生するようにスケジュールする簡単な方法は何ですか?

将来の特定の時間に単一のイベントが発生するようにスケジュールする簡単な方法は何ですか?

私のコンピュータが仕事をすることを望むことが多いが、今はそうではない。たとえば、30分後に退職時間を通知するように設定できます。あるいは、ほとんどの人がオフィスを離れたと確信している2時間後に複雑なテストを実行したいと思うかもしれません。

一日のうちに特定の時間に実行するクローンタスクを作成できることを知っていますが、私が望むのは、「このスクリプトを10分で実行する」のような単純なものだけであり、どれくらいかかるかを把握する必要があるため、作業量が多いようです。実際には今からX分/時間/日がかかります。完了したら、クローンジョブを削除してください。

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

sleep X
do_task

しかし、これは這うようです。各タスクに新しいスクリプトが必要であるか、私が望むタスクを実行するのに十分な一般的なスクリプトを作成して維持する必要があり、分単位で数秒があるかどうかを計算する必要があることは言うまでもありません。私が望む時間または数日。

この問題に対する確立された解決策はありませんか?

答え1

私は簡単なスクリプトを使います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

電子メールの代わりにデスクトップ通知をしたい場合、または$messageに簡単にパイプできますnotify-senddzen

答え2

一般的な使い方atはい

やりたいことをするスクリプトを書いてください。すべての外部コマンドへのフルパスを使用し、正しいログファイルまたは電子メールに出力を記録します。

テストスクリプト。

活性化at -f YOURSCRIPT -t MMDDhhmm

答え3

2023年現在、多くのディストリビューションではデフォルトでこのタスクを無効にしているため、systemdこれを完了するのではなく使用したい場合があります。atatd

次のようにsystemctlを使用できます。

systemd-run --user --on-calendar=<iso time> <command> [arguments...]

例えば

systemd-run --user --on-calendar="2023-11-03 07:00" /usr/bin/aplay /home/user/chime.wav

これにより、コマンドの実行後に削除される一時タイマーが生成されます。 --on-calendar の引数にアスタリスクが含まれている場合 (例: --on-calendar=")--* 07:00", このコマンドは毎日実行されます。

設定されたすべてのタイマーのリストを取得するには、次のようにします。

systemctl --user list-timers

関連情報