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

Использование DNS-запроса даже за NAT-маршрутизатором, транслирующим DNS-адреса, может работать:

$ dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com | cut -d'"' -f2
x.y.z.t

или вместо этого вы можете использовать метод HTTP-запроса:

$ curl -s ipinfo.io/ip
x.y.z.t
3
13.03.2020, 22:07
3 ответа

Команда 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 &"
0
28.04.2021, 23:20

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

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

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

tmux новый -сеанс "command1"

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, которые упрощают большую справочную страницу. это довольно легко начать.

0
28.04.2021, 23:20

Я сам нашел решение.

Я пытался:

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

Это не совсем то, к чему я стремился, но, похоже, это работает!

Я тоже попробую tmux и обновлю этот ответ.

0
28.04.2021, 23:20

Теги

Похожие вопросы