systemd: Einen Dienst nach einem zweiten starten?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
whiizy
Beiträge: 683
Registriert: 23.07.2011 22:09:37

systemd: Einen Dienst nach einem zweiten starten?

Beitrag von whiizy » 04.12.2014 13:26:34

Hat jemand unter systemd schonmal versucht, einen Dienst zeitlich erst nach einem zweiten Dienst zu starten? Normalerweise ist systemd ja wesentlich auf Parallelität ausgerichtet.

Mein konkretes Problem ist, daß der isc-dhcp-server schon vor dem daemon hostapd startet, und dann das Interface wlan0 noch nicht zur Verfügung hat, welches erst durch hostapd "link up" geht.

Ich müsste also irgendwo einstellen können, daß der isc-dhcp-server erst nach dem hostapd startet.

Im syslog ist das Problem bei boot zu sehen:

Code: Alles auswählen

Dec  3 23:19:13 itx1 systemd[1]: Started Login Service.
Dec  3 23:19:13 itx1 dhcpd:
Dec  3 23:19:13 itx1 dhcpd: No subnet declaration for wlan0 (no IPv4 addresses).
Dec  3 23:19:13 itx1 dhcpd: ** Ignoring requests on wlan0.  If this is not what
Dec  3 23:19:13 itx1 dhcpd:    you want, please write a subnet declaration
Dec  3 23:19:13 itx1 dhcpd:    in your dhcpd.conf file for the network segment
Dec  3 23:19:13 itx1 dhcpd:    to which interface wlan0 is attached. **
Dec  3 23:19:13 itx1 dhcpd:
Dec  3 23:19:13 itx1 dhcpd:
Dec  3 23:19:13 itx1 dhcpd: Not configured to listen on any interfaces!
Dec  3 23:19:13 itx1 dhcpd:
Dec  3 23:19:13 itx1 dhcpd: If you think you have received this message due to a bug rather
Dec  3 23:19:13 itx1 dhcpd: than a configuration issue please read the section on submitting
Dec  3 23:19:13 itx1 dhcpd: bugs on either our web page at http://www.isc.org or in the README file
Dec  3 23:19:13 itx1 dhcpd: before submitting a bug.  These pages explain the proper
Dec  3 23:19:13 itx1 dhcpd: process and the information we find helpful for debugging..
Dec  3 23:19:13 itx1 dhcpd:
Dec  3 23:19:13 itx1 dhcpd: exiting.
Dec  3 23:19:13 itx1 acpid: starting up with netlink and the input layer
Dec  3 23:19:13 itx1 acpid: 1 rule loaded
Dec  3 23:19:13 itx1 acpid: waiting for events: event logging is off
Dec  3 23:19:13 itx1 systemd[1]: Started Load/Save RF Kill Switch Status of rfkill0.
Dec  3 23:19:13 itx1 systemd[1]: Started LSB: Advanced IEEE 802.11 management daemon.
Dec  3 23:19:13 itx1 hostapd[471]: Starting advanced IEEE 802.11 management: hostapd.
Zugegebenermaßen habe ich jetzt noch nicht ausreichend danach recherchiert. Da systemd aber für viele (mich eingeschlossen) noch eher Neuland ist, finde ich hin und wieder kurze Basics ganz nützlich, wenn sie hier im Forum sichtbar werden.

Gruß

JuergenPB

Re: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von JuergenPB » 04.12.2014 13:34:46

Im Verzeichnis /lib/systemd/system sind die .service Dateien.
In den Dateien kann man im Bereich [Unit] angeben, nach welchem Services ein Service zu starten ist.
Dazu trägt man ein

Code: Alles auswählen

After=
Dahinter dann die Services, die vorher laufen müssen.

Benutzeravatar
Saxman
Beiträge: 4233
Registriert: 02.05.2005 21:53:52
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: localhost

Re: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von Saxman » 04.12.2014 13:37:07

Ich bin zwar auch noch nicht ganz firm mit systemd, allerdings werden Abhängigkeiten afaik jetzt über die unit files unter /etc/systemd/system/ geregelt. Dort kannst du auch Abhängigkeiten zu anderen Diensten angeben, z.B.:

