リモートサーバーでバックグラウンドプロセスを開始するためにSSHを使用しています。これは私が今持っているものです:
ssh [email protected]「Nohupプロセス&」
これは、プロセスが開始されるという点で機能します。しかし、Ctr-Cを押すまでSSHセッション自体は終了しません。
Ctr-Cを押すと、リモートプロセスはバックグラウンドで実行され続けます。
ローカルで実行できるスクリプトにsshコマンドを配置したいので、リモートプロセスが開始されたらsshセッションが自動的に終了するようにします。
これを実現する方法はありますか?
Sshの「-f」オプションは、バックグラウンドでリモートコマンドを実行し、すぐに戻るようにsshに指示します。例えば。、
ssh -f user@Host "echo foo; sleep 5; echo bar"
上記を入力すると、すぐにシェルプロンプトが返され、「foo」の出力が表示されます。 5秒後、「バー」出力が表示されます。それまでは、シェルを使用していた可能性があります。
Nohup
を使用する場合は、stdin、stdout、stderrもリダイレクトしてください。
ssh user@server 'DISPLAY=:0 Nohup xeyes < /dev/null > std.out 2> std.err &'
このようにして、リモートプロセスから完全に切り離されます。 ssh -f user@Host...
の使用には注意してください。これにより、sshプロセスがcalling側のバックグラウンドにのみ配置されます。これを確認するには、呼び出し元のマシンでps -aux | grep ssh
を実行します。これにより、ssh呼び出しはまだアクティブであるが、バックグラウンドに置かれていることがわかります。
上記の私の例では、xeyesはX11プログラムであり、リモートマシンで開始したいので、DISPLAY=:0
を使用します。
screen
を使用してこの画面でプロセスを実行し、画面から切り離しますCtrl-a :detach
そして、問題なく現在のセッションを終了します。その後、SSHに再接続してこの画面に再度接続し、タスクを続行するか、終了したかどうかを確認できます。
または、すでに実行中の画面にコマンドを送信できます。ローカルスクリプトは次のようになります。
ssh [email protected]
screen -dmS new_screen sh
screen -S new_screen -p 0 -X stuff $'Nohup process \n'
exit
詳細はこちらをご覧ください tutorial