Запуск скриптов в фоновом режиме

Для возможности выполнения bash-подобных скриптов в Linux в с целом и в OpenWrt-версии оболочки busybox в частности существует легкая в применении инфраструктура: необходимо лишь добавить к строке запускаемого скрипта символ “&“. Но есть и менее очевидные частности.

Реализация простого запуска некоторого скрипта /srv/tools/script.sh в фоне:

root@OpenWrt:~# /srv/tools/script.sh &

Все бы хорошо, но запущенный таким образом скрипт проработает ровно до тех пор, пока вы залогинены на консоль сервера. При отключении от сервера скрипт автоматически завершится.

Для запуска скрипта без связи с сессией пользователя следует использовать утилиту nohup:

root@OpenWrt:~# nohup /srv/tools/script.sh &

В этом случае запущенный скрипт останется работать даже при отключении от сервера, но весь выводимый скриптом текст будет записываться в файл nohup.log, создаваемый в текущем каталоге, о чем nohup непосредственно и информирует сообщением nohup: appending output to nohup.out. При этом данный файл будет создан даже в том случае, если у скрипта никогда не будет никакого вывода.

Чтобы nohup.log никогда не создавался, перенаправляем stdout скрипта в /dev/null:

nohup /srv/tools/netstat.sh >/dev/null &

Все, теперь лишних файлов более не создается и скрипт останется работать при отключении от консоли.

Интересно отметить, что при автоматическом запуске скриптов из /etc/rc.local при загрузке системы не требуется использовать ни перенаправление вывода, ни nohup – достаточно одного лишь символа &.

This entry was posted in Сеть и интернет and tagged , , . Bookmark the permalink.

3 Responses to Запуск скриптов в фоновом режиме

  1. Александр says:

    Полезная статья, спасибо

  2. Денис says:

    Очень пригодилось, спасибо)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>