Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: rsync job via systemd bij afsluiten  (gelezen 453 keer)

rsync job via systemd bij afsluiten
« Gepost op: 2020/01/21, 16:21:15 »
Sinds een maand of zo heb ik Ubuntu Mate 18.04.3 op mijn PC geïnstalleerd, omdat ik verlost wil zijn van Windows. Tot nu toe gaat dan redelijk goed, maar kom toch nog wel eens een probleem tegen, zoals deze.

Ik probeer een rsync job m.b.v. systemd te draaien bij afsluiten maar niet bij reboot.
Op internet heb ik al de nodige voorbeelden gevonden  voor de opzet van een service unit.
Dit werkt tot op zekere hoogte.
[Unit]
Description=Run rsync jobs
Requires=network.target
RequiresMountsFor=/home /media/Backup
DefaultDependencies=no
Before=poweroff.target halt.target shutdown.target

[Service]
Type=oneshot
TimeOutSec=infinity
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/willem/Programs/rsync-jobs

[Install]
WantedBy=multi-user.target

Probleem is dat dit ook werkt bij een reboot.
Dat heb ik afgevangen door een check in het rsync script:
if ! systemctl list-jobs | grep -q -e "reboot.target.*start"; then
rsync  etcetera
fi

Maar dan doet het volgende probleem zich voor. Als de sync job langer duurt dan 90 seconden dan wordt die afgebroken door het systeem en in de laatste regel in de log van rsync is:
2020/01/17 22:22:39 [6227] rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(644) [sender=3.1.2]

Uiteindelijk heb ik maar een starter op het bureaublad gemaakt, waarmee ik een script kan starten die na de rsync de PC uitschakelt.

Het werkt, maar is niet de meest elegante oplossing.
Vooral omdat ik uit alles wat ik lees over systemd het ook daarmee zou moeten kunnen, wat ik wil.
Overigens lees ik ook dat er bugs in systemd zitten, waardoor onderscheid tussen afsluiten en reboot niet altijd goed worden afgehandeld.

De vraag is dus: wat moet ik veranderen in de service unit om het te laten werken, zoals ik wil.


Offline vanadium

  • Lid
Re: rsync job via systemd bij afsluiten
« Reactie #1 Gepost op: 2020/01/21, 16:46:26 »
Dat is al vrij gevorderd stuff voor een nieuwe linux gebruiker :)

Het probleem van het afbreken kan je waarschijnlijk oplossen door een aanpassing in /etc/systemd/system.conf. Standaard worden processen die langer dan 90 seconden duren tijdens het afsluiten "gekilled". Het komt er dan op aan op de lijn
#DefaultTimeoutStopSec=90s
het commentaarteken weg te nemen en het aantal seconden daar  te verlengen. Kan je ook opgeven in een vorm als "5min 20s". Je kan "infinity" aangeven om geen timeouts toe te passen (zie "man systemd.service"). Dan loop je wel de kans dat een vastgelopen proces helemaal belet dat de computer uit gaat.
« Laatst bewerkt op: 2020/01/21, 16:50:10 door vanadium »

Re: rsync job via systemd bij afsluiten
« Reactie #2 Gepost op: 2020/01/21, 21:21:17 »
Dat is al vrij gevorderd stuff voor een nieuwe linux gebruiker :)
Ik ben al sinds het MS-DOS tijdperk met computers bezig, kijk graag 'onder de motorkap' en ik schrijf zelf programma's (op hobbyniveau).
Linux is ook niet echt nieuw voor mij, want ik heb al een aantal jaren een zelfbouw NAS met Openmediavault-Debian. Ook al is er een GUI, toch moet je wel eens achter de schermen kijken.

Mijn probleem is inderdaad opgelost door system.conf aan te passen. Daardoor ben ik nog eens verder gaan kijken en het lijkt mij dat het ook moet zijn te regelen in de unit zelf. Maar alleen TimeoutStopSec=infinity opnemen is niet voldoende. Het ziet er naar uit dat ik ook iets moet doen met signals en killmode.

Voorlopig ben ik echter gered. Bedankt hiervoor.

Als deze oplossing tot ongewenste bijverschijnselen gaat leiden, dan zal ik eens verder moeten zoeken.