Выполнение команды в качестве фонового процесса/службы

У меня есть команда Shell, которую я хотел бы запустить в фоновом режиме, и я прочитал, что это может быть сделано путем суффикса & для команды, которая заставляет ее работать как фоновый процесс, но мне нужно больше функциональности и задавался вопросом, как это сделать:

  • Я хочу, чтобы команда запускалась и запускалась в фоновом режиме при каждом перезапуске системы.
  • Я хотел бы иметь возможность запускать и останавливать его по мере необходимости, как можно сделать service apache2 start.

Как я могу это сделать? Есть ли инструмент, который позволяет мне запускать команду в качестве службы?

Я немного потерял это.

Спасибо

Ответ 1

Взгляните на команду daemon, которая может превратить произвольные процессы в демоны. Это позволит вашему script действовать как демон, не требуя от вас дополнительной работы. Следующий шаг - автоматически активировать его при загрузке. Чтобы узнать правильный способ сделать это, вам необходимо предоставить свою ОС (или для Linux, ваш дистрибутив).

Ответ 2

UNIX-системы могут обрабатывать столько процессов, сколько вам нужно одновременно (просто откройте новые окна оболочки, если вы находитесь в графическом интерфейсе), поэтому запуск процесса в фоновом режиме необходим только в том случае, если вам нужно продолжать использовать текущее окно оболочки для других вещей, как только вы запустите приложение или процесс, который продолжает работать.

Чтобы запустить команду, называемую командой в фоновом режиме, вы должны использовать:

command &

Это специальный символ, который возвращает вас в командную строку после запуска процесса. Существуют и другие специальные символы, которые делают другие вещи, более подробная информация доступна здесь.

Ответ 3

Основываясь на этой статье:
http://felixmilea.com/2014/12/running-bash-commands-background-properly/

... еще один хороший способ - с screen например:

screen -d -m -s "my session name" <command to run>

из руководства :

-d -m
Начальный экран в отдельном режиме. Это создает новый сеанс, но не привязывается к нему. Это полезно для сценариев запуска системы.

то есть. вы можете закрыть терминал, процесс продолжит работу (в отличие от &)

с screen вы можете снова подключиться к сеансу позже

Ответ 4

Для расширенного управления заданиями с помощью bash вы должны изучить команды jobs bg и fg.

Однако, похоже, что вы не очень заинтересованы в выполнении команды в фоновом режиме. Вы хотите запустить команду при запуске. Способ сделать это зависит от используемой системы Unix, но попробуйте посмотреть в семейство файлов rc (/etc/rc.local, например, на Ubuntu). Они содержат скрипты, которые будут выполняться после init script.

Ответ 5

Используйте nohup, направляя вывод в /dev/null

nohup command &>/dev/null &