我想开始通过ssh使用nohup的远程计算机上的进程。 问题是如何得到的PID进程开始nohup的,所以“过程,实际上做的事情”,而不是一些外壳实例等。 另外,我想存储在文件输出和错误,但这里说的不是问题...
在当地,它完美的作品使用
nohup sleep 30 > out 2> err < /dev/null & echo $!
它呼应了我的命令“休眠30”,这也是我可以看到使用“顶”或“的ps aux | grep的睡眠”的具体PID。
但我无法远程执行它通过ssh。 我想是这样
ssh remote_machine 'nohup bash -c "( ( sleep 30 ) & )" > out 2> err < /dev/null'
但我想不通的地方放置“回声$!” 因此,它显示在我的本地壳。 它总是显示我的意思的PID,例如“打击”实例等一
有人偷一个想法如何解决这个问题?
编辑:好的,可能不会在这里需要“的bash -c” 像Lotharyx指出,我得到正确的PID就好使用
ssh remote 'nohup sleep 30 > out 2> err < /dev/null & echo $!'
但随后的问题是,如果你代替“休眠30”的东西,产生输出,也就是说,“呼应的Hello World!”,即输出不会文件“出”,在结束了,无论是在本地还是远程端。 任何人有一个想法,为什么?
EDIT2:我的错! 只是有没有留下其他设备上的空间,这就是为什么文件“out”和“犯错”一直都是空的!
因此,这是工作。 此外,如果一个要调用的多个命令中的行,用分号(;)隔开,一个仍然可以使用“的bash -c”,如下所示:
ssh remote 'nohup bash -c "echo bla;sleep 30;echo blupp" > out 2> err < /dev/null & echo $!'
然后它打印出的“庆典-c”的PID在本地端,这只是罚款。 (这是不可能得到的“最里面的”或“忙”进程的PID,因为每个程序本身可以产生新的子过程,没有办法,找出...)