systemd und fetchmail

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
wckl
Beiträge: 828
Registriert: 10.08.2007 15:26:28
Lizenz eigener Beiträge: GNU General Public License
Wohnort: St. Georges de Didonne

systemd und fetchmail

Beitrag von wckl » 10.04.2016 18:28:31

Hallo,
ich möchte anstelle von /etc/init.d/fetchmail
direkt eine fetchmail.service einrichten.

Hat jemand schon eine solche funktionierende Datei?
Wie muß ich den Start einrichten, reicht /usr/bin/fetchmail -f /etc/fetchmailrc
der Rest wird über /etc/fetchmailrc gesteuert?
Wie muß ich den Stop definieren?
Wo sollte die Datei liegen, in /lib/systemd/system oder in /etc/systemd/system ?

(Alles fragen eines blutigen Anfängers :? )
Vielen Dank für Hinweise.
wckl

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: systemd und fetchmail

Beitrag von Blackbox » 11.04.2016 01:42:29

Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: systemd und fetchmail

Beitrag von rendegast » 11.04.2016 10:32:14

Na eigentlich möchten die Maintainer von Debianfetchmail das durcharbeiten.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: systemd und fetchmail

Beitrag von catdog2 » 11.04.2016 10:47:26

Na eigentlich möchten die Maintainer von Debianfetchmail das durcharbeiten.
Die freuen sich sicher über einen patch. ;)
Unix is user-friendly; it's just picky about who its friends are.

TomL

Re: systemd und fetchmail

Beitrag von TomL » 11.04.2016 12:56:40

Moin
wckl hat geschrieben:Vielen Dank für Hinweise.
Ich kann Dein Problem sicher nicht direkt und vollständig lösen, aber ich kann dir Hilfe zur Selbsthilfe leisten. Meiner Meinung nach, solltest Du aber vorher die grundsätzlichen Gegebenheiten von systemd verstehen. Aber vorher dazu ein paar Rahmenbedingungen für meine Selbsthilfe-Lösung.
  • Ich verwende Debian Jessie
  • Du musst Dich entscheiden, ob Du sysvinit oder systemd benutzt. Ich würde da Eindeutigkeit schaffen und nur noch systemd verwenden
  • Meine Lösung berücksichtigt nicht mehr sysvinit. Ich halte sysvinit für obsolet.
  • Ich starte und verwalte auch das Netzwerk selber mit systemd, was sich für meine privaten Belange als absolut vorteilhaft erwiesen hat.
  • In Abhängigkeit des vorherigen Punktes habe ich natürlich /etc/init.d/networking aus den Runlevels removed
Also, erste Rahmenbedingung ist: Bei mir wird das Netzwerk über systemd-networkd.service gestartet. Dazu begleitend systemd-timesyncd.service und systemd-resolved.service.

Zweitens, weil ich das Netzwerk über systemd starte, kann ich auch systemd-networkd-wait-online.service verwenden und habe so Eindeutigkeit darüber, dass das Netzwerk verbunden ist, wenn meine Unit gestartet wird. Wenn Du dazu Fragen hast, mach einfach einen neuen Thread auf.

Die folgenden beiden Beispiele zeigen Dir, wie Du ein Programm zu verschiedenen Zeiten in der Bootphase durch systemd starten kannst. Hier in diesen Beispielen ist es beides mal das gleiche Programm (Bash-Script), welches zur Nachverfolgung nur ein Log anlegt... damit man sieht, was passiert ist.

nano /usr/local/bin/started-by-systemd

Code: Alles auswählen

#! /bin/bash

echo "==============================================================================" >>/usr/local/bin/started-by-systemd.log
d=`date +%d-%m-%Y-%H-%M-%S`
echo $d `basename $0`": Programm gestartet. Param:" $1 $2 >>/usr/local/bin/started-by-systemd.log

if [ "$1" == "network" ]; then
    echo $(ip addr show | grep eth0 | grep inet) >>/usr/local/bin/started-by-systemd.log
    echo "Run as: $USER" >>/usr/local/bin/started-by-systemd.log
fi

exit 0         # Job ends succesful, systemd continues dependent jobs
# exit 1       # Job failed, no dependent jobs
Nun müssen zwei service-units erstellt werden, die beide dieses Programm starten. Das erste startet es einfach ganz am Ende der Bootphase, nachdem alle Start-Jobs durch sind, unmittelbar vor dem GUI. Das zweitet startet das gleiche Programm in Abhängigkeit vom verfügaren Netzwerk.

nano /etc/systemd/system/start-at-last.service

Code: Alles auswählen

[Unit]
Description=Startet als letztes
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/started-by-systemd "After mu.target"

[Install]
WantedBy=graphical.target
nano /etc/systemd/system/start-after-network.service

Code: Alles auswählen

[Unit]
Description=Startet bei Netzwerk-Verfügbarkeit
After=systemd-networkd-wait-online.service
Requires=systemd-networkd-wait-online.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/started-by-systemd "network"
User=thomas
Group=thomas

[Install]
WantedBy=multi-user.target
Dann noch die Rechte für Script und Service-Units setzen:

Code: Alles auswählen

chmod 755 /usr/local/bin/started-by-systemd
chmod 644 /etc/systemd/system/start-at-last.service
chmod 644 /etc/systemd/system/start-after-network.service

