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.