Code: Alles auswählen

[Unit]
Requires=new dependency
After=new dependency
Mehr dazu findest du in der manpage

Code: Alles auswählen

man systemd.unit
Siehe z.B auch hier.
"Unix is simple. It just takes a genius to understand its simplicity." - Dennis Ritchie

Debian GNU/Linux Anwenderhandbuch | df.de Verhaltensregeln | Anleitungen zum Review und zum Verfassen von Wiki Artikeln.

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: AW: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von scientific » 04.12.2014 14:07:59

Du kannst auch in /etc/systemd/system ein verzeichnis anlegen, welches den namen des dienstes besitzt um ein ".d" ergänzt.
Z.b. /etc/systemd/system/hostapd.service.d

Darin legst du ein file an (namensgebund ist glaub ich egal!) mit dem inhalt

Code: Alles auswählen

[Unit]
After=irgendein.service
[\code]
Dann wird hostapd.service nach irgendein.service gestartet.

Du kannst auch Before= oder Wants= dort eintragen... Damit ergänzt du Unit-Files aus /lib/systemd/ und /run/systemd/generators, ohne die Originale verändern zu müssen.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

whiizy
Beiträge: 683
Registriert: 23.07.2011 22:09:37

Re: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von whiizy » 04.12.2014 16:28:02

Ich habe nach hostapd.service und isc-dhcp-server.service in den genannten Pfaden /lib/systemd/system/ und /etc/systemd/system/ gesucht, aber da liegt nichts Gleichnamiges. Aber sicherlich hat das auch wieder einen tieferen Sinn und diese Files sind vielleicht nur optional (oder werden die beiden daemons noch klassisch über init.d gestartet?).

Trotzdem bin ich eurem Rat und dem arch-wiki gefolgt, und habe eine customdependency.conf für den isc-dhcp-server angelegt:

Code: Alles auswählen

mkdir /etc/systemd/system/isc-dhcp-server.service.d
vi /etc/systemd/system/isc-dhcp-server.service.d/customdependency.conf
-->
[Unit]
Requires=hostapd.service
After=hostapd.service
So sollte der dhcp-server erst dann starten, wenn hostapd bereits läuft. Und das hat anscheinend auch gewirkt:

Code: Alles auswählen

