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?

edA-qa mort-ora-y
quelle
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.

tombert
quelle
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 :).

Kyle
quelle
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
Suyash Jain
quelle
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.

jcomeau_ictx
quelle
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
Jeff Parsons
quelle