Как запустить сервис автоматически, когда Ubuntu запускается?

Попробовать xmonad --recompile.

В то время как я не могу ответить, почему это автоматически не перекомпилировало если .xmonad/xmonad.hs изменяется (я думаю, что это должно и однажды сделало), это могло бы помочь, особенно с нахождением ошибок в конфигурации, не перезапуская сессию.

31
24.07.2013, 16:44
2 ответа

Для создания задания, которое будет запущено автоматически, когда Ubuntu запустится, используйте пример, данный здесь. Как записанный пример, предположите для создания следующего файла /etc/init/testservice.conf с sudo:

# testservice - test service job file

description "my service description"
author "Me <myself@i.com>"

# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas

# When to start the service
start on runlevel [2345]

# When to stop the service
stop on runlevel [016]

# Automatically restart process if crashed
respawn

# Essentially lets upstart know the process will detach itself to the background
# This option does not seem to be of great importance, so it does not need to be set.
#expect fork

# Specify working directory
chdir /home/user/testcode

# Specify the process/command to start, e.g.
exec python mycommand.py arg1 arg2

'Вручную' запустить или остановить использование процесса

sudo start testservice
sudo stop testservice

Посмотрите команды управления заданиями.

33
27.01.2020, 19:37
  • 1
    , я должен был "начать на запущенном mountall" запускать сервис. –  martinedwards 23.03.2016, 12:09

Хорошо, Alex, дело в том, что все процессы пространства пользователя в Linux запускаются с init процесс, pid которого равняется 1. Например, выполненный pstree видеть дерево Ваших процессов, корень которых является init.. Существует несколько версий init внедрение процессов в наше время, самый известный

  • sysVinit (классический init, все еще используемый некоторыми дистрибутивами, включая более старый Debian)
  • Выскочка init, используемый более старой Ubuntu и некоторым RHEL (Red Hat) и более старые версии Fedora
  • systemd init, используемый современным Fedora, Ubuntu, Debian, RHEL, версиями SUSE

Традиционно, Unix'es использовал init названную реализацию sysVinit init, названный под названием https://ru.wikipedia.org/wiki/UNIX_System_V версия Unix. Это очень влияет, и другие inits обратно совместимы к нему.

В основном, sysVinit сначала читает /etc/inittab файл, решает, какой runlevel работать и говорит /etc/init.d/rc сценарий для выполнения так называемых init сценариев. Например, когда это обычно загружается к многопользовательскому runlevel, который обычно является runlevel 2 на Ubuntu, /etc/init.d/rc начинает выполнять сценарии в /etc/rc2.d. Файлы там являются только символьными ссылками на сценарии, в то время как сами сценарии хранятся в /etc/init.d каталог. Именование тех символьных ссылок в /etc/rc*.d каталоги следующие. Скажите, у нас есть следующие сценарии в /etc/rc2.d:

$ls /etc/rc2.d
S16rsyslog
S17apache2
K02network-manager

Это означает, которые после переключения на runlevel 2 init обрабатывают, сначала уничтожает network-manager процессы, причина его название сценария запускается с K - K02network-manager и затем запускает процессы, имена которых запускаются с S. Эти две цифры после S или K число от 00 до 99, который определяет порядок, процессы запускаются в. Например. rsyslog запускается прежде apache2, потому что 16 меньше чем 17 (который имеет смысл, причина, Вы хотите, чтобы апач положился на регистрирующиеся мощности rsyslog, таким образом rsyslog, должна быть запущена сначала). Сценарии являются случайными сценариями оболочки, выполняемыми #!/bin/sh.

Так, в основном для запуска программы после запуска в стиле sysVinit запишите собственный сценарий (вставка копии это от любого примера, Вы вошли /etc/init.d), поместите его в /etc/init.d и создайте символьную ссылку на него под разумным именем, например. S99mytrojan в /etc/rc2.d. Вот объяснение типичных sysVinit сценариев в/etc/init.d http://docs.oracle.com/cd/E19683-01/806-4073/6jd67r96g/index.html

Теперь, парни Ubuntu решили, что хотят дополнительную функциональность от init. Они хотели быструю начальную загрузку ОС, таким образом, они хотели, чтобы их сценарии были выполнены параллельно; они хотели, чтобы мертвые процессы были автоматически перезапущены; они хотели, чтобы процессы вызвали друг друга явным способом событиями (так, чтобы апач был выполнен "системным журналом, запущенным" событие, и системный журнал выполняется "файловыми системами, смонтированными" событие и т.д., таким образом, у нас есть события вместо некоторых номеров 00-99). Таким образом они сделали Выскочку, и вот то, как это работает. Выскочка initscripts вставляется /etc/init каталог (не путают с /etc/init.d). Выскочка обычно работает /etc/init.d/rc также, таким образом, это собирается выполнять Ваши sysVinit сценарии обычно. Но если Вы хотите, чтобы Ваш сценарий был повторно порожден на выход - события Upstart для Вас.

Хотя я не могу проверить, что мой сценарий работает, я предполагаю, что для Ваших целей, необходимо записать следующее /etc/init/mytrojan.conf сценарий:

start on runlevel [02]
respawn
exec mytrojan --argument X 

Но если Вам нужны зависимости, по крайней мере, файловые системы и сеть, может быть это, имеет смысл заменять start on runlevel [02] с чем-то как:

start on (local-filesystems and net-device-up IFACE!=lo)

ПРЕДУПРЕЖДЕНИЕ: Я не проверил правильность этого, вызвал, я не могу. Особенно, я не совсем уверен в том, как запустить сценарий после того, как Ваше сетевое соединение в порядке (я использовал эту версию). Попытайтесь гуглить для "выскочки в сети".

23
27.01.2020, 19:37
  • 1
    Это - очень хороший обзор истории процесса, запущенного в Linux, но это не отвечает вопросом. Я все еще не знаю, как 'создать' новомодный процесс. Я также просто хочу использовать его, не понять каждый крошечный бит о том, как это работает. Я просто хотел иметь простой и простой в использовании рабочий пример, того, как создать процесс, который будет запущен и повторно порожден автоматически с выскочкой человечности.. l. –  Alex 24.07.2013, 18:44
  • 2
    @Alex: обновленный с образцом scipt. Обратите внимание на то, что мой сценарий мог бы очень хорошо быть неправильным. Я сделал это в духе alexreisner.com/code/upstart. –  Boris Burkov 24.07.2013, 19:13
  • 3
    Upvoted, потому что это - один из лучших ответов, которые я когда-либо читал. –  user1301428 13.04.2014, 23:43

Теги

Похожие вопросы