Cron-Job-Dateien in Fedora

Dieses Dokument beschreibt die Richtlinien für das Paketieren von Cron-Job-Dateien in Fedora.

Im Sinne dieser Richtlinien wird eine Cron-Job-Datei als Skript (z. B. ein Shell-Skript oder ein Perl-Skript) definiert. Diese Cron-Job-Dateien werden so geplant, dass sie in regelmäßigen Abständen von einem Cron-Daemon ausgeführt werden.

Cron-Job-Dateien im Dateisystem

Pakete mit Cron-Job-Dateien müssen diese je nach gewünschtem Ausführungsintervall in einem oder mehreren der folgenden Verzeichnisse ablegen: /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly.

Eine Ausnahme von dieser Regel besteht: Soll ein bestimmter Cron-Job in einer anderen Häufigkeit oder zu einem anderen Zeitintervall als oben angegeben ausgeführt werden, muss eine benutzerdefinierte Crontab-Datei (mit den Berechtigungen 0640) in /etc/cron.d erstellt werden. In diesem Fall muss die Cron-Job-Datei (das Skript) an einem geeigneten Systemort (z.B. %{_bindir}, %{_libexecdir}) und NICHT in /etc/cron.d abgelegt werden.

Sowohl Cron-Job-Dateien als auch Crontab-Definitionsdateien, die in einem dieser Verzeichnisse installiert sind, müssen als Konfigurationsdateien behandelt werden, damit sie vom lokalen Systemadministrator leicht geändert werden können.

Cron-Job-Datei

Eine typische Cron-Job-Datei ist ein Skript wie das Folgende:

#!/bin/sh
# Mein Cron-Job-Skript
# set -x

echo "Dies ist mein einfaches Cron-Job-Skript"

exit 0

Beispiel einer Crontab-Definition, die alle zwei Stunden ausgeführt wird, wie in /etc/cron.d/example angegeben

# .---------------- Minute (0 - 59)
# |  .------------- Stunde (0 - 23)
# |  |  .---------- Tag des Monats (1 - 31)
# |  |  |  .------- Monat (1 - 12) ODER jan,feb,mar,apr ...
# |  |  |  |  .---- Wochentag (0 - 6) (Sonntag=0 oder 7) ODER sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * Benutzername auszuführender-Befehl

0 */2 * * * root /usr/bin/example

Dateinamen für Cron-Jobs

Der Dateiname einer Cron-Job-Datei sollte mit dem Namen des Pakets übereinstimmen, aus dem sie stammt.

Wenn ein Paket mehrere Cron-Job-Dateien im selben Verzeichnis bereitstellt, sollten die Dateinamen alle mit dem Namen des Pakets beginnen, gefolgt von einem Bindestrich (-) und einem passenden Suffix.

Paketierung von Cron-Job-Dateien

Die Cron-Job-Dateien in den Paketen müssen als %config(noreplace) gekennzeichnet sein, und ihre Dateinamen sollten mit dem Namen des Pakets übereinstimmen.

Hilfsdateien, die von Cron-Jobdateien verwendet werden, sollten an geeigneten Systemorten (z. B. %{_bindir} oder %{_libexecdir}) abgelegt werden und müssen nicht als %config gekennzeichnet werden.

Pakete mit Cronjob-Dateien müssen explizit Requires: crontabs enthalten. Da crontabs das Verzeichnis /etc/cron.d benötigt und alle Cron-Daemon-Pakete dieses Verzeichnis erstellen (und besitzen), dient crontabs als virtuelle Abhängigkeit für die Cron-Daemon-Funktionalität.

Beispiel für die Paketierung von Cron-Jobs

Name:
...
Source1: %{name}.cron
Requires: crontabs

...

%install
...
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/cron.monthly
%{__install} -p -D -m 0750 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/cron.monthly/%{name}

%files
%config(noreplace) %{_sysconfdir}/cron.monthly/%{name}