
特定の時間にシャットダウンをスケジュールできることは知っていますshutdown -h 21:45
が、繰り返しになる性質上、そのようなことにはcrontabを使用すべきではないことは知っています。特定の時間にシャットダウンをスケジュールするにはどうすればよいですか?日付例えば8月31日午後8時とかですか?
答え1
このat
コマンドは、将来の 1 回限りの実行をスケジュールするためのものです。
例えば
% at 8pm Aug 31
at> echo hello
at> <EOT>
job 161 at Sat Aug 31 20:00:00 2019
(「<EOT>」は、Ctrl + D を押すことによって生成されました)
% atq
161 Sat Aug 31 20:00:00 2019 a sweh
ここにコマンドを入力できますshutdown
。
答え2
これは当然at
の方法です。シャットダウン後も存続すると思いますので、スケジュールされたシャットダウン前にマシンが再起動すると、スケジュールされた時間に再びシャットダウンする可能性があります。したがって、bash と GNU date を使用して、遅延シャットダウンを使用できます。
/sbin/shutdown +$(( ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))
注意: この精度は 1 分単位です。スケジュールされた時刻と現在の時刻を UNIX エポックからの秒数に変換し、その差を計算して分数に変換し、これをシャットダウンの遅延として使用します。スケジュールされた時刻が過去である場合は正しく動作しません。
答え3
最近のUbuntuのバージョンではsystemdが使用されており、従来の1回限りのコマンド用のatd
関連スケジューラがインストールされていないか、実行されていない場合at
一回限りのコマンドは次のようにスケジュールできます。systemd-run
これは手動で生成するよりも簡単ですsystemd timer
:
systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
答え4
今年のみジョブを実行するには:
0 20 31 8 * test $(/bin/date +\%Y) = "2019" && /sbin/shutdown now
ジョブを毎年実行するには:
0 20 31 8 * /sbin/shutdown now