Как запустить длительный фоновый процесс через SSH и немедленно отключиться?

Как запустить длительный фоновый процесс через SSH и немедленно отключиться?

Я хочу написать скрипт bash, который может подключаться к серверу по ssh, запускать непрерывный фоновый процесс (бесконечный скрипт python) и выходить с сервера. Вот что я пробовал:

ssh user@domain "python3 script.py &"

ssh user@domain "python3 script.py & exit"

ssh user@domain "nohup python3 script.py & exit"

Ни один из них не работает. Скрипт успешно запускается, но я не могу выйти с сервера, и он остается в системе.

решение1

Команда nohupне делает то, что вы думаете: она игнорирует сигнал зависания, так что (терминальные) соединения на STDIO могут быть разорваны без отправки драйвером терминала данных SIGHUPприсоединенным процессам, но nohupне закрывает свои собственные соединения STDIO, а фактически передает их процессу, который она запускает, и, таким образом, sshdбудет ждать, пока процесс не завершится и эти дескрипторы в результате не будут закрыты.

Поэтому вам нужно убедиться, что процесс, который вы запускаете, также не подключен к дескрипторам STDOUT и STDERR, предоставленным ему sshd(STDIN уже открыт на /dev/null), и вы можете сделать это, перенаправив их (либо в файл, либо в /dev/null). nohupКоманда не является строго необходимой, так как ничего не будет отправлено SIGHUP, когда соединение SSH прервется.

Попробуй это:

ssh user@domain "python3 script >/dev/null 2>&1 &"

решение2

Попробуйте терминальный мультиплексор, tmux великолепен. Обычно я не люблю давать советы, где вам, возможно, придется что-то устанавливать, но tmux — это действительно удобное приложение, которое стоит иметь в своем арсенале. (возможно, оно уже установлено)

Вы можете запустить свое приложение, завернутое в tmux, отсоединиться, закрыть свой ноутбук, перейти куда-нибудь еще, войти снова и снова подключиться к сеансу, все еще работающему в tmux. Если ваша ОС старая, экран делает то же самое, но я предпочитаю tmux.

вы можете запустить новое приложение из командной строки или приложение, отформатированное следующим образом

tmux новый сеанс "команда1"

tmux new-session "ping 8.8.8.8"

Но вам, вероятно, следует назвать свои сессии. Теперь сократите новую сессию с именем muxping, которая запускается в фоновом режиме. -d отсоединяется.

tmux new -d -s muxping "ping 8.8.8.8"

теперь покажи это в фоновом режиме

tmux ls

прикрепить к нему

tmux a

Кроме того, вы можете разделить экран и делать много очень удобных вещей в tmux. Существует много сайтов с шпаргалками по tmux, которые упрощают большую страницу руководства. Довольно легко начать.

Связанный контент