我想通过 ssh 运行一些脚本并将其分离,这样即使 ssh 会话关闭后它仍会运行。我需要使用 sudo 来执行此操作。
我可以运行一些脚本,但无法将其分离。我尝试了以下命令:
ssh 10.0.139.120 -t "sudo -b nohup some_script"
和
ssh 10.0.139.120 -t "sudo nohup some_script &"
以上两种方法都不起作用。每次我都收到“与 10.0.139.171 的连接已关闭”的通知,并且服务器上没有正在运行的进程。
我也尝试过用屏幕来做:
ssh 10.0.139.120 -t "sudo screen -S script -md some_script"
它也不起作用,尽管我在本地服务器上输入命令时命令有效。那我该怎么做呢?
答案1
我做了一个小调查,发现这个类似的问题在 Stack Overflow 上。您必须添加脚本路径或必须进入脚本所在的目录:
ssh remote-host -t "sudo -b sh -c 'nohup /path/some_script > /dev/null 2>&1 &'"
ssh remote-host -t "sudo -b sh -c 'cd /path; nohup ./some_script > /dev/null 2>&1 &'"
如果没有sh -c
或在末尾bash -c
添加“与”符号,则会以某种方式中断命令。&
我无法将其用于disown
此目的,但setsid
效果很好:
ssh remote-host -t 'sudo -b setsid /path/some_script'
答案2
您可以尝试使用disown
以避免在关闭ssh
会话后进程被终止。