syslog:
Dec  4 15:19:39 itx1 hostapd[520]: Starting advanced IEEE 802.11 management: hostapd.
Dec  4 15:19:39 itx1 systemd[1]: Started LSB: Advanced IEEE 802.11 management daemon.
Dec  4 15:19:39 itx1 systemd[1]: Starting LSB: DHCP server...
Dec  4 15:19:39 itx1 acpid: starting up with netlink and the input layer
Dec  4 15:19:39 itx1 acpid: 1 rule loaded
Dec  4 15:19:39 itx1 acpid: waiting for events: event logging is off
Dec  4 15:19:39 itx1 dhcpd: Internet Systems Consortium DHCP Server 4.3.1
Dec  4 15:19:39 itx1 dhcpd: Copyright 2004-2014 Internet Systems Consortium.
Dec  4 15:19:39 itx1 dhcpd: All rights reserved.
Dec  4 15:19:39 itx1 dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Dec  4 15:19:39 itx1 dhcpd: Internet Systems Consortium DHCP Server 4.3.1
Dec  4 15:19:39 itx1 dhcpd: Copyright 2004-2014 Internet Systems Consortium.
Dec  4 15:19:39 itx1 dhcpd: All rights reserved.
Dec  4 15:19:39 itx1 dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Dec  4 15:19:39 itx1 dhcpd: Wrote 2 leases to leases file.
Dec  4 15:19:39 itx1 dhcpd: Server starting service.
Dec  4 15:19:39 itx1 exim4[523]: Starting MTA: exim4.
Dec  4 15:19:39 itx1 exim4[523]: ALERT: exim paniclog /var/log/exim4/paniclog has non-zero size, mail system possibly broken
Dec  4 15:19:39 itx1 systemd[1]: Started LSB: exim Mail Transport Agent.
Dec  4 15:19:40 itx1 kernel: [    3.703059] i915 0000:00:02.0: No connectors reported connected with modes
Dec  4 15:19:40 itx1 kernel: [    3.703077] [drm] Cannot find any crtc or sizes - going 1024x768
Dec  4 15:19:40 itx1 kernel: [    3.704673] fbcon: inteldrmfb (fb0) is primary device
Dec  4 15:19:40 itx1 kernel: [    4.055892] Console: switching to colour frame buffer device 128x48
Dec  4 15:19:40 itx1 kernel: [    4.060592] i915 0000:00:02.0: fb0: inteldrmfb frame buffer device
Dec  4 15:19:40 itx1 kernel: [    4.060647] i915 0000:00:02.0: registered panic notifier
Dec  4 15:19:40 itx1 kernel: [    4.101173] ACPI: Video Device [GFX0] (multi-head: yes  rom: no  post: no)
Dec  4 15:19:40 itx1 kernel: [    4.102029] acpi device:09: registered as cooling_device6
Dec  4 15:19:40 itx1 kernel: [    4.102197] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input10
Dec  4 15:19:40 itx1 kernel: [    4.102493] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0
Dec  4 15:19:40 itx1 systemd[1]: Starting system-systemd\x2dbacklight.slice.
Dec  4 15:19:40 itx1 systemd[1]: Created slice system-systemd\x2dbacklight.slice.
Dec  4 15:19:40 itx1 systemd[1]: Starting Load/Save Screen Backlight Brightness of backlight:acpi_video0...
Dec  4 15:19:40 itx1 systemd[1]: Started Load/Save Screen Backlight Brightness of backlight:acpi_video0.
Dec  4 15:19:41 itx1 kernel: [    4.861525] [drm] Enabling RC6 states: RC6 on, RC6p off, RC6pp off
Dec  4 15:19:41 itx1 kernel: [    5.081211] random: nonblocking pool is initialized
Dec  4 15:19:41 itx1 isc-dhcp-server[673]: Starting ISC DHCP server: dhcpd.
Dec  4 15:19:41 itx1 systemd[1]: Started LSB: DHCP server.

Etwas verwirrend finde ich ja, wie oft der dhcp-server als gestartet in obigem Log-Auszug gemeldet wird. Gleich viermal, wenn man die Zeilen herausschneidet:

Code: Alles auswählen

Dec  4 15:19:39 itx1 systemd[1]: Starting LSB: DHCP server...
...
Dec  4 15:19:39 itx1 dhcpd: Server starting service.
...
Dec  4 15:19:41 itx1 isc-dhcp-server[673]: Starting ISC DHCP server: dhcpd.
...
Dec  4 15:19:41 itx1 systemd[1]: Started LSB: DHCP server.
So, gerade an dieser Stelle wollte ich meinen Beitrag abschicken und habe nur kurz nochmal einen Reboot zur Kontrolle gemacht. Ergebnis: Mist, doch wieder unerwartetes Verhalten! Der dhcp-server läuft, obwohl der hostapd gar nicht in der Prozessliste ist:

Code: Alles auswählen

# ps ax | egrep "host|dhcp"
  768 ?        Ss     0:00 /usr/sbin/dhcpd -q -cf /etc/dhcp/dhcpd.conf -pf /var/run/dhcpd.pid wlan0
Irgendwas ist beim Start von hostapd wohl schiefgelaufen, und trotzdem ist der dhcp-server dann noch gestartet:

Code: Alles auswählen

# systemctl status hostapd
● hostapd.service - LSB: Advanced IEEE 802.11 management daemon
   Loaded: loaded (/etc/init.d/hostapd)
   Active: active (exited) since Thu 2014-12-04 15:57:07 CET; 4min 46s ago
  Process: 467 ExecStart=/etc/init.d/hostapd start (code=exited, status=0/SUCCESS)

Dec 04 15:57:07 itx1 hostapd[467]: Starting advanced IEEE 802.11 management: hostapd failed!
Dec 04 15:57:07 itx1 systemd[1]: Started LSB: Advanced IEEE 802.11 management daemon.


