Используйте ssh для запуска удаленного процесса и выхода - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь использовать ssh из командной строки для запуска сервера Python на удаленном сервере с помощью следующей команды:

$ ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
-o ConnectTimeout=5 -f -i mykey.pem user@99.99.99.99 \
'python -m SimpleHTTPServer 3000 & echo $! > /home/user/pysrv.pid'

После запуска мой ssh сеанс переходит в фоновый режим, но не завершается, пока не запущен сервер python. Есть ли способ настроить команду так, чтобы ssh не работал в качестве фонового процесса на моем текущем компьютере?

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Команда ssh завершается, когда соединение TCP закрыто. Если вы перенаправите stdin и stderr удаленной команды, к соединению TCP ничего не будет подключено, и оно закроется.

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 -f -i mykey.pem user@99.99.99.99 'python -m SimpleHTTPServer 3000  2>/dev/null 2>&1 </dev/null& echo $! > /home/user/pysrv.pid'
0 голосов
/ 07 сентября 2018

Вы можете сделать

nohup python -m SimpleHTTPServer 3000 & echo $! > /home/user/pysrv.pid &

Это создаст отдельное задание, которому не нужен родитель (ssh).

OTOH, если вы убьете процесс сервера ssh, вы не сможете подключиться снова. Это то, что вы хотите, или вы просто пытаетесь убить сеанс? Если это просто сеанс, он должен сам исчезнуть после разрыва соединения.

...