[packages/systemd-cronjobs] new package
jajcus
jajcus at pld-linux.org
Thu Mar 9 14:48:40 CET 2017
commit cb6b2fe094bf1e73c11de2f42a52218436c8ea4b
Author: Jacek Konieczny <j.konieczny at 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
More information about the pld-cvs-commit
mailing list