`&disown`と`setsid`はsshでは動作しません!彼らは働かない「(sd-pam)」プロセスを始めました。

`&disown`と`setsid`はsshでは動作しません!彼らは働かない「(sd-pam)」プロセスを始めました。

指定された時間後にサーバーを再起動しようとします。

サーバーにログインしている場合は、次のコマンドを使用してこれを達成できます。

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)プロセスがさまざまな方法で制限されていることがわかりました(たとえば、ファイルを読み書きできないため、再起動コマンドでエラーが発生した場合は何も記録できません)。

すべてのコマンドは、rootFedora 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

おすすめ記事