Удаленный запуск pid задания в фоновом режиме - PullRequest
5 голосов
/ 25 июня 2009

Я пытаюсь запустить в фоновом режиме задание на удаленной машине и получить его 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 ]

3 голосов
/ 25 июня 2009

Вы получили ошибку, потому что вы ';' является избыточным, попробуйте vmstat 1 1000> vmstat.log & echo $! '

Но я не уверен, что это сработает, потому что после выхода из системы процесс получит SIGHUP. Посмотрите на nohup (1).

2 голосов
/ 08 октября 2009

Попробуйте заключить фоновую команду в фигурные скобки:

PID=`$REMOTE_EXEC '{ vmstat 1 1000 > vmstat.log & }; echo $!'`
0 голосов
/ 17 октября 2013

Если вы используете слабые кавычки, вам нужно экранировать $! как следующее:

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

или

P=`$REMOTE_EXEC "{ vmstat 1 1000 > vmstat.log & }; echo \\\$!"`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...