From Fedora Project Wiki

(Created page with "== 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 define...")
 
(Deprecate page.)
 
(17 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{OldGuidelinePage|CronFiles}}
== Fedora Cron Job Files ==
== Fedora Cron Job Files ==


This document describes the guidelines for packaging cron job file(s), in Fedora.
This document describes the guidelines for packaging cron job files 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.
For the purposes of these guidelines, a cron job file is defined as a script (e.g., a shell script or a Perl script). These cron job files are scheduled to run on regular intervals by a cron daemon.


== Cron Job Files on the filesystem ==
== 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.
Packages with cron job files must place those cron job files 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.
There is an exception to this rule:
If a certain cron job has to be executed at some frequency or at a specific time interval other than the above, then a custom crontab file should be added to /etc/cron.d (with 0640 permissions). In this case, the cron job file (the script) must be placed in an appropriate system location (e.g. %{_sbindir}, %{_libexecdir}), and NOT in /etc/cron.d.


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.
Both cron job files and crontab definition files installed in any of these directories must be treated as configuration files so that they can easily be modified by the local system administrator.


== Cron Job file ==
== Cron Job file ==
Line 29: Line 30:
</pre>
</pre>


Example of cron job definition run at ever other hour specified in /etc/crontab
Example of crontab definition run at ever other hour specified in /etc/cron.d/example


<pre>
<pre>
Line 40: Line 41:
# *  *  *  *  * user-name  command to be executed
# *  *  *  *  * user-name  command to be executed


0 */2 * * * root /etc/cron.d/example
0 */2 * * * root /usr/sbin/example


</pre>
</pre>
Line 48: Line 49:
The file name of a cron job file should match the name of the package from which it comes.
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.
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 followed by a hyphen (-) and a suitable suffix.


{{admon/tip|A cron job file name cannot include any period or plus characters as this will cause cron to ignore the file. Underscores should be used instead.}}
{{admon/tip|A cron job file name cannot include any period or plus characters as this will cause cron to ignore the file. Underscores should be used instead.}}
Line 54: Line 55:
== Cron Job Files Packaging ==
== Cron Job Files Packaging ==


Cron job file(s) in packages must be marked as %config(noreplace), and their filename(s) should match the name of the package. Additionally, packages with cron job files must have an explicit Requires: crontab.
Cron job file(s) in packages must be marked as %config(noreplace), and their filename(s) should match the name of the package.
 
Helper files used by cron job files should be placed in appropriate system locations (e.g. %{_bindir} or %{_libexecdir}) and do not need to be marked as %config.


Packages with cron job files must have an explicit <code>Requires: crontabs</code>.  Since <code>crontabs</code> requires <code>/etc/cron.d</code> and all cron daemon packages create (and own) that directory, <code>crontabs</code> serves as a virtual requires for cron daemon functionality.


=== Example of cron job packaging ===
=== Example of cron job packaging ===
Line 63: Line 67:
.....
.....
Source1: %{name}.cron
Source1: %{name}.cron
Requires: crontab
Requires: crontabs


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


%files
%files
%config(noreplace) %{_sysconfdir}/cron.daily/%{name}
%config(noreplace) %{_sysconfdir}/cron.monthly/%{name}
</pre>
</pre>
[[Category:Packaging guidelines]]

Latest revision as of 03:40, 20 December 2018

Warning.png
This is an old copy of a packaging guideline, preserved here in the wiki while we complete the transition to the Fedora documentation system. The current version is located at https://docs.fedoraproject.org/en-US/packaging-guidelines/CronFiles/. Please update your bookmarks.

Fedora Cron Job Files

This document describes the guidelines for packaging cron job files in Fedora.

For the purposes of these guidelines, a cron job file is defined as a script (e.g., a shell script or a Perl script). These cron job files are scheduled to run on regular intervals by a cron daemon.

Cron Job Files on the filesystem

Packages with cron job files must place those cron job files 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.

There is an exception to this rule: If a certain cron job has to be executed at some frequency or at a specific time interval other than the above, then a custom crontab file should be added to /etc/cron.d (with 0640 permissions). In this case, the cron job file (the script) must be placed in an appropriate system location (e.g. %{_sbindir}, %{_libexecdir}), and NOT in /etc/cron.d.

Both cron job files and crontab definition files installed in any of these directories 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 crontab definition run at ever other hour specified in /etc/cron.d/example

# .---------------- 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 /usr/sbin/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 followed by a hyphen (-) and a suitable suffix.

Idea.png
A cron job file name cannot include any period or plus characters as this will cause cron to ignore the file. Underscores should be used instead.

Cron Job Files Packaging

Cron job file(s) in packages must be marked as %config(noreplace), and their filename(s) should match the name of the package.

Helper files used by cron job files should be placed in appropriate system locations (e.g. %{_bindir} or %{_libexecdir}) and do not need to be marked as %config.

Packages with cron job files must have an explicit Requires: crontabs. Since crontabs requires /etc/cron.d and all cron daemon packages create (and own) that directory, crontabs serves as a virtual requires for cron daemon functionality.

Example of cron job packaging

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}