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

У меня есть веб-приложение на сервере FreeBSD. Приложение представляет собой один исполняемый файл со встроенным веб-сервером. Моя оболочка по умолчанию - zsh.

Когда я запускаю его как "./my_website &" и закрываю соединение, оно прекращается. Однако, когда я переключаюсь на bash с помощью "/usr/local/bin/bash" и запускаю свой веб-сайт таким же образом "./my_website &", затем выхожу из bash и закрываю соединение, мой веб-сайт продолжает работать - именно то, что мне нужно,

Что здесь происходит - почему он продолжает работать в bash после закрытия соединения с моим сервером?

Это хорошая практика для запуска приложения в фоновом режиме? Если нет, как правильно запустить мой сайт, чтобы он не закрывался после моего отключения?

4 ответа

Или вы можете запустить его на экране:

screen -dm bash -c '/path/to/your/program'

Правильный способ - превратить ваше приложение в системный сервис и добавить yourapp_enable="YES" в /etc/rc.conf, чтобы [пере] запустить его автоматически. См. Практические сценарии rc.d в статье BSD, например.

Вам нужно использовать nohup команда

nohup ./my_website &

Это позволит вашему процессу работать после того, как родительский процесс умирает / завершается независимо от оболочки.

Это зависит от того, какова ваша цель. Если вам нужно запустить этот веб-сервер в течение короткого времени (разработка / тестирование), вы можете использовать screen/tmux и оставить его в открытом сеансе.

Если вы хотите запустить это приложение в рабочей среде, лучше написать сценарий запуска. Если это приложение не может их демонизировать самостоятельно, вы можете использовать daemon (8). Я рекомендую прочитать Практические скрипты rc.d в BSD, также вы можете найти много примеров в дереве портов. Чтобы найти rc-скрипты с демоном, вы можете использовать команду find /usr/ports/ -depth 4 -name *.in | xargs fgrep -l /usr/sbin/daemon

Другие вопросы по тегам