Ich habe mittlerweile auch meine beiden Sicherungen nach systemd überführt.
Die laufen bei z. B. zu folgenden Zeiten:
Montags, Mittwochs und Freitags erfolgt ein Backup mit BorgBackup gegen 7:00, nachdem mein Update-Script ausgeführt worden ist, es werden dabei 3 Sicherungsarchiver (igel01-system-<datetime>, igel01-home-<datetime> und igel01-server-<datetime> erstellt.
Am Sonntag um 00:00:00 Uhr mache ich eine Filesystem-Backup mit fsarchiver für die Filesysteme, die /home, /public, /srv und /VM beinhalten. Zusätzlich mache ich um 9:00 dann noch zusätzlich ein komplettes Backup mit BorgBackup (wie Mo,Mi,Fri)
Für die selbe Aufgabe, die z. B. an unterschiedlichen Tagen und vielleicht sogar dabei auch zu unterschiedlichen Uhrzeiten, ausgeführt werden soll, benötigt man bei Cron mehrere Einträge. Bei systemd reicht ein Timer-File und das dazugehörige Service-File:
[Timer]
OnCalendar=Mon,Wed,Fri *-*-* 07:00:00
OnCalendar=Sun *-*-* 09:00:00
Der OnCalender-Eintrag kann beliebig oft auftreten. Man kann hier für jeden Wochentag, Datum, Uhrzeit unterschiedliche Kombinationen erstellen. Beispiele finden sich in den Man-Pages zu systemd.timer(5).
Für meine Sicherung per BorgBackup sieht das Timer-File so aus:
[Unit]
Description=BorgBackup --timer
Wants=network-online.target
[Timer]
OnCalendar=Mon,Wed,Fri *-*-* 07:00:00
OnCalendar=Sun *-*-* 09:00:00
Persistent=true
Unit=BorgBackup.service
[Install]
WantedBy=multi-user.target
Alles anzeigen
Das dazugehörige Service-File sieht so aus:
[Unit]
Description=BorgBackup --service
#
# hier kann man den Service kommentieren.
#
Requires=NetworkManager.service NetworkManager-wait-online.service
After=network-online.target
[Service]
Type=oneshot
NotifyAccess=exec
StandardOutput=file:/var/log/BorgBackup.log
StandardError=inherit
Environment="SHELL=/bin/bash" "PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin"
User=root
Group=root
#Nice=19
#IOSchedulingClass=2
#IOSchedulingPriority=7
ExecStart=bash -lc '/usr/local/bin/BorgBackup.rex '
[Install]
WantedBy=multi-user.target
Alles anzeigen
Der Install-Block kann Einsatz eines Timers wohl auch weggelassen werden. Da ich mir hier aber nicht ganz sicher bin, ist dieser Block halt in beiden Files vorhanden.
Mit systemctl list-timers kann man kontrollieren, ob eine Timer-Aufgabe durchgeführt wurde und wann sie das nächste Mal wieder ausgeführt wird.
Das sieht dann in etwa so aus:
igel01:~ # systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Mon 2022-08-22 23:40:27 CEST 48min left Mon 2022-08-22 21:43:43 CEST 1h 8min ago dnf-makecache.timer dnf-makecache.service
Tue 2022-08-23 00:00:00 CEST 1h 7min left Mon 2022-08-22 00:00:01 CEST 22h ago logrotate.timer logrotate.service
Tue 2022-08-23 00:00:00 CEST 1h 7min left Mon 2022-08-22 00:00:01 CEST 22h ago mandb.timer mandb.service
Tue 2022-08-23 00:00:00 CEST 1h 7min left Mon 2022-08-22 00:00:01 CEST 22h ago mlocate.timer mlocate.service
Tue 2022-08-23 01:07:45 CEST 2h 15min left Mon 2022-08-22 01:46:53 CEST 21h ago backup-sysconfig.timer backup-sysconfig.service
Tue 2022-08-23 13:07:42 CEST 14h left Mon 2022-08-22 19:22:07 CEST 3h 29min ago suseconnect-keepalive.timer suseconnect-keepalive.service
Tue 2022-08-23 18:10:01 CEST 19h left Mon 2022-08-22 18:10:01 CEST 4h 42min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Wed 2022-08-24 00:00:00 CEST 1 day 1h left Mon 2022-08-22 00:00:01 CEST 22h ago Update_OS.timer Update_OS.service
Wed 2022-08-24 07:00:00 CEST 1 day 8h left Mon 2022-08-22 07:00:01 CEST 15h ago BorgBackup.timer BorgBackup.service
Sun 2022-08-28 00:00:00 CEST 5 days left Sun 2022-08-21 00:00:01 CEST 1 day 22h ago BackupFS.timer BackupFS.service
Mon 2022-08-29 00:23:22 CEST 6 days left Mon 2022-08-22 00:43:53 CEST 22h ago fstrim.timer fstrim.service
11 timers listed.
Pass --all to see loaded but inactive timers, too.
igel01:~ #
Alles anzeigen