Prawidłowy sposób zainstalowania niestandardowej usługi upstart

51

Korzystam z usługi upstart dla usług na moich serwerach. Napisanie pliku conf i umieszczenie go /etc/initjest dość łatwe, ale wydaje się, że nie można go całkowicie zainstalować. Po pierwsze, service --status-allnie wyświetla mojej nowej usługi. Sprawdziłem i jeśli utworzę link /etc/init.ddo /lib/init/ubstart-jobniego, pojawi się w statusie. Ale zrobienie tego ręcznie sprawia, że ​​myślę, że nie robię tego dobrze, i mogą istnieć inne etapy konfiguracji, które nie są wykonywane.

Jaki jest prawidłowy sposób zainstalowania usługi upstart, tak aby została poprawnie zarejestrowana we wszystkich narzędziach do obsługi usług?

edA-qa mort-ora-y
źródło
2
Ten facet odpowiedział na jedno z moich pytań za pomocą usługi upstart i dał szczegółowe wyjaśnienie, może wskazywać krok, który mógł zostać pominięty askubuntu.com/a/278128/75967
Meer Borg
1
Miałeś na myśli /lib/init/upstart-job?
dalej

Odpowiedzi:

46

Kiedy początkowo kopiujesz nowy plik conf do folderu / etc / init, musisz wywołać:

initctl reload-configuration

W ten sposób Twój upstart powinien zostać poprawnie zarejestrowany.

tombert
źródło
8
Więc to poprawnie konfiguruje zadanie (tj. startI stoppracę), ale nie powoduje, że zadanie pokazuje się jako status wszystkich. Nadal musiałem to ręcznie dodać, aby /etc/init.d/tak się stało.
James McMahon
1
@JamesMcMahon Musisz uruchomić initctl listkomendę sudo: sudo initctl list. W ten sposób zobaczysz pełną listę usług.
Shahriyar Imanov,
Dlaczego sudo, wcale nie zmienia wyniku listy initctl.
LovesTha
@JamesMcMahon, I still had to manually add it to /etc/init.d. Nadal musiałeś co dodać? Oznacza to, że oprócz X.confdodanego pliku /etc/initkonieczne jest również dodanie pliku /etc/init.d?
Kevin Meredith,
@KevinMeredith, przepraszam, nie byłem bardziej szczegółowy. Minęły 2 lata i nie pamiętam szczegółów. Jeśli zajrzysz do dokumentacji init.d, to powinno być jasne.
James McMahon,
18

Zapoznaj się z instrukcją obsługi:

service --status-all uruchamia wszystkie skrypty inicjujące, w kolejności alfabetycznej, z poleceniem status. Ta opcja wywołuje status tylko dla zadań sysvinit, zadania upstart można zapytać w podobny sposób za pomocą listy initctl.

(podkreślenie dodane)

Dlatego dodanie go do /etc/init.d (gdzie znajdują się zadania sysvinit) sprawiło, że zadziałało. Więc: spróbuj zamiast tego uruchomić listę initctl :).

Kyle
źródło
That's why adding it Dodanie co? Oprócz my_service.confpliku w /etc/init, trzeba również mieć /etc/init.dplik?
Kevin Meredith,
Nie działa z Ubuntu 16.04.4 LTS \\ $ initctl list initctl: Nazwa „com.ubuntu.Upstart” nie istnieje $ sudo initctl list initctl: Nie można połączyć się z Upstart: Nie można połączyć się z gniazdem / com / ubuntu / upstart: Odmowa połączenia
nine9five
13

Dla usług SysV

Upewnij się, że wykonujesz poniższe kroki podczas dodawania / tworzenia nowej usługi w Ubuntu.

  1. Utwórz plik usługi w /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

Teraz do zobaczenia w serwisie

service --status-all
Suyash Jain
źródło
15
twoja odpowiedź dotyczy sysv, a nie upstart. możesz go usunąć.
jcomeau_ictx
3
To naprawdę przydatna odpowiedź.
ATorras
choć odnosi się do innej usługi, jest naprawdę przydatna
wuppi
1

Odkryłem, że błąd w pliku .conf może sprawić, że zadanie nie będzie rozpoznawane przez initctl. na przykład posiadanie setuidlinii w wersji Upstart 1.3 lub wcześniejszej.

jcomeau_ictx
źródło
1

Chociaż aktualnie wybrana odpowiedź jest poprawna do dodania nowej usługi do uruchomienia, nie jest szczególnie pomocna w ustaleniu DLACZEGO konfiguracja w / etc / init / nie ładuje się - brakująca część używa najpierw init-checkconf, aby upewnić się Twoja konfiguracja jest poprawna, a następnie przy użyciu Reload-Configuration:

####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
Jeff Parsons
źródło