# systemctl status isc-dhcp-server
● isc-dhcp-server.service - LSB: DHCP server
   Loaded: loaded (/etc/init.d/isc-dhcp-server)
  Drop-In: /etc/systemd/system/isc-dhcp-server.service.d
           └─customdependency.conf
   Active: active (running) since Thu 2014-12-04 15:57:09 CET; 6min ago
  Process: 573 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/isc-dhcp-server.service
           └─768 /usr/sbin/dhcpd -q -cf /etc/dhcp/dhcpd.conf -pf /var/run/dhcpd.pid wlan0

Immerhin läßt sich mit obigem systemctl Kommando noch erkennen, daß er meine customdependency.conf einbezogen hat. Mit einer gewissen Zufälligkeit scheint der hostapd mal richtig beim boot zu starten und mal nicht. Aber auch wenn der hostapd nach seinem Startversuch gleich abgesemmelt sein sollte, hätte ich eigentlich erwartet, daß der dhcp-server dann von systemd nicht mehr gestartet wird (wegen Requires und After).

Dem unzuverlässigen Start von hostapd beim boot muß ich jetzt also auch noch nachgehen - sorry, daß dieser Beitrag dadurch etwas länger geworden ist. Dank eurer Hilfe bin ich jedenfalls schon wieder einen Schritt weiter.

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von scientific » 04.12.2014 17:30:06

Code: Alles auswählen

Dec  4 15:19:39 itx1 systemd[1]: Started LSB: exim Mail Transport Agent.
Die entsprechenden Unit-Files zu solchen Zeilen (Started LSB...) müssten in /run/systemd/generator oder eher noch in /run/systemd/generator.late zu finden sein.
Sobald du ein Unitfile in /etc/systemd/system/ mit dem selben Namen anlegtst (und ganz wichtig

Code: Alles auswählen

systemctl daemon-reload
ausgeführt hast) verschwindet das entsprechende aus /run/...

Hast du systemctl daemon-reload ausgeführt?

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

JTH
Moderator
Beiträge: 3082
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von JTH » 04.12.2014 17:48:21

whiizy hat geschrieben:Etwas verwirrend finde ich ja, wie oft der dhcp-server als gestartet in obigem Log-Auszug gemeldet wird. Gleich viermal, wenn man die Zeilen herausschneidet:

Code: Alles auswählen

Dec  4 15:19:39 itx1 systemd[1]: Starting LSB: DHCP server...
...
Dec  4 15:19:39 itx1 dhcpd: Server starting service.
...
Dec  4 15:19:41 itx1 isc-dhcp-server[673]: Starting ISC DHCP server: dhcpd.
...
Dec  4 15:19:41 itx1 systemd[1]: Started LSB: DHCP server.
Tatsächlich wird der Service hier nur einmal gestartet: Die erste und letzte Log-Meldung kommen von systemd direkt vor bzw. nach dem Starten, die zweite vom dhcpd-Binary (strings /usr/sbin/dhcpd | grep starting) und die dritte vom Init-Script des DHCP-Servers (grep Starting /etc/init.d/isc-dhcp-server).

Starting LSB: […] bedeutet tatsächlich, wie du schon vermutet hast und scientific andeutet, dass ein Service (noch) über ein Script in /etc/init.d gestartet wird. Es gibt in dem entsprechenden Paket dann einfach (bisher) keine .service-Datei direkt für systemd.
Manchmal bekannt als Just (another) Terminal Hacker.

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von scientific » 04.12.2014 18:38:33

JTH hat geschrieben:
whiizy hat geschrieben:Etwas verwirrend finde ich ja, wie oft der dhcp-server als gestartet in obigem Log-Auszug gemeldet wird. Gleich viermal, wenn man die Zeilen herausschneidet:

Code: Alles auswählen

Dec  4 15:19:39 itx1 systemd[1]: Starting LSB: DHCP server...
...
Dec  4 15:19:39 itx1 dhcpd: Server starting service.
...
Dec  4 15:19:41 itx1 isc-dhcp-server[673]: Starting ISC DHCP server: dhcpd.
...
Dec  4 15:19:41 itx1 systemd[1]: Started LSB: DHCP server.
Tatsächlich wird der Service hier nur einmal gestartet: Die erste und letzte Log-Meldung kommen von systemd direkt vor bzw. nach dem Starten, die zweite vom dhcpd-Binary (strings /usr/sbin/dhcpd | grep starting) und die dritte vom Init-Script des DHCP-Servers (grep Starting /etc/init.d/isc-dhcp-server).

