回答:
at 18:00 shutdown now
「at」ジョブを作成します。これは、システムに応じて、指定された時間にat
デーモンまたはcron
デーモンによって実行されます。
shutdown 18:00
指定された時間まで待機してからシャットダウンを実行するシェル内のプロセスを開始します。このコマンドは、たとえばシェルセッションが終了した場合に終了できます。
ほとんどの場合、最終的な結果は同じです。システムは18:00にシャットダウンされます。
違いの1つは、を使用するat
とジョブが保存され、18:00より前にシステムが他の何らかの手段でシャットダウンされた場合、再起動時にジョブが実行待ちになることです。時間がすでに経過している場合、シャットダウンはすぐに実行されますが、これは非常に予期しないことです。
もう1つの違いは、スケジュールされた時刻の5分前にファイルshutdown 18:00
を作成して、/run/nologin
その瞬間以降にユーザーがログインしないようにすることです。また、システムがシャットダウンされようとしていることをログインユーザーに警告するために、ブロードキャストメッセージが送信されます。
これらの違いを考慮して、どちらを使用するかを決定する必要があります。
nohup
するdisown
かどうかに関係なく、通常ログアウトすると実行中のバックグラウンドプロセスが強制終了される場合です。システムごとに異なるデフォルトを設定できます。(実際にはsudo shutdown
まだ実行中のプロセスがあると仮定します。むしろinit
、シャットダウンタイマーを開始するように通知するだけです。後者は実際に起こることかもしれませんが、最近チェックしていません。ああ、@ JdeBPが持っています。 )
at
経由で動作するように設定することは本当に可能ですか?cron
atd
CentOS 7を使用している場合、systemdオペレーティングシステムを使用しているため、答えは異なります。
at 18:00 shutdown now
at
サブシステムを介してスケジュールを設定しますが、そのshutdown
コマンドは、で直接呼び出すコマンドshutdown 18:00
とは異なります。実際にはsystemdのsystemctl
プログラムです。 systemctl
物事のやり方が異なります。
まず最初にsystemctl
、スケジュールされたシャットダウン要求を送信して、デーモンと同様に処理しat
ます。ただし、これは、特にサブシステムではなく、systemdデーモンですlogind
(systemd-shutdownd
2015年5月にsystemdから削除されたこのデーモンは、それ以降のマイナーバージョンのCentOS 7に浸透していat
ます)。 systemctl
内部プロトコルを(システム全体の)Desktop Busブローカーに伝えます。DesktopBusブローカーはと通信しlogind
ます。
したがって、at
ケースのように、shutdown
カウントダウンしてwall
メッセージを生成するプロセスはありません。そのため、ログアウトできますが、これはスケジュールに影響を与えません。キャンセルは、ログインセッションのフォアグラウンドプロセスを単に中断/終了するほど簡単ではありません。と同じようにat
。
ケースとは異なり、まだメッセージがありますat
が、それらはによって発行されlogind
ます。また、at
ケースとは異なり、スケジュールされたジョブはシステムの再起動後も保持されないため、実際のシャットダウンはスケジュールされたジョブをキャンセルします。そこで、ファイルシステム内のファイルは、それが下にある/run/systemd/shutdown
非永続ストレージです。
さらに異なるのは、一度に1つのシャットダウンしかスケジュールできないことです。一方、複数のat
ジョブを送信できます。ポリシーキットはshutdown
、非ログインセッションコンテキストで実行するルールを、実行に適用されるルールat
とは異なるジョブとして適用しshutdown
ます。ログインセッションコンテキスト。後者はより寛容で、アクティブなログインセッションにログインしている非特権ユーザーがシステムをシャットダウンできるようにします。
shutdown 18:00
シェルで待機するプロセスを開始します」。それ以前にログアウトした場合はどうなりますか?