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

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

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

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

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

Спасибо


person Mridang Agarwalla    schedule 17.11.2011    source источник
comment
К вашему сведению, служба Unix обычно называется демоном — знание этого может вам помочь найти информацию легче.   -  person sorpigal    schedule 17.11.2011


Ответы (5)


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

person sorpigal    schedule 17.11.2011
comment
Привет Сорпигаль. Это помогло. - person Mridang Agarwalla; 18.11.2011
comment
Привет, Сорпигал. Я знаю, что уже принял этот ответ, но не могли бы вы сказать, как я могу заставить демон запускаться при запуске. У меня убунту 10.4. Спасибо. - person Mridang Agarwalla; 18.11.2011
comment
@MridangAgarwalla: я не очень хорошо знаком с новой системой инициализации Ubuntu, но попробуйте здесь в разделе «Службы письма» поместите вызов вашего демона туда, где он говорит echo "Put bash code here" - person sorpigal; 18.11.2011

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

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

command &

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

person MattMatt    schedule 17.11.2011
comment
Преимущество использования решения Sorgigal заключается в том, что вы можете закрыть процесс терминала/оболочки, и процесс продолжит работу. Это не тот случай, когда используется &, так как процесс остается присоединенным к конкретному процессу оболочки и завершается, если процесс оболочки делает это. - person metasoarous; 14.08.2013
comment
Чтобы command продолжал работать после закрытия оболочки, используйте nohup command & - person rem; 28.02.2016

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

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

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

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

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

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

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

person Anentropic    schedule 09.09.2015
comment
Домен felixmilea.com больше не существует, и ссылка случайным образом перенаправляет на фишинговую страницу. - person raratiru; 19.12.2019

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

nohup command &>/dev/null &

person philip mudenyo    schedule 21.10.2017

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

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

person rahmu    schedule 17.11.2011
comment
Я знаю, что это не решение для OP, но если кто-то использует этот ответ, полезно знать, что вы можете отказаться от заданий, и они будут продолжать работать в фоновом режиме даже после выхода из оболочки. - person Seamus Connor; 26.08.2015