Существует множество способов запуска скриптов и программа в фоновом режиме в *nix системах (Linux, OS X, BSD) и не все делают это оптимальным способом. Большое количество способов представлено в этой статье, в том числе и тот, который позволяет полностью отвязать скрипт от консоли и позволить ему работать после закрытия сессии. Ниже приведён перевод этой статьи.
Самый популярный способ запуска команды в фоновом режиме в Linux
Большинство людей запускает программы при помощи добавления к команде амперсанда (&), что позволяет отвязать программу от потока stdin, позволяя запускать другие команды.
root@host:~w# ./parser.py &
[1] 11294
root@host:~# starting parsing...
launching...
При этом потоки stdout и stderr остаются привязанными к программе и вы будете наблюдать вывод любой команды в вашей сессии терминала. При этом вы не сможете спокойно пользоваться какими-либо редакторами типа emacs/vim или mc.
Помимо этого скорее всего (в зависимости от системы), при окончании сессии программа получит сигнал HUP, который завершит её при окончании сессии.
root@host:~w# ./parser.py &>/dev/null &
[1] 11494
root@host:~#
Такой запуск с перенаправлением вывода на /dev/null уже не будет выдавать никаких сообщений в консоль, но при этом также остаётся возможность того, что программа будет завершена с прекращением сессии.
Использование disown
При выполнении disown, команда отвязывается от списка задач консоли и при завершении сессии ни одна из запущенных команд не получит HUP сигнала.
root@host:~w# ./parser.py &>/dev/null &
[1] 944
root@host:~# jobs
[1+] ./parser.py &>/dev/null &
root@host:~# disown
root@host:~# jobs
root@host:~#
Использование nohup
Есть ещё один вариант запуска скрипта с использованием команды nohup, что приведёт к игнорированию командой HUP сигнала, который прерывает выполнение команды при завершении сессии.
root@host:~w# nohup ./parser.py &>/dev/null &
[2] 23501
[1] Done nohup ./parser.py
root@host:~#
При этом если использовать nohup без редиректа потоков, то он создаст файл nohup.out, в который по умолчанию будут переправляться все потоки.