I think if you know cron from the start it can be easier, but it gets really annoying really fast. Compare: 0 0 * * * /usr/bin/flock -n /tmp/myjob.lock bash -c 'sleep $((RANDOM % 3600)) && /usr/local/bin/myjob.sh' To: [Timer] OnCalendar=daily RandomizedDelaySec=1h That and things like systemd preventing overlapped delays, handing what to do if the system was down during the last cycle, built in logging and event tracking. Seeing successful vs non successful runs etc. Once you add in those production corner cases cron gets annoying fast and timers are easy.