Запуск команды в качестве фонового процесса / службы - PullRequest
12 голосов
/ 17 ноября 2011

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

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

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

Я немного растерялся.

Спасибо

Ответы [ 5 ]

24 голосов
/ 17 ноября 2011

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

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

command &

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

21 голосов
/ 17 ноября 2011

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

3 голосов
/ 09 сентября 2015

На основании этой статьи:
http://felixmilea.com/2014/12/running-bash-commands-background-properly/

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

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

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

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

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

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

1 голос
/ 17 ноября 2011

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

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

0 голосов
/ 21 октября 2017

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

nohup command &>/dev/null &

...