如何使用 nohup 通过 ssh 在远程服务器上执行本地 bash 脚本

How to execute a local bash script on remote server via ssh with nohup

我可以使用 -s 选项 运行 远程服务器上的本地脚本,如下所示:

# run a local script without nohup...
ssh $SSH_USER@$SSH_HOST "bash -s" < myLocalScript.sh;

而且我可以 运行 使用 nohup 的远程脚本,就像这样:

# run a script on server with nohup...
ssh $SSH_USER@$SSH_HOST "nohup bash myRemoteScript.sh > results.out 2>&1 &"

但是我可以 运行 我的本地脚本与 nohup 在远程服务器上吗?我预计脚本需要很多小时才能完成,所以我需要 nohup 之类的东西。我知道我可以将脚本复制到服务器并执行它,但是我必须确保在脚本完成后删除它,如果可能的话我宁愿不必这样做。

我尝试了以下方法,但没有用:

# run a local script without nohup...
ssh $SSH_USER@$SSH_HOST "nohup bash -s > results.out 2>&1 &" < myLocalScript.sh; 

您不必做任何特别的事情 - 一旦您在另一台机器上启动脚本,即使您终止连接,它也应该完成 运行:

例如

ssh $SSH_USER@$SSH_HOST "bash -s > results.out 2>&1" < myLocalScript.sh &

# Please wait a few seconds for the connection to be established
kill $! # Optional: Kill the last process

如果你想测试它,试试像这样的简单脚本

# myLocalScript.sh
echo 'File created - sleeping'
sleep 30
echo 'Finally done!'

results.out 文件应立即在另一台机器上创建,其中包含 "File created - sleeping"。您实际上可以使用 kill <your_pid> 终止本地 ssh 进程,它会 still 在另一台机器上保留 运行,并在 30 秒后打印 "Finally done!" 进入文件,然后退出。