获取通过ssh使用sudo启动的进程的PID
我需要通过SSH和sudo
远程启动的进程(此处为sleep 20
)的进程ID。获取通过ssh使用sudo启动的进程的PID
date
被插入来说明SSH连接的持续时间。没有连接,当然,我的远程机器上也没有进程。
$ date; ssh pc1 "sleep 20 & echo \$!"; date # works
Mi 20. Jan 16:18:29 CET 2016
11540
Mi 20. Jan 16:18:50 CET 2016
$ date; ssh pc1 "echo password | sudo -S sleep 20"; date # works
Mi 20. Jan 16:20:44 CET 2016
[sudo] password for lab: Mi 20. Jan 16:21:04 CET 2016
$ date; ssh pc1 "echo password | sudo -S sleep 20 & echo \$!"; date # does not
Mi 20. Jan 16:21:55 CET 2016
11916
Mi 20. Jan 16:21:56 CET 2016
在第二台机器最后,完整的命令工作正常:
$ date; ssh pc2 "echo password | sudo -S sleep 20 & echo \$!"; date
Mi 20. Jan 16:23:40 CET 2016
6035
[sudo] password for lab: Mi 20. Jan 16:24:01 CET 2016
任何建议,为什么会出现两个机器的这种不同的行为?
信息:我知道清除密码的风险,但它是隔离测试网络中的共享帐户。
看起来不完整流程依赖的问题。再过一些毫秒,连接(和过程)就会一直保持建立。
$ date; ssh pc1 "echo password | sudo -S sleep 20 & echo \$! && sleep 0.01"; date
Do 21. Jan 14:50:39 CET 2016
[sudo] password for lab: 6841
Do 21. Jan 14:51:00 CET 2016
是这样的吗?
$ remote_pid=$(ssh [email protected] 'sleep 20 > /dev/null 2>&1 & echo $!')
$ echo $remote_pid
13878
或...
$ remote_pid=$(ssh [email protected] 'echo secret | sudo -S sleep 20 > /tmp/log 2>&1 & echo $!')
输入用户密码执行sudo在哪里? – Chickenmarkus
请参阅上面的更新版本.... – mauro
除输出管道到文件外,它与我的完全相同,也不起作用。在日志文件中,只有提示输入sudo密码(来自stderr)。 – Chickenmarkus
你是什么意思的“不工作”? –
我正在投票结束这个问题,因为它更适合[Unix&Linux](http://unix.stackexchange.com/)Stack Exchange。 –
这意味着我的进程没有在远程机器上运行。要么因关闭连接而死亡,要么反之亦然。 – Chickenmarkus