Starting LSB: […] bedeutet tatsächlich, wie du schon vermutet hast und scientific andeutet, dass ein Service (noch) über ein Script in /etc/init.d gestartet wird. Es gibt in dem entsprechenden Paket dann einfach (bisher) keine .service-Datei direkt für systemd.
systemd erzeugt mit einem generator zur runtime aus Startskripten in /etc/init.d units. Diese Units machen nichts anderes, als dieses Initskript zu starten, stopen oder damit den Dienst zum Reload aufzufordern. Solange, bis das Paket tatsächlich eine einene systemd-Unit verpasst bekommt.
Das ist es, was systemd mit sysvinit kompatibel macht... ;-)

Ich versuche mich momentan darin, amavis-new, exim4 & Co systemd-units mit Socket-Activation zu verpassen. Leider will das noch nicht so recht gelingen... Aber das ist eine andere Geschichte. :)

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

whiizy
Beiträge: 683
Registriert: 23.07.2011 22:09:37

Re: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von whiizy » 04.12.2014 21:58:41

scientific hat geschrieben: Hast du systemctl daemon-reload ausgeführt?
Ja, hatte ich ausgeführt.

Danke JTH und scientific für die Erläuterung von /run/systemd/generator.late/, wo die laufzeitgenerierten service-Dateien zu finden waren, die noch auf die klassischen init-scripte verweisen. Wie weit diese Kompatibilitätsschicht tatsächlich reicht, kann ich nicht wirklich einschätzen. Ich möchte aber annehmen, daß Optionen, wie Requires oder After, (hoffentlich) auch in diesem "Kompatibilitäts-Modus" funktionieren und meine customdependency.conf diese Optionen nur ergänzt/addiert und nicht komplett überschreibt.

Einen Schritt zurück.
Mein Problem liegt glaube ich tiefer, weil sich hier zuviele Fehlerbilder (3 Fälle) überlagern. Als ich vorhin zurück kam, und den Server nach langer Auszeit wieder eingeschaltet habe, sind beide daemons putzmunter angesprungen (Fall 1):

Code: Alles auswählen

 ps ax | egrep "host|dhcp"
  660 ?        Ss     0:00 /usr/sbin/dhcpd -q -cf /etc/dhcp/dhcpd.conf -pf /var/run/dhcpd.pid wlan0
  700 ?        Ss     0:00 /usr/sbin/hostapd -B -P /run/hostapd.pid /etc/hostapd/hostapd.conf  
Auch abzulesen an der Reihenfolge im syslog:

Code: Alles auswählen

Dec  4 20:36:44 itx1 hostapd[513]: Starting advanced IEEE 802.11 management: hostapd.
[...]
Dec  4 20:36:46 itx1 isc-dhcp-server[517]: Starting ISC DHCP server: dhcpd.
Dec  4 20:36:46 itx1 systemd[1]: Started LSB: DHCP server.
... und das, obwohl ich keine dependencies vorgegeben hatte:

Code: Alles auswählen

[Unit]
#Requires=hostapd.service
#Wants=hostapd.service
#After=hostapd.service
Fall 2: Nach einem boot kann der isc-dhcp-server nicht starten, weil manchmal der hostapd erst später oder gar nicht startet;

Code: Alles auswählen

Dec  4 20:49:30 itx1 dhcpd:
Dec  4 20:49:30 itx1 dhcpd: No subnet declaration for wlan0 (no IPv4 addresses).
Fall 3: Beide daemons sind nach einem boot nicht gestartet, syslog zeigt dann folgendes:

Code: Alles auswählen

