Difference between revisions of "Cron"

From UFRC
Jump to navigation Jump to search
 
(14 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
[[Category:Linux]]
 
[[Category:Linux]]
==Overview==
+
{|align=right
 +
  |__TOC__
 +
  |}
 
Cron is a Unix-based program that enables you to schedule recurrent jobs. Here, we provide you a simple overview of how to get started using Cron on the daemon server. For a more in-depth explanation of Cron, please visit one of the pages in the [[#Resources|resources]] section.
 
Cron is a Unix-based program that enables you to schedule recurrent jobs. Here, we provide you a simple overview of how to get started using Cron on the daemon server. For a more in-depth explanation of Cron, please visit one of the pages in the [[#Resources|resources]] section.
  
 
==Configuration and backup==
 
==Configuration and backup==
To schedule a task to run regularly with cron, you will need to edit the cron table or ''crontab''. Please note that configuration is server-specific so you must be logged in to the server on which tasks will run.
+
To schedule a task to run regularly with cron, you will need to edit the cron table or ''crontab''. Please note that '''configuration is server-specific so you must be logged in to the server on which tasks will run'''.
  
All users wishing to make use of cron at Research Computing are highly encouraged to configure cron on the server <code>daemon</code>. While we backup cron on daemon1.rc.ufl.edu, at this point, users are responsible for maintaining a backup of their cron configurations.
+
{{Note|All users wishing to make use of cron at Research Computing are highly encouraged to configure cron on the server [[Daemons|<code>daemon</code>]]. cron jobs '''should not be run on login servers''' and will be deleted.|info}}
 +
 
 +
While we backup cron on the <code>daemon</code> server, at this point, users are responsible for maintaining a backup of their cron configurations.
 +
 
 +
{{Note|Cron environment does not inherit your shell environment. So, unless you use absolute paths to all executables (binaries, scripts) you will have to set environment variables like  PATH. If you need to use environment modules you will have to run the following command in the script you run before you can use 'module load':<br>
 +
source /etc/profile.d/modules.sh
 +
|warn}}
  
 
===Editing crontab file===
 
===Editing crontab file===
 
The default crontab editor is vi. For ease of use, we recommend using a different text editor such as nano. You can change editors with the EDITOR or VISUAL command. For example:
 
The default crontab editor is vi. For ease of use, we recommend using a different text editor such as nano. You can change editors with the EDITOR or VISUAL command. For example:
 
+
{|cellpadding="10"
 +
|-
 +
|
 
<pre>export EDITOR=nano</pre>
 
<pre>export EDITOR=nano</pre>
 +
||
 
or
 
or
 +
||
 
<pre>export VISUAL=nano</pre>
 
<pre>export VISUAL=nano</pre>
 +
|}
  
 
Once your preferred editor is set, create a new or open an existing crontab file by typing the following command:
 
Once your preferred editor is set, create a new or open an existing crontab file by typing the following command:
Line 22: Line 35:
 
<pre>MAILTO=$USER@ufl.edu</pre>
 
<pre>MAILTO=$USER@ufl.edu</pre>
 
where $USER@ufl.edu is substituted with your email address.
 
where $USER@ufl.edu is substituted with your email address.
 +
 +
===Environment Modules===
 +
If you plan to load any environment modules in a script run through cron make sure to first initialize the environment modules in the cron environment. By default the cron environment has nothing in it, so the following line is necessary before your load any modules.
 +
 +
source /etc/profile.d/modules.sh
  
 
===Crontab fields===
 
===Crontab fields===
Line 53: Line 71:
  
 
===Some simple examples===
 
===Some simple examples===
 +
{|cellpadding="10"
 +
|-style="vertical-align:top;"
 +
|
 
Runs every minute:
 
Runs every minute:
 
<pre>* * * * * my.process.sh</pre>
 
<pre>* * * * * my.process.sh</pre>
Line 58: Line 79:
 
Runs at 30 past the hour:
 
Runs at 30 past the hour:
 
<pre>30 * * * * my.process.sh</pre>
 
<pre>30 * * * * my.process.sh</pre>
 
+
||
 
Runs at 3:15 a.m. every day:
 
Runs at 3:15 a.m. every day:
 
<pre>15 3 * * * my.process.sh</pre>
 
<pre>15 3 * * * my.process.sh</pre>
Line 64: Line 85:
 
Runs at 3:15 p.m. every day:
 
Runs at 3:15 p.m. every day:
 
<pre>15 15 * * * my.process.sh</pre>
 
<pre>15 15 * * * my.process.sh</pre>
 
+
||
 
Runs at 3:15 a.m. every Monday:
 
Runs at 3:15 a.m. every Monday:
 
<pre>15 3 * * 1 my.process.sh</pre>
 
<pre>15 3 * * 1 my.process.sh</pre>
Line 70: Line 91:
 
Runs at 3:15 a.m. on the first of every month:
 
Runs at 3:15 a.m. on the first of every month:
 
<pre>15 3 1 * * my.process.sh</pre>
 
<pre>15 3 1 * * my.process.sh</pre>
 +
|}
  
 
==Resources==
 
==Resources==

Latest revision as of 19:04, 27 February 2023

Cron is a Unix-based program that enables you to schedule recurrent jobs. Here, we provide you a simple overview of how to get started using Cron on the daemon server. For a more in-depth explanation of Cron, please visit one of the pages in the resources section.

Configuration and backup

To schedule a task to run regularly with cron, you will need to edit the cron table or crontab. Please note that configuration is server-specific so you must be logged in to the server on which tasks will run.

All users wishing to make use of cron at Research Computing are highly encouraged to configure cron on the server daemon. cron jobs should not be run on login servers and will be deleted.

While we backup cron on the daemon server, at this point, users are responsible for maintaining a backup of their cron configurations.

Cron environment does not inherit your shell environment. So, unless you use absolute paths to all executables (binaries, scripts) you will have to set environment variables like PATH. If you need to use environment modules you will have to run the following command in the script you run before you can use 'module load':
source /etc/profile.d/modules.sh

Editing crontab file

The default crontab editor is vi. For ease of use, we recommend using a different text editor such as nano. You can change editors with the EDITOR or VISUAL command. For example:

export EDITOR=nano

or

export VISUAL=nano

Once your preferred editor is set, create a new or open an existing crontab file by typing the following command:

crontab -e

Email notifications

To receive an email with the output of each command you run, you should add the MAILTO variable at the beginning of your file:

MAILTO=$USER@ufl.edu

where $USER@ufl.edu is substituted with your email address.

Environment Modules

If you plan to load any environment modules in a script run through cron make sure to first initialize the environment modules in the cron environment. By default the cron environment has nothing in it, so the following line is necessary before your load any modules.

source /etc/profile.d/modules.sh

Crontab fields

Next, in the same file, type one or more lines with instructions for cron. Each line has six fields. If you do not wish to specify a value for a field, place an asterisk (*) there. The crontab fields are listed in the table below.

Crontab fields
minute hour day of month month day of week command to be executed
0-59 0-23 1-31 1-12
(1 = January)
0-6
(0 = Sunday)
must be an absolute path where $USER is your UFRC username and my.process.sh is the command you wish to run
* * * * * /home/$USER/bin/my.process.sh

Some simple examples

Runs every minute:

* * * * * my.process.sh

Runs at 30 past the hour:

30 * * * * my.process.sh

Runs at 3:15 a.m. every day:

15 3 * * * my.process.sh

Runs at 3:15 p.m. every day:

15 15 * * * my.process.sh

Runs at 3:15 a.m. every Monday:

15 3 * * 1 my.process.sh

Runs at 3:15 a.m. on the first of every month:

15 3 1 * * my.process.sh

Resources

If you want to learn more about Cron and create more complex crontab files, we recommend the following resources: