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

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

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

tombert
источник
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 или более ранней.

jcomeau_ictx
источник
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
Джефф Парсонс
источник