【发布时间】:2017-06-04 19:29:34
【问题描述】:
嗨
我需要让脚本的pid通过ssh运行。
到目前为止我正在尝试的一些代码:
ssh some.host './script & ;回声$! nohup ssh some.host '( ./script & );回声$! > PID'; ssh some.host 'cat thePID'有什么建议吗?
【问题讨论】:
-
顺便说一下,第二种方法的最大问题是它仅在子shell中设置
$!,但随后它试图在父级中设置echo $!子shell退出后的那个子shell。 -
顺便说一句,
nohup绝对不会做任何你自己做不到的事情。ssh some.host './script </dev/null >/dev/null 2>&1 & echo "$!"; disown -a'做了远程nohup会做的所有有用 的事情,没有无用/有害的事情(比如创建nohup.out——如果你想记录stdout/stderr,自己用您通过为重定向指定/dev/null以外的目标来控制的文件名)。 -
顺便说一句,如果你想用它来启动远程服务,更好的方法是使用适当的进程监控系统——runit、daemontools、upstart、systemd等;一旦某物被定义为服务,其中任何一个都提供命令来启动它们、停止它们、检查它们的状态等,而无需知道 PID。
-
顺便说一句,我证明这是完全重复的,因为
& ;语法错误是唯一真正错误的东西——如果 OP 尝试运行相同的在本地命令以排除 SSH 并对他们的问题提出minimal reproducible example,他们会遇到完全相同的问题。因此,这个问题的不同之处仅在于不够小(未能排除与手头实际问题无关的因素)。