chown root:root /usr/local/bin/started-by-systemd
chown root:root /etc/systemd/system/start-at-last.service
chown root:root /etc/systemd/system/start-after-network.service
Wenn Du diese drei Files angelegt hast, kannst Du testen, ob sie funktionieren. Öffne zwei gleichzeitig sichtbare Terminalfenster und starte im ersten:

Code: Alles auswählen

touch /usr/local/bin/started-by-systemd.log
chmod 666 /usr/local/bin/started-by-systemd.log
Dann startest Du im zweiten die permanente Anzeige dieses Logs... damit man sieht, dass was passiert:

Code: Alles auswählen

/usr/bin/tail /usr/local/bin/started-by-systemd.log -n 10 --sleep-interval=2 -f
Nun versuche (wieder) im ersten Terminalfenster nacheinander folgende Starts:

Code: Alles auswählen

/usr/local/bin/started-by-systemd
/usr/local/bin/started-by-systemd 123
/usr/local/bin/started-by-systemd test
/usr/local/bin/started-by-systemd network

systemctl start start-at-last.service
systemctl start start-after-network.service
Bei jedem Aufruf müsstest Du unmittelbar im Trace-Log-Fenster eine Reaktion sehen. Und wenn keine Fehler angezeigt werden, kannst Du jetzt die neuen Jobs einplanen:

Code: Alles auswählen

systemctl enable start-at-last.service
systemctl enable start-after-network.service
Schau Dir nun den Status beider Jobs an:

Code: Alles auswählen

systemctl status start-at-last.service
systemctl status start-after-network.service
Wenn auch jetzt keine Fehler gemeldet wurden, kannst Du den Rechner einmal rebooten und dir dann anschauen, ob alles erfolgreich abgelaufen ist.

Code: Alles auswählen

cat /usr/local/bin/started-by-systemd.log
Schau Dir erneut den Status verschiedener Jobs nach dem Reboot an:

Code: Alles auswählen

systemctl status start-at-last.service
systemctl status start-after-network.service
systemctl status systemd-networkd.service
systemctl status systemd-timesyncd.service
systemctl status systemd-networkd-wait-online.service
Schau dir weiterhin an, wie Deine neuen Jobs im Boot platziert sind. Dazu generiere eine Anschauungsgrafik... natürlich in DEIN Homedir:

Code: Alles auswählen

systemd-analyze plot >/home/thomas/boot.svg
Die Grafik öffnest Du mit einem Picture-Viewer ... einfach mal über den System-Filemanager versuchen. Ich nutze dazu gpicview.

Wenn alles funktioniert und Du die Zusammenhänge verstanden hast, planst Du diese beiden Jobs wieder aus und versuchst die neuen Erkenntnisse beim Einplanen von fetchmail zu nutzen. Aber auch da würde ich das immer zuerst vorher im Terminal manuell testen.... dort muss es funktionieren, bevor ich einen Jobs fest einplane.

Code: Alles auswählen

systemctl disable start-at-last.service
systemctl disable start-after-network.service
Fall es notwendig ist, dass einer der neuen Jobs nach dem Start "verbleibt", weil er ggf. beim Shutdown wieder etwas "ordentlich beenden" muss, muss man ggf. noch RemainAfterExit=yes berücksichtigen. Aber das würde ich erst bei Bedarf betrachten.

Im Moment weiss ich gar nicht, ob ich noch was vergessen habe.... aber eigentlich solltest Du mit diesem Rüstzeug Dein Fetchmail starten können. Lediglich ein Hinweis noch, falls Du open-ssh-server nutzt... dann wirst in dessen Unit als Abhängigkeit auch systemd-networkd-wait-online.service eintragen müssen... sonst kanns Probleme geben, weil SSH nicht "zurückkommt", wenn das Netz noch nicht steht.
Zuletzt geändert von TomL am 11.04.2016 15:57:11, insgesamt 6-mal geändert.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: systemd und fetchmail

Beitrag von rendegast » 11.04.2016 13:20:47

TomL hat geschrieben: In Abhängigkeit des vorherigen Punktes habe ich natürlich /etc/init.d/networking aus den Runlevels removed

Code: Alles auswählen

systemctl disable networking.service
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

TomL

Re: systemd und fetchmail

Beitrag von TomL » 11.04.2016 14:35:39

rendegast hat geschrieben:

Code: Alles auswählen

systemctl disable networking.service
Ist nicht wirklich einfach, fehlerfrei zu arbeiten.... :?

Ich habs nämlich so ausgeplant:

Code: Alles auswählen

update-rc.d networking remove
Das Ergebnis ist scheinbar das gleiche, aber "disable" ist wohl eindeutig der bessere Weg. :THX:

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: systemd und fetchmail

Beitrag von catdog2 » 11.04.2016 14:38:59

Vmtl läufts aufs selbe raus. Die Kommandos biegen größtenteils auf systemctl um, wenn systemd läuft.
Unix is user-friendly; it's just picky about who its friends are.

TomL

Re: systemd und fetchmail

Beitrag von TomL » 11.04.2016 15:21:23

TomL hat geschrieben:Im Moment weiss ich gar nicht, ob ich noch was vergessen habe....
Ich musste doch erst mal ne Runde spazierengehen, um drauf zu kommen, was noch alles fehlte.... es war noch ein bisschen "Nacharbeiten" notwendig... sorry.... nobody is perfect.... :hail:

Antworten