Мне нужно запустить несколько скриптов 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
инструмент.