如何通过 ssh 使用 sudo 运行分离命令?

如何通过 ssh 使用 sudo 运行分离命令?

我想通过 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会话后进程被终止。

相关内容