startup.sh
キーラインでpython3スクリプトを起動するbashスクリプトがあります(呼び出しましょう):
nohup python3 -u <script> &
ssh
このスクリプトを直接呼び出して呼び出した場合、終了後もPythonスクリプトはバックグラウンドで実行され続けます。ただし、これを実行すると:
ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "./startup.sh"
プロセスは実行を終了するとすぐにssh
終了し、セッションを閉じます。
2つの違いは何ですか?
編集:Pythonスクリプトは、ボトル経由でWebサービスを実行しています。
EDIT2:を呼び出して実行するinitスクリプトを作成しようとしましたが、同じ動作になりました。startup.sh
ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "sudo service start <servicename>"
EDIT3:多分それはスクリプト内の何か他のものです。スクリプトの大部分は次のとおりです。
chmod 700 ${key_loc}
echo "INFO: Syncing files."
rsync -azP -e "ssh -i ${key_loc} -o StrictHostKeyChecking=no" ${source_client_loc} ${remote_user}@${remote_hostname}:${destination_client_loc}
echo "INFO: Running startup script."
ssh -i ${key_loc} -o StrictHostKeyChecking=no ${remote_user}@${remote_hostname} "cd ${destination_client_loc}; chmod u+x ${ctl_script}; ./${ctl_script} restart"
EDIT4:最後の行を実行し、最後にスリープ状態にした場合:
ssh -i ${key_loc} -o StrictHostKeyChecking=no ${remote_user}@${remote_hostname} "cd ${destination_client_loc}; chmod u+x ${ctl_script}; ./${ctl_script} restart; sleep 1"
echo "Finished"
に到達することはなくecho "Finished"
、かつて見たことのないBottleサーバーメッセージが表示されます。
Bottle vx.x.x server starting up (using WSGIRefServer())...
Listening on <URL>
Hit Ctrl-C to quit.
手動でSSHで接続し、自分でプロセスを強制終了すると、「完了」と表示されます。
EDIT5:EDIT4を使用して、エンドポイントにリクエストを行うと、ページが返されますが、ボトルはエラーになります。
Bottle vx.x.x server starting up (using WSGIRefServer())...
Listening on <URL>
Hit Ctrl-C to quit.
----------------------------------------
Exception happened during processing of request from ('<IP>', 55104)
strace
Linuxを使用しtruss
ている場合、またはSolarisを実行していて、どのように/なぜ終了するかを確認する場合は、最適なオプションを実行することをお勧めします。例えば好きssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> strace -fo /tmp/debug ./startup.sh
。
&
起動スクリプトの最後にを使用してみましたか?を追加する&
と、sshセッションの依存関係が親IDから削除されます(親IDが消滅すると、子も消滅します)。また、これはこの以前の投稿に基づいた重複した質問だと思います。前の文であなたに提出した投稿は、この投稿の複製であり、より良い詳細を提供するかもしれません。
nohup ./startup.sh &
以前に試しましたが、同じ振る舞いをしました。startup.sh
にはすでにフォークが含まれているnohup python3 -u <script> &
ため()、再度フォークする必要はないと確信しています。