Are you struggling to maintain and execute cron jobs on your Linux server with optimal frequency? As a dedicated system administrator or a savvy engineer, managing cron jobs can often be a recurring task in your day-to-day responsibilities. Understanding and remembering the syntax for configuring a new cron job can be a challenge, but it’s crucial for efficient server management.

Advertisement

Cron jobs are a fundamental component of server maintenance, providing a reliable method to automate repetitive tasks. Whether you’re working with CentOS, RHEL, or another Linux distribution, the crontab command is your go-to tool for editing and managing these jobs. Although the process of creating a cron job might seem straightforward, complexities can arise when juggling multiple users and diverse server environments. Fortunately, the crontab syntax is largely uniform across different Linux systems, enabling you to master task scheduling quickly.

This in-depth tutorial is tailored for system administrators and IT professionals looking to enhance their server management skills. You’ll discover 20 examples of using crontab for scheduling jobs, ranging from basic to advanced scenarios. Additionally, learn how to use the crontab for one-time future tasks, though for such requirements, the Linux ‘at’ command is often recommended.

Understanding Linux Crontab Syntax and Configuration

A crontab file’s format is deceptively simple: each line comprises six fields, delineated by spaces. These fields specify the minute (0-59), hour (0-23), day of the month (1-31), and so forth, determining when the job will execute. Wildcards, like asterisks, offer additional flexibility in scheduling.

 
[Minute] [Hour] [Day_of_the_Month] [Month_of_the_Year] [Day_of_the_Week] [Command to Execute]

Crontab in Linux with Examples

Here’s a quick reference for crontab scheduling:

  • Minute: Range 0-59
  • Hour: Range 0-23
  • Day of the Month: Range 1-31
  • Month of the Year: Range 1-12 or abbreviations (e.g., Jan, Feb)
  • Day of the Week: Range 0-7 (0 and 7 for Sunday)

Moreover, we’ll delve into how to set multiple values or ranges in your cron jobs, enhancing your server’s operational efficiency.

  • Asterisks (*): For universal matching
  • Multiple Values: Use commas for distinct values (e.g., 2,4,8)
  • Range Definition: Specify ranges with a hyphen (e.g., 1-10)
  • Multiple Ranges: Combine ranges with commas (e.g., Jan-Mar, Jul-Sep)

Stay tuned as we explore the nuances of cron job scheduling and management, ensuring your Linux servers operate smoothly and efficiently.

How to Add/Update Crontab

Crontab files are typically stored in the /etc/cron.d/ directory on Linux systems. The crontab command can be used to edit the crontab file.

crontab -e 

By default, it will edit the crontab entries of the currently logged-in user. To edit other user crontab use the command below:

crontab -u username -e 

Change the EDITOR environment variable to change your default editor.

How to List Crontab

To view the crontab entries of current users use the following command.

crontab -l 

Use -u followed by the username to view the crontab entries of the specified user.

crontab -u username -l 

20 Useful Examples for Scheduling Crontab

