Для возможности выполнения 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 – достаточно одного лишь символа &.
Полезная статья, спасибо
Очень пригодилось, спасибо)
Спасибо, как раз то что нужно и подробно всё расписано и объяснено :)