远程启动后台启动作业的pid

时间:2009-06-25 11:04:49

标签: bash ssh

我正在尝试在后台启动远程计算机上的作业并获取其PID,以便我可以在以后杀死它。到目前为止我想出的是:

#!/bin/bash

IP=xxx.xxx.xxx.xx
REMOTE_EXEC="ssh $IP -l root"

# The following does NOT work, I am trying to get the PID of the remote job
PID=`$REMOTE_EXEC 'vmstat 1 1000 > vmstat.log & ; echo $!'`

# Launch apache benchmark
ab -n 10 http://$IP/

$REMOTE_EXEC "kill $PID"

不幸的是它不起作用。我正在接受

bash: syntax error near unexpected token `;'

但我不知道正确的语法是什么。

3 个答案:

答案 0 :(得分:3)

你得到了错误,因为你';'是多余的,试试'vmstat 1 1000> vmstat.log& echo $!'

但我不确定它会起作用,因为在您注销后,该过程将收到SIGHUP。看看nohup(1)。

答案 1 :(得分:2)

尝试用花括号围绕背景命令:

PID=`$REMOTE_EXEC '{ vmstat 1 1000 > vmstat.log & }; echo $!'`

答案 2 :(得分:0)

如果你使用弱引用,你需要逃避$!如下:

$REMOTE_EXEC "{ vmstat 1 1000 > vmstat.log & }; echo \$!"

P=`$REMOTE_EXEC "{ vmstat 1 1000 > vmstat.log & }; echo \\\$!"`