Here is the list of examples for scheduling cron jobs in a Linux system using crontab.

  1. Schedule a cron to execute at 2 am daily.

    This will be useful for scheduling database backups on a daily basis.

    0 2 * * * bash /script/backup.sh
    
    • Asterisk (*) is used for matching all the records.
  2. Schedule a cron to execute twice a day.

    The below example command will execute at 5 AM and 5 PM daily. You can specify multiple time stamps by comma-separated.

    0 5,17 * * * /scripts/script.sh
    
  3. Schedule a cron to execute every minute.

    Generally, we don’t require any script to execute every minute but in some cases, you may need to configure it.

    * * * * *  /scripts/script.sh
    
  4. Schedule a cron to execute every Sunday at 5 PM.

    This type of cron is useful for doing weekly tasks, like log rotation, etc.

    0 17 * * sun  /scripts/script.sh
    
  5. Schedule a cron to execute every 10 minutes.

    If you want to run your script at 10 minutes intervals, you can configure it like the below. These types of crons are useful for monitoring.

    */10 * * * * /scripts/monitor.sh
    

    */10: means to run every 10 minutes. Same as if you want to execute on every 5 minutes use */5.

  6. Schedule a cron to execute on selected months.

    Sometimes we are required to schedule a task to be executed for selected months only. Below example script will run in January, May, and August months.

    * * * jan,may,aug *  /script/script.sh
    
  7. Schedule a cron to execute on selected days.

    If you required scheduling a task to be executed for selected days only. The below example will run on each Sunday and Friday at 5 PM.

    0 17 * * sun,fri  /script/script.sh
    
  8. Schedule a cron to execute on the first Sunday of every month.

    To schedule a script to execute a script on the first Sunday only is not possible by time parameter, But we can use the condition in command fields to do it.

    0 2 * * sun  [ $(date +%d) -le 07 ] && /script/script.sh
    
  9. Schedule a cron to execute every four hours.

    If you want to run a script on 4 hours intervals. It can be configured like below.

    0 */4 * * * /scripts/script.sh
    
  10. Schedule a cron to execute twice every Sunday and Monday.

    To schedule a task to execute twice on Sunday and Monday only. Use the following settings to do it.

    0 4,17 * * sun,mon /scripts/script.sh
    
  11. Schedule a cron to execute every 30 Seconds.

    To schedule a task to execute every 30 seconds is not possible by time parameters, But it can be done by scheduling the same cron twice as below.

    * * * * * /scripts/script.sh
    * * * * *  sleep 30; /scripts/script.sh
    
  12. Schedule multiple tasks in a single cron.

    To configure multiple tasks with a single cron Can be done by separating tasks by the semicolon ( ; ).

    * * * * * /scripts/script.sh; /scripts/scrit2.sh
    
  13. Schedule tasks to execute yearly ( @yearly ).

    @yearly timestamp is similar to “0 0 1 1 *“. It will execute a task on the first minute of every year, It may useful to send new year greetings 🙂

    @yearly /scripts/script.sh
    
  14. Schedule tasks to execute monthly ( @monthly ).

    @monthly timestamp is similar to “0 0 1 * *“. It will execute a task in the first minute of the month. It may useful to do monthly tasks like paying the bills and invoicing to customers.

    @monthly /scripts/script.sh
    
  15. Schedule tasks to execute Weekly ( @weekly ).

    A @weekly timestamp is similar to “0 0 * * sun“. It will execute a task in the first minute of the week. It may useful to do weekly tasks like the cleanup of the system etc.

    @weekly /bin/script.sh
    
  16. Schedule tasks to execute daily ( @daily ).

    @daily timestamp is similar to “0 0 * * *“. It will execute a task in the first minute of every day, It may useful to do daily tasks.

    @daily /scripts/script.sh
    
  17. Schedule tasks to execute hourly ( @hourly ).

    @hourly timestamp is similar to “0 * * * *“. It will execute a task in the first minute of every hour, It may useful to do hourly tasks.

    @hourly /scripts/script.sh
    
  18. Schedule tasks to execute on system reboot ( @reboot ).

    @reboot is useful for those tasks which you want to run on your system startup. It will be the same as system startup scripts. It is useful for starting tasks in the background automatically.

    @reboot /scripts/script.sh
    
  19. Redirect Cron Results to a specified email account.

    By default, cron sends details to the current user where cron is scheduled. If you want to redirect it to your other account, can be done by setup the MAIL variable like below

    crontab -l 
    
    MAIL=bob
    0 2 * * * /script/backup.sh
    
  20. Take a backup of all cron to a plain text file.

    I recommend keeping a backup of all jobs entry in a file. This will help you to recover cron in case of accidental deletion.

    Check current scheduled cron:

    crontab -l 
    
    MAIL=rahul
    0 2 * * * /script/backup.sh
    

    Backup cron to text file:

    # crontab -l > cron-backup.txt
    # cat cron-backup.txt
    MAIL=rahul
    0 2 * * * /script/backup.sh
    

    Removing current scheduled cron:

    # crontab -r
    # crontab -l
    no crontab for root
    

    Restore crons from text file:

    # crontab cron-backup.txt
    # crontab -l
    MAIL=rahul
    0 2 * * * /script/backup.sh
    

Hope these examples helps you to understand the Crontab architecture and job scheduling. You can also visit another article containing more Crontab practical examples.

Conclusion

In conclusion, this tutorial offers an invaluable guide for both beginners and seasoned Linux users. Through 20 detailed examples, this article has illuminated the versatility and efficiency of crontab in managing routine tasks, thereby enhancing productivity and ensuring consistent execution of important jobs.

The journey through various cron job setups, from basic to advanced configurations, demonstrates how crontab can be tailored to fit a wide array of requirements. Whether it’s automating system maintenance, managing backups, or scheduling regular data processing tasks, crontab stands out as an essential tool in the Linux arsenal. The practical nature of the examples provided ensures that readers can directly apply these concepts in their daily operations.

Remember, mastering crontab is not just about automating tasks; it’s about optimizing your time and resources, which is crucial in the fast-paced world of technology.

Share.

