Назад | Перейти на главную страницу

Скрипт, запущенный с nohup, убивается при выходе из терминала

Мне нужно запустить несколько скриптов Python с бесконечным циклом на сервере ubuntu (Amazon EC2). И мне очень нравится идея использовать nohup, потому что это просто, и у меня может быть файл журнала output.out. Я запускаю сценарий как

nohup script.py > output.out & 

Процесс начался. Проверяю с помощью jobs -l все нормально. Затем я закрываю терминал и регистрирую процессы проверки с помощью jobs -l, и я больше не вижу его. Подскажите, что я делаю не так?

Если вы измените сеанс (выйдите из системы и вернетесь), нет никаких шансов, что вы увидите свой скрипт как задание.

пытаться ps вместо.

ps -u myuser

замена myuser фактическим логином ..

Долгая экспалация:
Фоновый процесс (задание) всегда привязан к конкретному терминалу:

[11]user@lab7-11:~> nohup ./test.sh > out &
[1] 39978

[11]user@lab7-11:~> ps aux |grep 39978
user   39978  0.0  0.0 106096  1156 pts / 11   S    06:15   0:00 bash ./test.sh

Хотя он привязан к терминалу, вы можете увидеть его в jobs вывод:

[11]user@lab7-11:~> jobs -l
[1]+ 39978 Running                 nohup ./test.sh > out &

После того, как вы закроете этот терминал, ваш работа стал демон и больше не привязан к терминалу

[7]user@lab7-11:~> ps aux |grep 39978
user   39978  0.0  0.0 106096  1156 ?        S    06:15   0:00 bash ./test.sh

Итак, на этом этапе вы можете проверить состояние вашего процесса через ps как было предложено @Archemar, но не через job

Краткое объяснение: Ваш сценарий был не убил - он стал демоном.

Попробуйте перенаправить все потоки ввода-вывода

nohup script.py < /dev/null > output.out 2> error.out &

Если ваша работа видна, когда вы используете jobs -l вы можете удалить его из сеанса с помощью disown

Другой способ сохранить выполнение скрипта - использовать screen инструмент.