
指定された時間後にサーバーを再起動しようとします。
サーバーにログインしている場合は、次のコマンドを使用してこれを達成できます。
sleep 10 && reboot
シェルが終了しても、このコマンドを(tmuxまたはscreenなしで)維持するためにさまざまなオプションを試しましたが、最も適していましたsetsid
。& disown
setsid bash -c 'sleep 10 && reboot' &
...または:
bash -c 'sleep 10 && reboot' & disown
これまでは、このコマンドが呼び出されるシェルを閉じてもサーバー上で正常に動作します。しかし、サーバーを再起動したいのでSSHコマンドを呼び出したらすぐに終了します(指定されたsleep
時間待たずに)。上記のコマンドを使用すると、次のようにこれを行うことができます。
ssh user@server -t "setsid bash -c 'sleep 10 && reboot' &"
...または:
ssh user@server -t "bash -c 'sleep 10 && reboot' & disown"
しかし、興味深いのは、これらのコマンドがその名前でプロセスを開始し、指定された時間が経過すると何もせずに(sd-pam)
終了することです。sleep
しかし、このコマンドを定期的に実行すると、約10%程度動作することがわかります。この動作を調べたところ、(sd-pam)
プロセスがさまざまな方法で制限されていることがわかりました(たとえば、ファイルを読み書きできないため、再起動コマンドでエラーが発生した場合は何も記録できません)。
すべてのコマンドは、root
Fedora 32のユーザーによって実行されます。
編集する:
@UlrichSchwarzに感謝します。このトリック:
echo 'sleep 30; reboot' | at now
これは以下にも当てはまりますssh
。
ssh user@server -t "echo 'sleep 30; reboot' | at now"
するのとどうat
違うの?setsid
& disown
答え1
shutdownコマンドは、必要に応じて後でアクティビティをスケジュールする機能を使用して必要なタスクを実行すると思います。たとえば、再起動するには「-r」スイッチを使用し、1分間遅延するには「+1」スイッチを使用します。ただし、終了するにはsudoを使用した特権の昇格が必要です。
sudo shutdown -r '+1'
「+1」の代わりに「now」を使用してすぐに再起動することもできます。
sudo shutdown -r now