RFC: systemd-timers to obsolete crond

Jacek Konieczny jajcus at jajcus.net
Tue Feb 14 14:10:41 CET 2017


On 2017-02-14 13:32, Jacek Konieczny wrote:
> I am not happy with crond running under systemd. The same could be done
> with systemd timers, but we should keep compatibility with old systems.

I guess, I sent the mail too early, as now I have a bit better idea how
it could look like.

A new package: systemd-cronjobs
(pseudo-spec)

Provides: cronjobs
Obsoletes: crondaemon

%post:
systemctl enable cronjobs.target

%postun
systemctl disable cronjobs.target

%files:
/lib/systemd/system/cronjobs.target
/lib/systemd/system/cronjob-hourly.timer
/lib/systemd/system/cronjob-hourly.service
/lib/systemd/system/cronjob-daily.timer
/lib/systemd/system/cronjob-daily.service
/lib/systemd/system/cronjob-weekly.timer
/lib/systemd/system/cronjob-weekly.service
/lib/systemd/system/cronjob-monthly.timer
/lib/systemd/system/cronjob-monthly.service

-----------------

Updated: systemd-units:
%files
+/etc/systemd/system/cronjobs.target.wants

------------------

Updated: cronie  (and other crondaemons)
+Provides: cronjobs
  Provides: crondaemon
  Obsoletes: systemd-cronjobs

-------------------

Updated: logrotate (and other packages providing their crontabs)
-Requires: crondaemon
+Requires: cronjobs

  %post
+%systemd_reload

  %files
  /etc/cron.d/logrotate
+/lib/systemd/system/cronjob-logrotate.timer
+/lib/systemd/system/cronjob-logrotate.service


The systemd unit dependencies would be:
cronjobs.target WantedBy multi-user.target
cronjob-*.timer WantedBy cronjobs.target

How it would work:

When systemd-cronjobs is not installed – exactly as it works now.
Scheduled task are run by crond.

Installing systemd-cronjobs would uninstall any crond, but would be
possible only if there is no package left which would Require:
crondaemon (meaning: no cronjob-*.timer yet).

When systemd-cronjobs is installed scheduled tasks would be run from
systemd instead of crond.

Why it is better:
– no crond service running – one process less
– no unnecessary shell processes when a single executable is to be run
– no login session created (lots of PAM and systemd logs) when not necessary

What I am not sure yet:
– is 'Provides: cronjobs' and 'Name: systemd-cronjobs' any good?
– do we still need to care about crond, or should we just migrate
   everything to systemd timers?

Jacek


More information about the pld-devel-en mailing list