Dec  4 20:58:56 itx1 isc-dhcp-server[473]: Starting ISC DHCP server: dhcpdcheck syslog for diagnostics. ... failed!
Dec  4 20:58:56 itx1 isc-dhcp-server[473]: failed!
Dec  4 20:58:56 itx1 systemd[1]: isc-dhcp-server.service: control process exited, code=exited status=1
Dec  4 20:58:56 itx1 systemd[1]: Failed to start LSB: DHCP server.
Dec  4 20:58:56 itx1 systemd[1]: Unit isc-dhcp-server.service entered failed state.
Diese mehr oder weniger zufälligen 3 Boot-Verhalten erschweren Diagnose und Gegenmaßnahmen natürlich ungemein. Ob systemd oder BIOS/Mainboard/WLAN-Card ursächlich sind, läßt sich bisher noch nicht festmachen.

Ich kapituliere an dieser Stelle erstmal und greife vorläufig auf die gute alte /etc/rc.local zurück, indem ich dort folgenden funktionierenden Work-around angeflanscht habe:

Code: Alles auswählen

systemctl restart hostapd.service
systemctl restart isc-dhcp-server.service 
.... ich will doch einfach nur zwei Dienste starten ...

Kommt Zeit, kommt Rat.

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von scientific » 04.12.2014 22:36:20

Naja... wenn der hostapd.service rechtzeitig fertig wird (ohne die definierten Abhängigkeiten), kann dhcpd auch starten. Wenn nicht, dann eben nicht.

Du kannst ja - mit definierten Abhängigkeiten - einmal den dhcp-Server starten und testen, ob hostapd mitgestartet wird.
Also in der Service-Unit für den dhcpd trägst du

Code: Alles auswählen

Requires=hostapd.service
After=hostapd.service
ein, und aus dem hostapd.service nimmst du die [Install]-Sektion raus (auskommentieren reicht einmal...)

Dann

Code: Alles auswählen

systemctl disable hostapd.service
und

Code: Alles auswählen

systemctl enable isc-dhcp-server.service
Dazu muss natürlich im service-File des dhcp-Servers eine [Install]-Sektion sein

Code: Alles auswählen

[Install]
WantedBy=multi-user.target
Wenn du jetzt manuell den dhcp.service startest, müsste der eigentlich zuerst den hostapd.service starten, und wenn der bereit ist den dhcp-Server.

Kennst du auch

Code: Alles auswählen

systemd-analyze dot amavis.service | dot -Tsvg > amavis.svg
Dazu musst du noch graphviz installieren

Code: Alles auswählen

apt-get install graphviz
Damit erzeugst du (in dem Fall für amavis.service) ein svg, welches du mit einem geeigneten Programm anschauen kannst, das dir die Abhängigkeiten für diesen Service zeigt. Du kannst auch mehrere Service-Files gleichzeitig angeben, dann wird die Darstellung komplexer...

Also in deinem Falle

Code: Alles auswählen

systemd-analyze dot hostapd.service isc-dhcp-server.service | dot -Tsvg > dhcp.svg
Vielleicht wird es dann klarer

Ein weiteres Debug-Tool ist

Code: Alles auswählen

systemctl show einservice.service
Auch das zeigt dir die aktuellen expliziten und impliziten Konfigurationsdetails des gewünschten Services.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von scientific » 04.12.2014 22:52:13

Vielleicht ist es auch sinnvoll, die init-Skripte zu studieren, wie die beiden Dienste tatsächlich aufgerufen und beendet werden.
Und damit baust du dir dann überhaupt ganz selber eine service-Unit für die zwei Dienste.
Oder du kopierst dir probehalber die zwei Service-Units aus /run/systemd/generator.late/ nach /etc/systemd/system und passt die After/Before/Wants/Requries-Einträge an.

Füge bei der Unit des dhcp-Servers folgendes ein:

Code: Alles auswählen

[Unit]
Description=Irgend eine Beschreibung, die dann im Journal auch so aufscheint
After=network-online.target hostapd.service
Requires=hostapd.service
Conflicts=shutdown.target
Und beim hostapd.service

Code: Alles auswählen

[Unit]
Description=Irgend eine Beschreibung, die dann im Journal auch so aufscheint
After=network-online.target
Conflicts=shutdown.target
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

whiizy
Beiträge: 683
Registriert: 23.07.2011 22:09:37

Re: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von whiizy » 05.12.2014 00:22:30

