Crontab is a list of commands that allows tasks (programs, scripts) to be run automatically at regular time intervals. For example, in RUT routers it is responsible for executing such services as Automatic Reboot functions, SIM Idle Protection, Scheduled SMS and others that function in a periodic manner.
The crontab can be opened for editing, adding, removing or modifying scheduled tasks. This article will provide an explanation of the crontab functionality principle and present some usage examples in hopes that it may help you configure your own crontab rules.
Crontab syntax and editing overview
Firstly, you must decide on what environment you want to use for editing. Crontabs can be edited via a Command Line Interface (CLI). RUT routers offer a range of options in that regard. For example, you can use the CLI present in the router's WebUI (Services → CLI). Or you can log in via SSH and make edits from there. The method of logging in via SSH is different on different systems: on Linux systems you can use the Terminal app log in with the command ssh root@<routers_lan_ip_address>; on Windows systems you can use the free PuTTY client.
In all cases the log in information is the same (user name: root; password: admin password (default: admin01)). The syntax of the commands is also the same, so feel free to follow the guide step-by-step whichever method you choose.
Once you've chosen your preferred environment, we can begin the overview on the syntax and editing of crontabs.
Syntax and editing
Crontab entries are stored in the /etc/crontabs/root file. You can edit that file directly with the command vi /etc/crontabs/root, but it is more convenient to edit with crontab -e, which we'll be using for all examples in this guide. -e is an option used with the crontab command for editing. Presented below is a list all options that can be used with crontab:
Usage: crontab [-c DIR] [-u USER] [-ler]|[FILE] -c Crontab directory -u User -l List crontab -e Edit crontab -r Delete crontab FILE Replace crontab by FILE ('-': stdin)
As an example, lets try the -l option that shows the contents of the crontab file:
For the sake of example, I've added a Ping Reboot rule to the router's configuration. In the figure above you can see that creating such a rule also generates an entry (encapsulated in green) in the crontab list. Let's examine this entry:
- /sbin/ping_reboot 1 184.108.40.206 NULL 2 56 5 1 0 cfg02c21d - indicates the action that is to be taken. In this case it is the /sbin/ping_reboot command with the options 1 220.127.116.11 NULL 2 56 5 1 0 cfg02c21d
- */5 * * * * - indicates the frequency at which the action is executed. It consists out of five segments: minute, hour, day of month, month and day of week in that order. A table of examples on how to specify this frequency is presented below:
|Segment||minute||hour||day of month||month||day of week||Description|
|Examples||*/5||*||*||*||*||every 5 minutes|
|12||*/3||*||*||*||every 3 hours at 12 minutes|
|57||11||15||1,6,12||*||At 11:57 Hrs on the 15th of Jan, June & Dec.|
|25||6||*||*||5||At 6:25 AM every weekday (Mon-Fri)|
|0||0||4,12,26||*||5||At midnight on the 4th, 12th and 26th of every month plus every Friday|
|5,10||9,14||*||*||0,4||At 9:05AM, 9:10AM, 2:05PM and 2:10PM every Sunday and Thursday|
There are several nuances to discuss here:
- a number indicates the exact time at which an action should occur. For example, if the number 5 was placed in the minute section, the specified action would be taken at the fifth minute of every hour.
- an asterisk (*) stands for every possible value of the relevant time unit. For example, if placed in the hour section, it would indicate that an action should be taken every hour.
- two numbers separated by a dash(-) indicate a range of numbers. For example, if 4-7 was placed in the month section, it would indicate than the specified action should take place every fourth, fifth, sixth and seventh month of a year.
- numbers separated by commas (,) indicate multiple specific time stamps at which an action should occur. For example, if 6,9,10 was placed in the hour section, the specified action would be taken at 6:00 AM, 9:00 AM and 10 AM every day. Ranges of numbers can also be separated by commas. For instance, 5-10,20-25 placed in the minute section would indicate that an action must occur every fifth through tenth minute as well as every twentieth through twenty fifth minute.
- an asterisk and a number separated by a forward slash (/) indicate a periodicity. For example, */10 placed in the minute section would indicate that the specified action should occur every 10 minutes.
- the day of week segment functions a bit differently than the others:
- 0 indicates Sunday and 1-6 indicate Monday through Saturday.
- since weekdays shift throughout the year, i.e., they are not dependent on specific days of a month, so when they are used with crontab in conjunction, the action will be executed when the current time matches the value in either field. For instance, 5 5 5 * 5 would cause the specified command to be executed at 5:05 AM every fifth day of every month plus every Friday.
To edit crontab, use crontab -e. This is analogous to using the vi command on the /etc/crontabs/root file, so the same rules as when editing with vi apply. Type crontab -e, press "Enter" and a text editor for the crontab file will open. To start editing, press "I" on your keyboard, then you can edit the crontab file much like with a regular text editor. To save the changes that you made, press the "Escape" (Esc) button on yur keyboard, type :x and press "Enter". To cancel changes and exit the editor, press Control (Ctrl) + C on your keyboard.
This section will provide some crontab usage examples in the hopes of helping you getting the hang of the system or even finding one that you could use.
Periodic SIM switch
For this example we'll configure a rule that initiates a SIM switch every weekday at 6:45 PM. To execute a SIM card switch via CLI the command sim_switch is used, so we'll combined this with the crontab and configure the rule:
# 45 18 * * 1-5 sim_switch change
Let's overview what each segment indicates sequentially:
- 45 - the action must take place at minute 45 of the hour
- 18 - the action must take place at 6 PM
- * - all days of the month are applicable to the rule
- * - all months of the year are applicable to the rule
- 1-5 - the action must take place every Monday - Friday
- sim_switch - the command that will be executed
- change - option for the sim_switch command
To sum up, the first five segments denote the frequency of the sim_switch command. The option change specifies that the SIM card that is currently in use will be switched. So the entire entry will perform a SIM switch to the opposite SIM card every weekday at 6:45 PM.
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html - PuTTY downloads page link