I am trying to create some systemd units that are supposed to start scripts at certain intervals. With Cron, I used an expression like 0 3 */7 * * to start a job every 7 days at 3 a.m. That worked great. With OnCalendar, I have no idea how to implement “every 7 days”. Or can I use OnUnitActiveSec here? Additional problem: The computer is not always on at the specified time. The job should therefore be repeated as soon as the computer is available again. I have set Persistent=true for this purpose. However, I suspect that OnUnitActiveSec is reset every time I restart the computer. Or does OnUnitActiveSec refer to the time when the unit was activated with systemctl enabled test.timer?


Sorry, i have to ask again. I actually thought I had solved the problem. However, today I discovered that the jobs are overdue and have not been started for several days. When I display the timers with
systemctl --user list-timers, I see that the NEXT column is empty::NEXT LEFT LAST PASSED UNIT ACTIVATES - - Sun 2026-02-01 20:01:48 CET - backup.timer backup.serviceSince there is no NEXT date, the timer/service will probably not be restarted. The timer unit looks like this:
[Unit] Description="Backup to remote" [Timer] OnUnitActiveSec=3d Persistent=true [Install] WantedBy=default.targetAs you can see, I am well over the 3 days. When I call
systemctl --user status backup.timer, I get:● backup.timer - "Backup to remote" Loaded: loaded (/home/username/.config/systemd/user/backup.timer; enabled; preset: enabled) Drop-In: /home/username/.config/systemd/user/backup.timer.d Active: active (elapsed) since Fri 2026-02-13 16:53:31 CET; 7min ago Invocation: 95ae3860c50a454b98078fc2ce3eb3c5 Trigger: n/a Triggers: ● backup.serviceTo me, this looks perfectly “normal.” The only thing that puzzles me is the Active line. Why is the current date (Fri 2026-02-13 16:53:31 CET) set there and not the date on which the job last ran (Sun 2026-02-01 20:01:48 CET)? The NEXT column fills up again when I start
systemctl --user restart backup.service. The job is then executed immediately and the column is filled. However, after rebooting the laptop, the column is empty again and the job is no longer started at the given intervals.