web-dev-qa-db-ja.com

シャットダウン18:00と18:00シャットダウンの違いは何ですか?

at 18:00 shutdown nowおよびshutdown 18:00、同じサービスを開始していますか?それらは同じように機能しますか?

30
yang

at 18:00 shutdown nowは「at」ジョブを作成します。これは、システムに応じて、atデーモンまたはcronデーモンによって指定された時間に実行されます。

shutdown 18:00は、指定された時間まで待機してからシャットダウンを実行するプロセスをシェルで開始します。このコマンドは、たとえば次の場合に終了できます。シェルセッションが終了します。

ほとんどの場合の最終結果は同じです。システムは18:00にシャットダウンされます。

1つの違いは、atを使用した場合、ジョブは保存され、18:00より前に他の方法でシステムがシャットダウンされた場合、再起動してもジョブは実行を待機していることです。時間がすでに経過している場合、シャットダウンはすぐに実行されますが、これは予想外のことです。

もう1つの違いは、shutdown 18:00は、予定時刻の5分前に/run/nologinファイルを作成して、その時刻以降にログインできないようにすることです。また、システムがシャットダウンされようとしていることをログインしているユーザーに警告するために、ブロードキャストメッセージが送信されます。

どちらを使用するかを決定するには、これらの違いを考慮する必要があります。

48
wurtel

そして今、systemdの答え。

CentOS 7を使用している場合、systemdオペレーティングシステムを使用していて、答えは異なります。

at 18:00 shutdown nowは、atサブシステムを介して引き続きスケジュールしますが、そのshutdownコマンドと、shutdown 18:00で直接呼び出すコマンドは異なります。これは実際にはsystemdのsystemctlプログラムです。 systemctlの動作は異なります。

まず、systemctlの場合とほぼ同じように、atはスケジュールされたシャットダウン要求を送信してデーモンによって処理されます。ただし、これはsystemdデーモンです。具体的にはlogindサブシステムではなく、atsystemd-shutdowndデーモンは2015年5月にsystemdから削除されました。この変更はその後CentOS 7のマイナーバージョンに浸透しています)。 systemctlは、(システム全体の)デスクトップバスブローカーに対して内部プロトコルを読み、次にlogindと通信します。

したがって、atの場合と同様に、カウントダウンしてshutdownメッセージを生成するwallプロセスはありません。したがって、ログアウトすることができ、これはスケジュールに影響を与えません。キャンセルは、ログインセッションのフォアグラウンドプロセスを単に中断/終了することほど簡単ではありません。 atと同じです。

atの場合とは異なり、メッセージはまだメッセージですが、logindによって発行されます。また、atの場合とは異なり、スケジュールされたジョブはシステムの再起動後も保持されないため、実際のシャットダウンはスケジュールされたジョブをキャンセルします。ファイルシステムにはファイルがありますが、それは非永続的なストレージである/run/systemd/shutdownの下にあります。

さらなる違いは、一度に1つだけのシャットダウンをスケジュールできることですが、1つは複数のatジョブを送信でき、ポリシーキットはshutdown runにルールを適用しますログインセッションコンテキストで実行されるatに適用されるルールとは異なるshutdownジョブとしての非ログインセッションコンテキスト。後者の方が許容度が高く、アクティブなログインセッションにログインしている非特権ユーザーがシステムをシャットダウンできるようになります(たとえば)。

参考文献

23
JdeBP