特定の日付にシャットダウンする

特定の日付にシャットダウンする

特定の時間にシャットダウンをスケジュールできることは知っています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

関連情報