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


11

を介して特定の時間にシャットダウンをスケジュールできること、shutdown -h 21:45およびそのような性質のためにcrontabを使用すべきではないことを知っています。8月31日午後20:00のような特定の日付にシャットダウンをスケジュールするにはどうすればよいですか?

回答:


7

最近のUbuntuバージョンはsystemdを使用しており、1回限りのコマンド用の従来のatd関連atスケジューラーがインストールされていないか、1回限りのコマンドをsystemd-run実行しいない場合は 、手動でを生成するよりも簡単にスケジュールできますsystemd timer

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now

2
皮肉なことに、これを行うためのサービス全体を開始することはほとんど不要です。systemdのシャットダウンメカニズム自体は、任意の時点をサポートしています。そのコマンドラインツールは、これにアクセスする機能を提供しませんshutdown。これは、BSDのコマンドラインと同等ではないためです。私が別の回答で書いたように、これを望む人は、を使ってshutdown家の中を回るのではなく、システム化された人々に数十年前の構文でツールをより有能にするよう説得してみてくださいsystemd-run
JdeBP

無効なカレンダー仕様が表示されます:2019-08-31 20:00:00 CET
HdM

12

このatコマンドは、将来の実行をスケジュールするためのものです。

例えば

% at 8pm Aug 31
at> echo hello
at> <EOT>
job 161 at Sat Aug 31 20:00:00 2019

(「<EOT>」は、control-Dを押して作成されました)

% atq
161     Sat Aug 31 20:00:00 2019 a sweh

shutdownここにコマンドを配置できます。


はい!私は忘れていたat私は、投稿時に- at会社に認められた方法は、かもしれないが、間違いなく、一般的にはこのためのものですatか、cron構成管理/展開に関連する規則に応じて、。
flow2k

正確に同等ではないことに注意してください。 unix.stackexchange.com/q/465322/5132
JdeBP

atパイプからコマンドを取得することもできます:echo "echo yup > $(tty)" | at now
mosvy

7

一方でatこれを行うための明白な方法ですが、私はそれがとても予定のシャットダウン前に、マシンをリブートした場合、それは予定時刻に再びシャットダウンかもしれませんが、シャットダウン後も存続すると思います。したがって、bashとGNU dateを使用すると、遅延シャットダウンを使用できます。

/sbin/shutdown +$(( ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))

注:これは1分まで正確です。これは、スケジュールされた時間をUNIXエポックからの秒数に変換し、差を計算して分に変換し、これをシャットダウンの遅延として使用することで機能します。スケジュールされた時間が過去の場合、正しく動作しません。


3

より良いshutdownコマンドを使用します。

van Smoorenburg、Upstart、およびsystemd shutdownコマンドでは、日付を指定できません。ただし、BSD shutdownコマンドは、シャットダウンするタイミングの仕様にある日付値をの形式で受け取りますyymmddhhmm。これは4BSD以来ずっとそうであり、FreeBSDとOpenBSDでも同様です。NetBSDはそれをに拡張しましたccyymmddhhmm

noshツールセットはBSDでも使用できるため、NetBSDごとshutdownに拡張して同じ機能をコマンドに与えましたCCYYMMDDHHMM。また、noshツールセットはLinuxでも使用できるため、Linuxは日付を取るシャットダウンコマンドを提供します。

もちろんnoshでも動作しsystem-managerます。また、他のいくつかのシステムでも機能します。それはプロセス#1に信号を送信してものを制定し、同じ信号は、などの他のいくつかのシステムマネージャによって理解されsystemdます。

あなたはそれを使うこともできるし、それに似たツールを使うこともできる。または、他のLinux shutdownプログラムの作者を説得して、ツールをBSDと同等の機能に拡張することもできますshutdown

参考文献

  • ジョナサン・ド・ボイン・ポラード(2018)。shutdown。noshツールセットのマニュアルページ。ソフトウェア。
  • ジョナサン・ド・ボイン・ポラード(2018)。system-manager。noshツールセットのマニュアルページ。ソフトウェア。
  • shutdownSystem Managerがマニュアルです。NetBSDマニュアルページ。2011-11-04。
  • shutdownFreeBSDシステム管理者のマニュアル。2018-01-01。
  • shutdown。OpenBSDマニュアルページ。2015-01-21。
  • /unix//a/465337/5132

1

今年だけジョブを実行するには:

0 20 31 8 * test $(/bin/date +\%Y) = "2019" && /sbin/shutdown now

毎年ジョブを実行するには:

0 20 31 8 * /sbin/shutdown now

-4

shutdownコマンドに年を入力するオプションがありますが、cronは特定の時点でコマンドを1回だけ実行するために使用できます。あなたの例として、試してください

0 0 31 8 ? 2019  shutdown

注意:上記は標準のcron構文ではありません。


2
1.これは午後20:00ではなく、真夜中です。2.タイミングのSIXフィールドを持つcronjobを見たことがない。どのcron実装を参照していますか?
ワイルドカード

2
スケジュールにyearフィールドはありませんcrontab
Seamus

その後、この構文は「標準のcron」ではないことに気づきました。そのため、これは額面どおりに解釈するべきではありません。OPはcronの使用に関連するパフォーマンスの低下があることを暗示しているようです。したがって、私の回答では、明確にするように努めました。これもあなたの考えですか?
flow2k
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.