Richtige Methode zum Installieren eines benutzerdefinierten Upstart-Dienstes


51

Ich verwende Upstart für Dienste auf meinen Servern. Das Schreiben und Ablegen einer conf-Datei ist recht /etc/initeinfach, scheint jedoch nicht vollständig zu funktionieren. Zum einen service --status-alllistet der meinen neuen Service nicht auf. Ich habe es überprüft und wenn ich einen Link /etc/init.ddazu /lib/init/ubstart-joberstelle, wird er im Status angezeigt. Aber wenn ich das manuell mache, denke ich, dass ich es nicht richtig mache, und es kann durchaus andere Konfigurationsschritte geben, die nicht durchgeführt werden.

Wie installiere ich einen Upstart-Dienst richtig, sodass er in allen Tools, die sich mit Diensten befassen, ordnungsgemäß registriert ist?


2
Dieser Typ beantwortete eine meiner Fragen mit Hilfe des Emporkömmlingsdienstes und gab eine ausführliche Erklärung ab. Es könnte sich um einen Schritt handeln, der möglicherweise übersehen wurde. Askubuntu.com/a/278128/75967
Meer Borg

1
Meinten Sie /lib/init/upstart-job?
Dalore

Antworten:


46

Wenn Sie eine neue conf-Datei zum ersten Mal in den Ordner / etc / init kopieren, müssen Sie Folgendes aufrufen:

initctl reload-configuration

Damit sollte Ihr Emporkömmling richtig registriert sein.


8
Auf diese Weise wird der Job korrekt eingerichtet (dh startund die stopArbeit), der Job wird jedoch nicht alle im Status angezeigt. Ich musste es noch manuell hinzufügen, /etc/init.d/damit das passierte.
James McMahon

1
@JamesMcMahon Sie müssen laufen initctl listBefehl mit sudo: sudo initctl list. Auf diese Weise wird eine vollständige Liste der Dienste angezeigt.
Shahriyar Imanov

Warum das sudo, es scheint die Ausgabe der initctl-Liste überhaupt nicht zu ändern.
LovesTha

@JamesMcMahon, I still had to manually add it to /etc/init.d. Musstest du noch was hinzufügen? Das bedeutet, dass zusätzlich zu einer X.confhinzugefügten Datei auch eine Datei hinzugefügt werden /etc/initmuss /etc/init.d.
Kevin Meredith

@ KevinMeredith, Entschuldigung, ich war nicht detaillierter. Es ist 2 Jahre her und ich kann mich nicht an die Einzelheiten erinnern. Wenn Sie sich eine init.d-Dokumentation ansehen, sollte dies hoffentlich klar sein.
James McMahon

18

Bezahlen Sie das Servicehandbuch:

service --status-all führt alle Init-Skripten in alphabetischer Reihenfolge mit dem Befehl status aus. Diese Option ruft nur den Status für Sysvinit-Jobs auf. Start-Jobs können auf ähnliche Weise mit initctl list abgefragt werden.

(Betonung hinzugefügt)

Aus diesem Grund hat das Hinzufügen zu /etc/init.d (wo sich die sysvinit-Jobs befinden) dazu beigetragen, dass dies funktioniert. Also: versuchen Sie stattdessen initctl list auszuführen :).


That's why adding it Was hinzufügen? Zusätzlich zu der my_service.confDatei in /etc/init, ist es auch notwendig, eine /etc/init.dDatei zu haben ?
Kevin Meredith

Nicht mit Ubuntu 16.04.4 LTS arbeiten \\ $ initctl list initctl: Name "com.ubuntu.Upstart" existiert nicht $ sudo initctl list initctl: Verbindung zu Upstart nicht möglich: Verbindung zu Socket / com / ubuntu / upstart fehlgeschlagen: Verbindung abgelehnt
nine9five

13

Für SysV-Dienste

Stellen Sie sicher, dass Sie die folgenden Schritte ausführen, während Sie einen neuen Dienst in Ubuntu hinzufügen / erstellen.

  1. Erstellen Sie die Servicedatei in /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

Wir sehen uns in

service --status-all

15
Ihre Antwort bezieht sich auf sysv und nicht auf Emporkömmlinge. Vielleicht möchten Sie es löschen.
jcomeau_ictx

3
Es ist in der Tat eine nützliche Antwort.
ATorras

obwohl es sich um eine andere serivice handelt, ist es in der tat nützlich
wuppi

1

Ich habe festgestellt, dass ein Fehler in der .conf-Datei den Job für initctl nicht erkennbar machen kann. Zum Beispiel mit einer setuidZeile in Upstart Version 1.3 oder früher.


1

Während die aktuell gewählte Antwort korrekt ist, um den neuen Dienst zum Upstart hinzuzufügen, ist sie nicht besonders hilfreich, um herauszufinden, WARUM eine Konfiguration in / etc / init / nicht geladen werden kann - das fehlende Teil verwendet zunächst init-checkconf, um sicherzustellen Ihre Konfiguration ist gültig und verwendet dann 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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.