私のコンピュータが仕事をすることを望むことが多いが、今はそうではない。たとえば、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-send
。dzen
答え2
一般的な使い方at
はい
やりたいことをするスクリプトを書いてください。すべての外部コマンドへのフルパスを使用し、正しいログファイルまたは電子メールに出力を記録します。
テストスクリプト。
活性化at -f YOURSCRIPT -t MMDDhhmm
答え3
2023年現在、多くのディストリビューションではデフォルトでこのタスクを無効にしているため、systemd
これを完了するのではなく使用したい場合があります。at
atd
次のように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