Правильный способ установить пользовательский сервис выскочки


51

Я использую upstart для сервисов на своих серверах. Написать файл conf и поместить его в /etc/initнего достаточно просто, но, похоже, он не полностью установлен. Во-первых, service --status-allне указан мой новый сервис. Я проверил, и если я сделаю ссылку /etc/init.dна /lib/init/ubstart-jobнего, появится в статусе. Но выполнение этого вручную заставляет меня думать, что я делаю это неправильно, и вполне могут быть другие этапы настройки, которые не выполняются.

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


2
Этот парень ответил на один из моих вопросов, используя сервис upstart, и дал подробное объяснение, он может указать на шаг, который мог быть пропущен askubuntu.com/a/278128/75967
Меер Борг

1
Вы имели в виду /lib/init/upstart-job?
dalore

Ответы:


46

Когда вы изначально копируете новый файл conf в папку / etc / init, вам нужно вызвать:

initctl reload-configuration

По этому ваш выскочка должен быть правильно зарегистрирован.


8
Таким образом, это правильно настраивает задание (то есть startи stopработу), но не заставляет задание отображаться в статусе all. Я все еще должен был добавить это вручную, чтобы /etc/init.d/это произошло.
Джеймс МакМэхон

1
@JamesMcMahon Вам необходимо запустить initctl listкоманду с Судо: sudo initctl list. Таким образом, вы увидите полный список услуг.
Шахрияр Иманов

Почему sudo, похоже, вообще не меняет вывод списка initctl.
LovesTha

@JamesMcMahon, I still had to manually add it to /etc/init.d. Вы все еще должны были добавить что? Это означает, что в дополнение к X.confдобавленному файлу /etc/init, также необходимо добавить файл в /etc/init.d?
Кевин Мередит

@KevinMeredith, извините, я не был более подробным. Прошло 2 года, и я не могу вспомнить конкретику. Если вы посмотрите на некоторую документацию по init.d, она должна быть понятной.
Джеймс МакМэхон

18

Оформить инструкцию по обслуживанию:

service --status-all запускает все сценарии инициализации в алфавитном порядке с командой status. Эта опция вызывает состояние только для заданий sysvinit, задание upstart можно запрашивать аналогично списку initctl.

(выделение добавлено)

Вот почему добавление его в /etc/init.d (где расположены задания sysvinit) сделало эту работу. Итак: попробуйте запустить список initctl :).


That's why adding it Добавление чего? В дополнение к my_service.confфайлу в /etc/init, также необходимо иметь /etc/init.dфайл?
Кевин Мередит

Не работает с Ubuntu 16.04.4 LTS \\ $ initctl list initctl: Имя "com.ubuntu.Upstart" не существует $ sudo initctl list initctl: Невозможно подключиться к Upstart: Не удалось подключиться к сокету / com / ubuntu / upstart:
Отказ в

13

Для SysV Services

Убедитесь, что вы выполняете следующие шаги при добавлении / создании нового сервиса в Ubuntu.

  1. Создайте файл сервиса в /etc/init.d/<service name>
  2. chmod 700 /etc/init.d/<service name>
  3. update-rc.d <service name> defaults
  4. update-rc.d <service name> enable

Теперь увидимся в сервисе в

service --status-all

15
ваш ответ относится к sysv и не выскочка. Вы можете удалить его.
jcomeau_ictx

3
Это действительно полезный ответ.
ATorras

хотя это относится к другому сервису, это действительно полезно
wuppi

1

Я обнаружил, что ошибка в файле .conf может сделать работу неузнаваемой для initctl. например, наличие setuidстроки в Upstart версии 1.3 или более ранней.


1

Хотя текущий выбранный ответ является правильным для добавления нового сервиса в upstart, он не особенно полезен для выяснения ПОЧЕМУ не удается загрузить конфигурацию в / etc / init / - отсутствующий фрагмент сначала использует init-checkconf, чтобы убедиться, что ваш конфиг действителен, и затем с помощью reload-конфигурации:

####Test the new config - resolving any issues before continuing:
ERROR: File /etc/init/test.conf: syntax invalid:
test.conf:35: Unterminated quoted string

####then fix and recheck:
# init-checkconf /etc/init/test.conf
File /etc/init/test.conf: syntax ok

####then reload:
# initctl reload-configuration

#### and start:
# start test
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.