Hallo Ovion,
mittlerweile habe ich cron/anacron mit systemd timers ersetzt. Natürlich lässt sich diesbezüglich mit systemd so gut wie alles lösen. 😉
Schaut man "man systemd.directives" an, wird man regelrecht mit Parametern überschwemmt - leider alles noch (etwas) dünn dokumentiert. 🙁
Nahfolgend (m)ein Beispiel für die timergesteuerte und vor allem sequentielle Abarbeitung mehrerer Jobs.
Im Verzeichnis /etc/systemd/system folgende Dateien und Verzeichnisse anlegen:
"timer-test.target" mit folgendem Inhalt:
[Unit]
Description=Test Timer Target
StopWhenUnneeded=yes
"timer-test.timer" mit folgendem Inhalt:
[Unit]
Description=Test Timer
[Timer]
OnUnitInactiveSec=50sec
Unit=timer-test.target
[Install]
WantedBy=basic.target
Die kurze Zeitspanne von 50s habe ich für Testzwecke gewählt. Erst wenn der letzte Job abgearbeitet ist, zählt diese Zeit erneut. Es spielt also keine Rolle, wie lange die Jobs brauchen werden.
Für diese Jobs bzw units folgendes Verzeichnis anlegen:
mkdir timer-test.target.wants
Die Jobs in diesem Verzeichnis würden normalerweise alle gleichzeitig gestartet, wenn der timer event erfolgt. Mit "Before/After" lässt sich das aber leicht regulieren.
Zum Testen habe ich in diesem Verzeichnis drei service files angelegt, die nacheinander ausgeführt werden sollen:
test1.service
[Unit]
Description=Test1
Before=test2.service test3.service
[Service]
Type=oneshot
ExecStart=<something>
test2.service
[Unit]
Description=Test2
After=test1.service
Before=test3.service
...
test3.service
[Unit]
Description=Test3
After=test2.service
...
Die "[Install]" section weglassen, die units sind ja über das "timer-test.target" bereits fest zugeordnet.
Um das ganze Procedere zu aktivieren:
"systemctl <start|enable> timer-test.target"
So ungefähr arbeite ich mit meinen hourly/daily/weekly/monthly jobs. Man braucht ja nur z.B. "timer-weekly..., timer-hourly..., etc." anzulegen und muss nur darauf achten, daß die Prefixe für "*.timer, *.target *.target.wants" identisch sind.
Vielleicht hilft es ja als Ansatz etwas weiter,
Gruß, LW
P.S.:
@Ovion: Unabhängig davon sollte auch nichts dagegen sprechen, innerhalb eines service mit ExecStart einen weiteren service ("systemctl start ...") aufzurufen, also verschachtelt. Dann hättest Du ebenfalls die gewünschte Trennung in zwei units mit sequentieller Abarbeitung. Ist aber wohl eher nur ein "workaround" 😉