Ich habe mal versucht, das nachzuspielen:
scientific hat geschrieben: [...] und aus dem hostapd.service nimmst du die [Install]-Sektion raus (auskommentieren reicht einmal...)
... eine [Install]-Sektion hat meine /run/systemd/generator.late/hostapd.service nicht, also musste ich da erstmal nichts rausnehmen oder auskommentieren.

Wie von Dir beschrieben, habe ich aber dann eine [Install]-Sektion an die /run/systemd/generator.late/isc-dhcp-server.service angehängt ...

Code: Alles auswählen

[Install]
WantedBy=multi-user.target
... ohne an dieser Stelle schon genau nachgeschlagen zu haben, was das eigentlich bewirkt.
scientific hat geschrieben: Wenn du jetzt manuell den dhcp.service startest, müsste der eigentlich zuerst den hostapd.service starten, und wenn der bereit ist den dhcp-Server.
... sauber, zumindest während der Laufzeit hat Deine Prozedur geklappt:

Code: Alles auswählen

Dec  4 23:41:57 itx1 hostapd[1504]: Starting advanced IEEE 802.11 management: hostapd.
Dec  4 23:41:57 itx1 systemd[1]: Started LSB: Advanced IEEE 802.11 management daemon.
Dec  4 23:41:57 itx1 systemd[1]: Starting LSB: DHCP server...
Dec  4 23:41:57 itx1 dhcpd: Internet Systems Consortium DHCP Server 4.3.1
Dec  4 23:41:57 itx1 dhcpd: Copyright 2004-2014 Internet Systems Consortium.
Dec  4 23:41:57 itx1 dhcpd: All rights reserved.
Dec  4 23:41:57 itx1 dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Dec  4 23:41:57 itx1 dhcpd: Internet Systems Consortium DHCP Server 4.3.1
Dec  4 23:41:57 itx1 dhcpd: Copyright 2004-2014 Internet Systems Consortium.
Dec  4 23:41:57 itx1 dhcpd: All rights reserved.
Dec  4 23:41:57 itx1 dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Dec  4 23:41:57 itx1 dhcpd: Wrote 2 leases to leases file.
Dec  4 23:41:57 itx1 dhcpd: Server starting service.
Dec  4 23:41:59 itx1 isc-dhcp-server[1508]: Starting ISC DHCP server: dhcpd.
Dec  4 23:41:59 itx1 systemd[1]: Started LSB: DHCP server.
Dec  4 23:42:32 itx1 hostapd: wlan0: STA 00:1d:e0:56:7c:f7 IEEE 802.11: authenticated
Dec  4 23:42:34 itx1 hostapd: wlan0: STA 00:1d:e0:56:7c:f7 IEEE 802.11: authenticated
Die graphische Visualisierung mit graphiz und dot kannte ich noch gar nicht, tolle Sache! Habe mir Dein Beispiel mal mit inkscape angesehen, da findet man dann auch die Abhängigkeiten durch Requires und After als schwarze und grüne Pfeile wieder.

Dank Deiner umfangreichen Tips habe ich jetzt glaube ich genug an der Hand, um die beiden Dienste vielleicht doch noch systemd-konform an den Start zu kriegen. Vielen Dank, scientific!

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: AW: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von scientific » 05.12.2014 00:44:48

In der Install-Sektion bewirkt der WantedBy eintrag "nur", dass ein symlink im Verzeichnis /etc/systemd/sytem/multi-user.target.wants/ erueugt wird, sobald du

Code: Alles auswählen

systemctl enable dienst.service
ausführst.

Das wiederum bewirkt, dass der Service beim booten automatisch gestartet wird.

Freut mich, wenns klappt :-)

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Colttt
Beiträge: 3012
Registriert: 16.10.2008 23:25:34
Wohnort: Brandenburg
Kontaktdaten:

Re: systemd: Einen Dienst nach einem zweiten starten?

Beitrag von Colttt » 07.01.2015 23:36:37

Hiho, könntet ihr bitte das hier gesammelte wissen ins wiki packen?! Das wäre super.
Debian-Nutzer :D

ZABBIX Certified Specialist

Antworten