Fedora Cron Job Files
This document describes the guidelines for packaging cron job file(s), in Fedora.
For the purposes of these guidelines, a cron job file is defined as an script (e.g., shell scripts or Perl scripts).
If your package requires regularly scheduled tasks to operate properly and does not ship systemd unit file, you can use those files to set that up.
Cron Job Files on the filesystem
Packages with cron job files must be placed respectfully into one or more of the following directories /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly depending on the intended interval they should run.
If a certain cron job has to be executed at some frequency or at a specific time interval other then the above, that cron job file should be placed in /etc/cron.d directory followed by an crontab entry at the required interval in the /etc/crontab file.
All files installed in any of these directories must be scripts and must be treated as configuration files so that they can easily be modified by the local system administrator.
Cron Job file
An typical cron job file is just an script like
#!/bin/sh # My cron job script # set -x echo "This is my simple cron job script" exit 0
Example of cron job definition run at ever other hour specified in /etc/crontab
# .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 0 */2 * * * root /etc/cron.d/example
Cron job file names
The file name of a cron job file should match the name of the package from which it comes.
If a package supplies multiple cron job files files in the same directory, the file names should all start with the name of the package by a hyphen (-) and a suitable suffix.
Cron Job Files Packaging
If an package is going to provide cron job file(s) then it must be placed into a separate $name-cron subpackage.
The file name of a cron job file should match the name of the package from which it comes.
A package containing a cron job must depend on the crontabs
package. Since crontabs
requires /etc/cron.d
and all cron daemon packages create (and own) that directory, crontabs
serves as a virtual provide for cron daemon functionality.
Example of cron job subpackage
Name: ..... Source1: %{name}.cron %package example-cron Summary: Cron job file for %{name} Group: System Environment/Base Requires: %{name} = %{version}-%{release} Requires: crontabs %description example-cron Cron job file for %{name} %install mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/cron.daily %{__install} -p -D -m 0750 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/cron.daily/%{name} %files example-cron %config(noreplace) %{_sysconfdir}/cron.daily/%{name}