Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

nohup ./my_website &

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

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