Выполнение команды в качестве фонового процесса/службы
У меня есть команда 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 &