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?

  • nous
    link
    fedilink
    English
    arrow-up
    5
    ·
    edit-2
    2 days ago

    Note that you can use systemctl list-timers to see all active timers including when they will next run and when they last ran. This is very useful for seeing if you have set things up correctly.

    There are multiple ways to do this as well. You can do

    OnCalendar=Sun 03:00
    Persistent=true
    

    To run every Sunday at 3am. And will run immediately when activated if the last time was skipped due to the system being off. Think that is the closest to your cron job.

    You can also

    OnCalendar=weekly
    Persistent=true
    

    If you don’t care when it will run. This is equivalent to Mon *-*-* 00:00:00.

  • HelloRoot@lemy.lol
    link
    fedilink
    English
    arrow-up
    4
    ·
    edit-2
    3 days ago

    OnCalendar is calendar-based, not interval-based.

    Use a monotonic timer with OnUnitActiveSec=7d plus Persistent=true . This is not quite the same as your cron, because it can drift the day of ghe weak.

    And no, it does not reset just because you reboot.

    • MoLoPoLY@discuss.tchncs.deOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      3 days ago

      Shifting the day of the week is totally fine, since i only care about days between the job executions. Many thx, then i try my luck with this.

  • oranki@sopuli.xyz
    link
    fedilink
    English
    arrow-up
    3
    ·
    3 days ago

    Would something like

    OnCalendar=Wed *-*-* 03:00:00
    

    Technically not the same as every 7 days, instead it’s every Wednesday.

    • MoLoPoLY@discuss.tchncs.deOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      3 days ago

      OK. I think 7 day was a slightly misleading schedule :-) My bad. But yes, you are right, for 7 days, this will work fine. But i think OnUnitActiveSec=7d is more flexible, when i change this to 12 days, 9 days and so on… I should learn to be more precise in my questions. Sorry.

  • adept
    link
    fedilink
    English
    arrow-up
    1
    ·
    3 days ago

    Check the man pages, starting with man systemd.time