Line 85: | Line 85: | ||
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 | 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. | ||
{{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.}} |
Revision as of 20:58, 19 March 2013
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.
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.
Logrotate file
If a package contains a logfile then it needs to also include a properly installed logrotate file.
Each logrotate file must end with the filename .conf. It must be placed /etc/logrotate.d/ and must have 0644 filepermission and be owned by root.
Here are examples of an logrotate file.
Example minimal logrotate file
/var/log/example/*log { missingok # If the log file is missing, go on to the next one without issuing an error message notifempty # Don't do any rotation if the logfile is empty compress # Compress older files with gzip delaycompress # Don't compress yesterdays files }
Example minimal logrotate log file with user create mode
/var/log/example/*log { missingok # If the log file is missing, go on to the next one without issuing an error message notifempty # Don't do any rotation if the logfile is empty compress # Compress older files with gzip delaycompress # Don't compress yesterdays files create 640 owner group # Set create mode immediately after rotation }
Example minimal logrotate file with daemon restart
/var/log/example/*log { missingok # If the log file is missing, go on to the next one without issuing an error message notifempty # Don't do any rotation if the logfile is empty compress # Compress older files with gzip delaycompress # Don't compress yesterdays files sharedscripts # Scripts are only run once for all files in directory postrotate /usr/bin/systemctl restart example.service 2>/dev/null || true endscript }
Example minimal logrotate file with user create mode and daemon restart
/var/log/example/*log { missingok # If the log file is missing, go on to the next one without issuing an error message notifempty # Don't do any rotation if the logfile is empty compress # Compress older files with gzip delaycompress # Don't compress yesterdays files create 640 owner group # Set create mode immediately after rotation sharedscripts # Scripts are only run once for all files in directory postrotate /usr/bin/systemctl restart example.service 2>/dev/null || true endscript }
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.
Log Files Packaging
If an package is going to provide additional optional syslog support then they must be placed into a separate $name-<syslogging option> subpackage as in $name-rsyslog or $name-syslog-ng
Example of rsyslog subpackage
Name: ..... Source1: %{name}.logrotate %package example-rsyslog Summary: Rsyslog support for %{name} Group: System Environment/Base Requires: %{name} = %{version}-%{release} Requires: logrotate Requires: rsyslog %description example-rsyslog Rsyslog support for %{name} %install mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/%{name} mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d %{__install} -p -D -m 0700 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/%{name}.conf %files example-rsyslog %config(noreplace) %{_sysconfdir}/logrotate.d/%{name}.conf %dir %attr(0700,root,root) %{_localstatedir}/log/%{name}
Example of rsyslog subpackage with additional rsyslog file
Name: ..... Source1: %{name}.logrotate Source2: %{name}.rsyslog %package example-rsyslog Summary: Rsyslog support for %{name} Group: System Environment/Base Requires: %{name} = %{version}-%{release} Requires: logrotate Requires: rsyslog %description example-rsyslog Rsyslog support for %{name} %install mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/%{name} mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/rsyslog.d %{__install} -p -D -m 0700 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/%{name}.conf %{__install} -p -D -m 0700 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/rsyslog.d/%{name}.conf %files example-rsyslog %config(noreplace) %{_sysconfdir}/logrotate.d/%{name}.conf %config(noreplace) %{_sysconfdir}/rsyslog.d/%{name}.conf %dir %attr(0700,root,root) %{_localstatedir}/log/%{name}
Example of syslog-ng subpackage
Name: ..... Source1: %{name}.logrotate %package example-syslog-ng Summary: Syslog-ng support for %{name} Group: System Environment/Base Requires: %{name} = %{version}-%{release} Requires: logrotate Requires: syslog-ng %description example-syslog-ng Syslog-ng support for %{name} %install mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/%{name} mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d %{__install} -p -D -m 0700 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/%{name}.conf %files example-syslog-ng %config(noreplace) %{_sysconfdir}/logrotate.d/%{name}.conf %dir %attr(0700,root,root) %{_localstatedir}/log/%{name}