Jump to content

Crontabs: Difference between revisions

500 bytes added ,  21 May 2018
no edit summary
No edit summary
No edit summary
Line 102: Line 102:


There are several nuances to discuss here:
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.
* 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 specified 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.
* 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 on specified days.
* 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.
* 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 months 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.
* numbers separated by '''commas''' (''',''') indicate multiple specific time stamps at which an action should occur. For example, if the numbers '''6,9,10''' were 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 of every specified hour.
* 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.
* 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:
* the '''day of week''' segment functions a bit differently than the others:
Line 111: Line 111:
** since weekdays shift throughout the year, i.e., they are not dependent on specific days of a month, when they are used in conjunction with crontab, 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.
** since weekdays shift throughout the year, i.e., they are not dependent on specific days of a month, when they are used in conjunction with crontab, 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 with the ''/etc/crontabs/root'' file, so the same rules  apply here as when editing with ''vi''. Type ''crontab -e'', press "Enter" and a text editor for the crontab file will open. To start editing, press the "I" key on your keyboard; you can then edit the crontab file much like with a regular text editor (except you can't use your mouse pointer to place the text cursor anywhere you want; use the arrow keys on your keyboard instead). To save changes after editing, press the "Escape" ("Esc") button on your keyboard, type ''':x''' and press "Enter". To cancel changes and exit the editor, press "'''Control'''" ('''Ctrl''') '''+''' "'''C'''" on your keyboard.
To edit crontab, use '''crontab -e'''. This is analogous to using the '''vi''' command on the ''/etc/crontabs/root'' file, so the same rules  apply here as when editing with ''vi''. Type ''crontab -e'', press "Enter" and a text editor for the crontab file will open. To start editing, press the "I" key on your keyboard; you can then edit the crontab file much like with a regular text editor (except you can't use your mouse pointer to place the text cursor anywhere you want; use the arrow keys on your keyboard instead). To save changes after editing, press the "'''Escape'''" ("'''Esc'''") button on your keyboard, type ''':x''' and press "Enter". To cancel the changes and exit the editor, press "'''Control'''" ('''Ctrl''') '''+''' "'''C'''" on your keyboard.


A simpler yet more restricted method of editing would be using the '''echo''' command to add lines to the crontab file. It can be used in such a manner: '''echo "Hello, world" >> /etc/crontabs/root'''. This command will add the text '''Hello, world''' to the crontab file, i.e., it adds whatever is specified within the quotation marks (" ") after the ''echo'' command to the file that is specified after the double '''more than''' ('''>>''') symbol. For example, to add a rule that reboots the router everyday at midnight, we would have to use:
A simpler yet more restricted method of editing would be using the '''echo''' command to add new lines to the crontab file. It can be used in such a manner: '''echo "Hello, world" >> /etc/crontabs/root'''. This command will add the text '''Hello, world''' to the crontab file, i.e., it adds whatever is specified within the quotation marks (" ") after the ''echo'' command to the file that is specified after the double '''more than''' ('''>>''') symbol. For example, to add a rule that reboots the router everyday at midnight, we would have to use:


  # echo "0 0 * * * reboot" >> /etc/crontabs/root
  # echo "0 0 * * * reboot" >> /etc/crontabs/root


Using the command in such a way simply adds a new line with the denoted text at the end of the specified file. This is convenient when you just want to add a new rule(s) quickly, but unlike ''vi'' or ''crontab -e'' it doesn't offer any other editing capabilities. So if you want edit or remove existing rules, this method will not offer a solution and ''crontab -e'' should be used instead.
Using the command in such a way simply adds a new line with the denoted text at the end of the specified file. This is convenient when you just want to add new rules quickly, but unlike ''vi'' or ''crontab -e'' it doesn't offer any other editing capabilities. So if you want edit or remove existing rules, this method will not offer a solution and ''crontab -e'' should be used instead.


==Examples==
==Examples==


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. The examples provided here will be examined thoroughly but the editing method will not be discussed; you can read up on that in the section above.
This section will provide some crontab usage examples in the hopes of helping you to get the hang of the system or even finding an example that you can use. The examples provided here will be examined thoroughly but the editing method and environment will not be discussed; you can read up on those subjects in the section above.


===Periodic SIM switch===
===Periodic SIM switch===
Line 130: Line 130:


Let's overview what each segment indicates sequentially:
Let's overview what each segment indicates sequentially:
* 45 - the action must take place at minute 45 of the hour
* 45 - the action must take place at minute 45 of the specified hour
* 18 - the action must take place at 6 PM
* 18 - the action must take place at 6 PM
* * - all days of the month are applicable to the rule
* * - all days of the month are applicable to the rule
Line 138: Line 138:
* change - option for the sim_switch command
* 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.
To sum up, the first five segments denote the frequency of the sim_switch command. The option '''change''' specifies that the SIM card that was in use up until the time of the switch will be switched to the one that was inactive up until the time of the switch. So the entire entry will perform a SIM switch to the opposite SIM card every weekday at 6:45 PM.


===Launching an OpenVPN server on specified hours===
===Launching an OpenVPN server on specified hours===
----
----
For this example we'll configure a system that launches an OpenVPN server at the start of a workday (8 AM) and shuts down said server at the end of a workday (6 PM). For this we'll need to add two rules. Each rule will require multiple commands to be executed. Crontab can launch multiple commands the same way as a single command, only the '''&&''' separator should be used to separate the different commands:  
For this example we'll configure a system that launches an OpenVPN server at the start of every workday (8 AM) and shuts down said server at the end of every workday (6 PM). For this we'll need to add two rules. Each rule will require multiple commands to be executed. Crontab can launch multiple commands the same way as a single command, only the '''&&''' separator should be used to divide the different commands:  


  0 8 * * 1-5 uci set openvpn.7365727665725F64656D6F.enable=1 && uci commit && /etc/init.d/openvpn restart
  0 8 * * 1-5 uci set openvpn.7365727665725F64656D6F.enable=1 && uci commit && /etc/init.d/openvpn restart
Line 148: Line 148:


Let's overview what each segment indicates sequentially:
Let's overview what each segment indicates sequentially:
* 0/0 - the action must take place at minute 0 (just as the hour changes)
* 0/0 - the actions for both rules must take place at minute 0 (right after the hour has changed)
* 8/18 - the action must take place at 8 AM and 6 PM respectively
* 8/18 - the actions must take place at 8 AM and 6 PM respectively
* */* - all days of the month are applicable to the rules
* */* - all days of the month are applicable to the rules
* */* - all months of the year are applicable to the rules
* */* - all months of the year are applicable to the rules
* 1-5 - the action must take place every Monday - Friday
* 1-5 - the actions for both rules must take place every Monday - Friday
* openvpn.7365727665725F64656D6F.enable='''1/0''' - enables/disables OpenVPN
* openvpn.7365727665725F64656D6F.enable='''1/0''' - enables/disables OpenVPN (note that the first rule has ''enable=1'' in it and the second one has ''enable=0''; 1 equals ON; 0 equals OFF)
* uci commit - commits configuration changes
* uci commit - commits configuration changes
* /etc/init.d/openvpn restart - restarts OpenVPN service
* /etc/init.d/openvpn restart - restarts the OpenVPN service
* && - used to separate different commands
* && - symbols used to separate different commands


The first line enables the OpenVPN server at 8 AM, the second disables it at 6 PM. In this example we used UCI to change the state of the OpenVPN server. You find more information on UCI '''[[UCI command usage|here]]'''.
To sum up, the first line enables the OpenVPN server at 8 AM, the second disables it at 6 PM. At the end of the enabling and disabling processes the changes are committed and the related services restarted. We used UCI to change the state of the OpenVPN server. You can find more information on UCI in this article: '''[[UCI command usage]]'''.


==External links==
==External links==


https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html - PuTTY downloads page link
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html - PuTTY downloads page link