76 Comments

  1. Thanks for article here, buta

    This is the correct:
    @weekly timestamp is similar to “0 0 * * sun“

    For Linux the first day is SUNDAY when we have @weekly in crontab.

  2. Hi Rahul
    Nice artical, Thanks a lot

    Personal request : Can you provide any guidelines regarding how to write cron job scripts for various occasions like
    payment remainders, subscription remainder, birthday wishes, backup activities and block premium users if they fail to follow the rules etc

    Thanks

  3. Great article Rahul. Very nicely explained. I have scheduled a python script to start at 1800 hours everyday which runs in a continuous loop until stopped. Now i want to schedule a stop of the script at 0600 hours everyday. How can i do that using corntab,
    What i tried
    0 06 * * * killall -9 myscript.py

    and also
    0 6 * * * /home/pi/ killall -9 myscript.py

    also
    0 6 * * * killall -9 /home/pi/myscript.py
    However, it is not working. Please help.
    Thanks

  4. Hello, I am on SUSE Linux Enterprise Server 12 SP4 or 15 SP2 and when I try to cron script every specific sunday of the month, cron launch my script every sunday !
    I tried that…
    00 18 8-14 * 0 if [ `/opt/Oxya/TestFDM.sh` = “0” ] ; then /etc/rc.d/sybase stop && /sbin/shutdown -r now ; fi
    … or that…
    00 18 8,9,10,11,12,13,14 * 0 if [ `/opt/Oxya/TestFDM.sh` = “0” ] ; then /etc/rc.d/sybase stop && /sbin/shutdown -r now ; fi
    … same result ! It didn’t take care of day number ! Had you already this issue ?
    Thansks !

  5. I have tries to run cron job as below, but it is not running as wanted.

    * * * * * php /kunden/homepages/26/d864146585/htdocs/v-sendy/autoresponders.php

    May i know what happen? Thank you.

    • run it like below.
      echo “php /kunden/homepages/26/d864146585/htdocs/v-sendy/autoresponders.php” > /script/script.sh
      while the php must be installed on your linux system, schedule your cron as below.

      * * * * * /script/script.sh

  6. What is the Corn to run a job “last day of the every month”
    I tried: (30 23 28-31 * * ) but it is running for 28th 29th 30th 31st of every month
    But I need last day of every month ?? March has 31st April has 30th and Feb has 28th ??

    • Hi Jitin,

      Try below crontab format. Change months according to your requirements:

      59 23 28-31 jan,apr,jul,oct * [ “$(date +%d -d tomorrow)” = “01” ] && /root/script.sh

  7. Arunkumar Gali on

    Hi This Arun

    We have mac mini machine how to schedule weekly reboot script if have please teach me

    Thanks on advance

    • I think, you schedule two cron. First will run Monday to Saturday. Second will run on Sunday ignore specific hours:

      * * * * mon-sat script.sh
      * 0-1,3-23 * * sun script.sh

      Hope this helps you.

  8. Hi, when i try to run this command over crontab, it wil not work

    10 10 * * 5 perl /home/oracle/userreport.pl TEST >/dev/null 2>&1

    but when i try manuel in a terminal like:

    oracle@server1~] perl /home/oracle/userreport.pl TEST
    it will work

    TEST is the Databasename
    What did i do wrong!!
    thanks

    • Try to use full path of perl command. like:

      10 10 * * 5 /usr/bin/perl /home/oracle/userreport.pl TEST >/dev/null 2>&1

      It still not work try below:

      10 10 * * 5 cd /home/oracle && /usr/bin/perl userreport.pl TEST >/dev/null 2>&1

  9. how to cron shell script with parameter, I an execute shell script on terminal as ./test.sh username but it’s not executing through CRON.

    Note : username is parameter which read value in script.

  10. how to check the disk space of the root partition of the server and accumulate in the file at /home/ubuntu/test.txt. Set the command to run every hour. Use the command df -h.?

    • The below cron will check disk uses for /dev/sda1 every hour and store in text.txt file:

      0 * * * * df -Ph /dev/sda1 | grep -vE ‘^Filesystem|tmpfs|cdrom’ | awk ‘{ print $5 }’ > /home/ubuntu/text.txt

  11. How to run a job every alternate Sunday.
    30 08 1-7,15-20,29-31 * 0 — not working
    30 08 1-7,15-20,29-31 * sun — I am waiting for the result.

  12. Tariqul Islam on

    @Weekly Cron Job Example is wrong. Please correct it.
    it should be.
    0 0 * * mon ‘command here’

  13. RAK UNGCHUSRI on

    Thank you for the cron document. The man page on cron was rather hard to read. Your page makes it easy to understand, especially with the 20 examples.

  14. how can we set different timings in different days in single cronjob
    eg: 5 a.m. on monday
    6 a.m. on tuesday

  15. Recently upgraded to ubuntu 20.04, I suspect the @ functionality is broken as my @daily and @weekly jobs stopped running after upgrade. Can you confirm? Cron version 3.0pl1-136ubuntu1

  16. Everson dos santos brunelli on

    Bom dia;

    Criei uma tarefa para separar as nf da pasta, porem o crontab executa e não acontece nada.
    */1 * * * * /totvs/doc/danfe/separa_danfe_na_pasta.sh

    • Your script is scheduled to run every 1 minute. Make sure the script is working file with manually execute. Also separa_danfe_na_pasta.sh have proper execute permissions.

  17. Hi Rahul,

    I want to run a job “every 10 days before the second Wednesday of the month”. Your help will be really appreciated.

    Mohammad

  18. How to schedule the cronjob that will run whole month except one day.Like the job will run whole month but it should not run on 5th date.
    Some one will help me on this

    • You can use the following syntax:

      0 4 1-4,6-31 * * /path/to/script.sh
      

      Here “1-4,6-31” defines the date, which will skip the 5’th of the month. Hope this helps you

  19. How we can pause the cron job for two hours.? and after two hours I want to run the cron job as usual.

  20. Ashok Patidar on

    Hi Rahul,
    Thank you o much for post cron details.
    I want to monitor cron in real time as well want to know that by which cron server CPU or RAM got full utilized or which cron not executed properly.
    Thanks

  21. */35 * * * *, we have tried this but not working as expected. We need a job to run at every 35 minutes round the clock. In this case, first build will trigger at 4:00 (say), next build will trigger at 4:35 and the next build is getting triggered at 5:00 not at 5:10. In a single hour it is triggering twice rather going to next hour.
    The sequence for this */35 * * * * is
    4:00
    4:35
    5:00
    5:35
    6:00
    In a single hour, it is getting triggered again without completing 35 minutes. Please check once and help me to get correct one!

  22. If i want to execute a script on 0:30 am every 10 day, which is correct?
    30 * */10 * * script.sh
    30 0 * */10 * * script.sh

    • Try this: This will execute any script every minute starting 3AM to 8AM

      * 3-8 * * * /scripts/script.sh

      Hope this helps you.

  23. wow, good tutorials. Could you please cover how to save jobs to crontab. I presently have a challenge doing this on oracle linux 7.

  24. I want to run the same job @ 2:00 AM Every day except on Wednesday. On Wednesday’s i want to run the same job @ 3:00 AM. is it possible with single line command.

    • Try the following:

      0 3 * * 3 /path/to/your/script.sh
      0 2 * * 0-2,4-6 /path/to/your/script.sh

      Two lines in cron for the same task. It applies to your case.

  25. Can someone help me with the below queries plz?
    How to configure a cronjob to run on alternate Sundays?
    How to configure a cronjob to run on alternate Months (example – Jan,Mar, May etc) without using the literals like 1,3,5 or jan,mar,may ?

  26. Rak Ungchusri on

    Thank you for your post. Although I have used it several times but not often enough to remember the different parameters.

  27. Those are likely sh or bash scripts, but can be any program. You must specify the full path to the program, and any args if the program takes args.
    Also be aware that cron does run as the user, but does not go through the normal user login sequence. Therefore, you must specify full paths to any commands within your shell scripts because they might not be in the PATH that is defined for the user at login. For example, a script that runs curl (from /usr/bin/curl) might work when I am logged in as user=dave, but from cron the script might not have /usr/bin in the PATH so it wouldn’t find curl. So in the script you would specify /usr/bin/curl instead of just curl. (This also means if your script uses an alias defined at login, cron won’t know about the alias)

  28. Leslie Satenstein on

    #To schedule something that runs every two minutes
    */2 * * * * DO_THIS_COMMAND_EVERY_TWO_MINUTES
    * */3 * * * Do This_Command_every_three_hours

    • Hi Leslie. The second cron have some issues. You need to specify minute to run. For example.

      0 */3 * * * Do This_Command_every_three_hours

      Now, this will like 3:00, 6:00, 9:00 and so on.

  29. for ex. 8:
    0 2 * * sun [ $(date +%d) -le 07 ] && /script/script.sh

    can you do it with
    0 2 1-7 * sun /script/script.sh

  30. Very nice article.
    Only one thing that I do not get. You keep on talking about scripts.sh etc…..
    How does someone make these scripts, where are they and where do you save them etc…

    Thanks for the information, brilliant article.

  31. There is an interactive cron simulator at http://www.dataphyx.com where these examples, and any other combinations of crontab timing parameters, can be tried out off-line. Time/date values go in, a list of job run-times comes out.

Leave A Reply

Exit mobile version