2014-02-17 6 views
37

Allgemeine Frage: Wie startet man einen systemd. Service nachdem ein bestimmter .service erfolgreich gestartet wurde?Systemd Start Service nach spezifischem Service

Spezifische Frage: Wie starte ich website.service erst nachdem mongodb.service gestartet wurde? Mit anderen Worten, website.service sollte von mongodb.service abhängen.

+1

Diese Frage, nicht ServerFault? –

+0

@ Rémi ist es auf beiden Seiten in Ordnung! :) –

+1

@AnonymousPenguin Nein, es war nur 3,5 Jahre, bevor Sie geantwortet haben, es ist keine Frage zum Thema SO. Es geht nicht um Programmierung. SF oder, besser, Unix/Linux.SE wäre viel geeigneter. –

Antwort

39

In der .service Datei unter dem [Unit] Abschnitt:

[Unit] 
Description=My Website 
After=syslog.target network.target mongodb.service 

Der wichtige Teil ist die mongodb.service

Die manpage es es ist jedoch aufgrund der Formatierung beschreibt nicht so klar auf dem ersten Blick

systemd.unit - well formatted

systemd.unit - not so well formatted

+0

Unser Mongod-Dienst startet eine sehr große Datenbank. Der nachfolgende Dienst wird nicht korrekt gestartet, da Mongo nach dem Start mehr Zeit benötigt, um die Datenbank zu laden. Unser zweiter Dienst beginnt also, aber es schlägt fehl, weil Mongo erfolgreich gestartet wurde, aber die Datenbank nicht geladen hat. Vielleicht könnte eine Verzögerung helfen ... – wayofthefuture

16

After= Die Abhängigkeit ist nur wirksam, wenn der Dienst einschließlich After= und der von After= eingeschlossene Dienst beide für den Start als Teil des Systemstarts geplant sind.

Ex:

a.service 
[Unit] 
After=b.service 

diese Weise, wenn beide a.service und b.service sind aktiviert ist, dann wird systemd b.service nach a.service bestellen.

Wenn ich kein Missverständnis bin, was Sie fragen, ist wie b.service gestartet wird, wenn a.service startet, obwohl b.service nicht aktiviert ist.

Die Richtlinie hierfür lautet Wants= oder Requires= unter [Unit].

mongodb.service 
[Unit] 
Wants=website.service 
After=website.service 

Der Unterschied zwischen Wants= und Requires= auf der man-Seite von .unit erklärt - gehört http://www.freedesktop.org/software/systemd/man/systemd.unit.html