有时我想在回家之前启动一个长时间运行的进程,所以我创建了一个到服务器的 SSH 会话来启动这个进程,但是我想关闭我的笔记本电脑回家,晚饭后,我想检查我在下班前开始的过程。我怎样才能用 SSH 做到这一点?我的理解是,如果您中断 SSH 连接,您也会中断服务器上的登录会话,从而终止长时间运行的进程。
我有一个 bash 脚本,它启动一个 python3 脚本(让我们称之为startup.sh),关键行:
nohup python3 -u <script> &
Run Code Online (Sandbox Code Playgroud)
当我ssh直接进入并调用此脚本时,python脚本在我退出后继续在后台运行。但是,当我运行此命令时:
ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "./startup.sh"
Run Code Online (Sandbox Code Playgroud)
该过程ssh在完成运行后立即结束并关闭会话。
两者有什么区别?
编辑:python 脚本通过 Bottle 运行 Web 服务。
EDIT2:我也尝试创建一个调用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}; …Run Code Online (Sandbox Code Playgroud)