at 18:00 shutdown now
およびshutdown 18:00
、同じサービスを開始していますか?それらは同じように機能しますか?
at 18:00 shutdown now
は「at」ジョブを作成します。これは、システムに応じて、at
デーモンまたはcron
デーモンによって指定された時間に実行されます。
shutdown 18:00
は、指定された時間まで待機してからシャットダウンを実行するプロセスをシェルで開始します。このコマンドは、たとえば次の場合に終了できます。シェルセッションが終了します。
ほとんどの場合の最終結果は同じです。システムは18:00にシャットダウンされます。
1つの違いは、at
を使用した場合、ジョブは保存され、18:00より前に他の方法でシステムがシャットダウンされた場合、再起動してもジョブは実行を待機していることです。時間がすでに経過している場合、シャットダウンはすぐに実行されますが、これは予想外のことです。
もう1つの違いは、shutdown 18:00
は、予定時刻の5分前に/run/nologin
ファイルを作成して、その時刻以降にログインできないようにすることです。また、システムがシャットダウンされようとしていることをログインしているユーザーに警告するために、ブロードキャストメッセージが送信されます。
どちらを使用するかを決定するには、これらの違いを考慮する必要があります。
CentOS 7を使用している場合、systemdオペレーティングシステムを使用していて、答えは異なります。
at 18:00 shutdown now
は、at
サブシステムを介して引き続きスケジュールしますが、そのshutdown
コマンドと、shutdown 18:00
で直接呼び出すコマンドは異なります。これは実際にはsystemdのsystemctl
プログラムです。 systemctl
の動作は異なります。
まず、systemctl
の場合とほぼ同じように、at
はスケジュールされたシャットダウン要求を送信してデーモンによって処理されます。ただし、これはsystemdデーモンです。具体的にはlogind
サブシステムではなく、at
(systemd-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
ジョブとしての非ログインセッションコンテキスト。後者の方が許容度が高く、アクティブなログインセッションにログインしている非特権ユーザーがシステムをシャットダウンできるようになります(たとえば)。