commit cb6b2fe094bf1e73c11de2f42a52218436c8ea4b Author: Jacek Konieczny <j.koniec...@eggsoft.pl> Date: Thu Mar 9 14:47:48 2017 +0100
new package Proof of concept for the idea README | 50 ++++++++++++++++++++++++++++++ cronjob-daily.service | 5 +++ cronjob-daily.timer | 11 +++++++ cronjob-hourly.service | 5 +++ cronjob-hourly.timer | 11 +++++++ cronjob-monthly.service | 5 +++ cronjob-monthly.timer | 11 +++++++ cronjob-weekly.service | 5 +++ cronjob-weekly.timer | 11 +++++++ cronjobs.target | 8 +++++ systemd-cronjobs.spec | 81 +++++++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 203 insertions(+) --- diff --git a/systemd-cronjobs.spec b/systemd-cronjobs.spec new file mode 100644 index 0000000..5c05d46 --- /dev/null +++ b/systemd-cronjobs.spec @@ -0,0 +1,81 @@ +Summary: crond-like services for systemd +Summary(pl.UTF-8): Usługi typu crond dla systemd +Name: systemd-cronjobs +Version: 0.1 +Release: 0.1 +License: GPL v2 +Group: Base +Source0: cronjobs.target +Source1: cronjob-hourly.timer +Source2: cronjob-hourly.service +Source3: cronjob-daily.timer +Source4: cronjob-daily.service +Source5: cronjob-weekly.timer +Source6: cronjob-weekly.service +Source7: cronjob-monthly.timer +Source8: cronjob-monthly.service +Source9: README +URL: http://pld-linux.org/ +Requires: systemd-init +Provides: cronjobs +Provides: group(crontab) +Obsoletes: crondaemon +Obsoletes: cronjobs +Obsoletes: crontabs +BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) + +%description +crond-like services for systemd. + +%description -l pl.UTF-8 +Usługi typu crond dla systemd. + +%prep +%setup -q -cT + +%build + +%install +rm -rf $RPM_BUILD_ROOT +install -d $RPM_BUILD_ROOT%{systemdunitdir} \ + $RPM_BUILD_ROOT%{_sysconfdir}/cron.{hourly,daily,weekly,monthly} + +cp -p %{SOURCE0} %{SOURCE1} %{SOURCE2} %{SOURCE3} %{SOURCE4} \ + %{SOURCE5} %{SOURCE6} %{SOURCE7} %{SOURCE8} \ + $RPM_BUILD_ROOT%{systemdunitdir} + +cp -p %{SOURCE9} . + +%post +# the message displayed by systemd_post would be misleading +# onlyt cronjobs.target needs to be started manually +export SYSTEMD_LOG_LEVEL=warning SYSTEMD_LOG_TARGET=syslog +/bin/systemd_booted && /bin/systemctl --quiet daemon-reload || : +/bin/systemctl preset --preset-mode=enable-only cronjob-hourly.timer cronjob-daily.timer cronjob-weekly.timer cronjob-monthly.timer cronjobs.target +/bin/systemd_booted && echo 'Run "/bin/systemctl start cronjobs.target" to start systemd cron jobs.' || : + +%pre +%groupadd -g 117 -r -f crontab + +%preun +%systemd_preun cronjob-hourly.timer cronjob-daily.timer cronjob-weekly.timer cronjob-monthly.timer cronjobs.target + +%postun +if [ "$1" = "0" ]; then + %groupremove crontab +fi +%systemd_reload + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(644,root,root,755) +%doc README +%attr(750,root,crontab) %dir /etc/cron.daily +%attr(750,root,crontab) %dir /etc/cron.hourly +%attr(750,root,crontab) %dir /etc/cron.monthly +%attr(750,root,crontab) %dir /etc/cron.weekly +%{systemdunitdir}/cronjobs.target +%{systemdunitdir}/cronjob-*.timer +%{systemdunitdir}/cronjob-*.service diff --git a/README b/README new file mode 100644 index 0000000..ed3814b --- /dev/null +++ b/README @@ -0,0 +1,50 @@ +systemd-cronjobs - crond replacement using systemd timers +========================================================= + +The purpose of this package is to replace any crond package in PLD with much +more powerful systemd timers, while not forcing them for every PLD +installation. + +The package does not aim to be backward-compatible with existing crontabs. +This could be done with some wrapper or systemd generator, but the cron jobs +would be still designed for crond and just extra overhead would be added under +systemd. + +Guarding any crontab entry with /sbin/systemd_booted is an extra overhead for +non-systemd systems. + +The idea is that PLD packages can provide both crontabs and systemd timers, +like they provide systemd units and init.d startup scripts. When a crond is +installed, the crontabs would be used, when the new 'systemd-cronjobs' package +is installed, then the systemd timers will be used. + +systemd-cronjobs obsoletes all cron daemons, so it can be used when no crond +services are required in the system – neither by any of installed packages, +nor by users. + +Packaging cronjobs +------------------ + +A package, to be compatible both with crond and systemd-cronjobs, should +'Require: cronjobs' (instead of 'crondaemon' or 'crontabs') and provide both +a crontab and a set of two systemd units: + +cronjob-%{name}.timer +cronjob-%{name}.service + +The first one defines the schedule and should be WantedBy cronjobs.target (not +multi-user.target, so it is used only when crond is not installed). The other +defines how the service should be started each time the timer fires. + +The usual %systemd_{post,preun,reload} macros should be used in +%post/%preun/%postun for the cronjob-%{name}.timer unit. + +For packages that do not have own crontabs, but just drop a script into +/etc/cron.{hourly,daily,weekly,monthly} directory the only required change is +the 'Require: cronjobs' dependency. + +Packaging cron daemons +---------------------- + +Cron daemon packages should Provide and Obsolete 'cronjobs' in addition to +'crondaemon' and 'crontabs'. diff --git a/cronjob-daily.service b/cronjob-daily.service new file mode 100644 index 0000000..26b02f4 --- /dev/null +++ b/cronjob-daily.service @@ -0,0 +1,5 @@ +[Unit] +Description=Daily cron jobs + +[Service] +ExecStart=/bin/run-parts /etc/cron.daily diff --git a/cronjob-daily.timer b/cronjob-daily.timer new file mode 100644 index 0000000..fec4eff --- /dev/null +++ b/cronjob-daily.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Daily cron jobs + +[Timer] +OnCalendar=daily +Persistent=true + +[Install] +WantedBy=cronjobs.target + +# vi: ft=systemd diff --git a/cronjob-hourly.service b/cronjob-hourly.service new file mode 100644 index 0000000..b7dde87 --- /dev/null +++ b/cronjob-hourly.service @@ -0,0 +1,5 @@ +[Unit] +Description=Hourly cron jobs + +[Service] +ExecStart=/bin/run-parts /etc/cron.hourly diff --git a/cronjob-hourly.timer b/cronjob-hourly.timer new file mode 100644 index 0000000..57df8c4 --- /dev/null +++ b/cronjob-hourly.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Hourly cron jobs + +[Timer] +OnCalendar=hourly +Persistent=true + +[Install] +WantedBy=cronjobs.target + +# vi: ft=systemd diff --git a/cronjob-monthly.service b/cronjob-monthly.service new file mode 100644 index 0000000..9069e48 --- /dev/null +++ b/cronjob-monthly.service @@ -0,0 +1,5 @@ +[Unit] +Description=Monthly cron jobs + +[Service] +ExecStart=/bin/run-parts /etc/cron.monthly diff --git a/cronjob-monthly.timer b/cronjob-monthly.timer new file mode 100644 index 0000000..ad884ca --- /dev/null +++ b/cronjob-monthly.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Monthly cron jobs + +[Timer] +OnCalendar=monthly +Persistent=true + +[Install] +WantedBy=cronjobs.target + +# vi: ft=systemd diff --git a/cronjob-weekly.service b/cronjob-weekly.service new file mode 100644 index 0000000..7cec461 --- /dev/null +++ b/cronjob-weekly.service @@ -0,0 +1,5 @@ +[Unit] +Description=Weekly cron jobs + +[Service] +ExecStart=/bin/run-parts /etc/cron.weekly diff --git a/cronjob-weekly.timer b/cronjob-weekly.timer new file mode 100644 index 0000000..bd1588a --- /dev/null +++ b/cronjob-weekly.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Weekly cron jobs + +[Timer] +OnCalendar=weekly +Persistent=true + +[Install] +WantedBy=cronjobs.target + +# vi: ft=systemd diff --git a/cronjobs.target b/cronjobs.target new file mode 100644 index 0000000..e7486cb --- /dev/null +++ b/cronjobs.target @@ -0,0 +1,8 @@ +[Unit] +Description=System cron jobs +Before=multi-user.target + +[Install] +WantedBy=multi-user.target + +# vi: ft=systemd ================================================================ ---- gitweb: http://git.pld-linux.org/gitweb.cgi/packages/systemd-cronjobs.git/commitdiff/cb6b2fe094bf1e73c11de2f42a52218436c8ea4b _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit