Edited 1 week ago by ExtremeHow Editorial Team
FedoraCronTask SchedulingAutomationCommand LineTerminalSystem AdministrationConfigurationSoftwareComputers
This content is available in 7 different language
Scheduling tasks is an important part of managing servers and automation in a Linux environment. On Fedora, which is a highly popular Linux distribution, one of the most common tools for task scheduling is cron. Cron is a time-based job scheduler in Unix-like operating systems, which can automatically run scripts or commands at specified intervals or times. You can use it to automate system maintenance, backups, monitoring, or any repetitive task. This comprehensive guide will walk you through how to schedule tasks using cron on Fedora.
Cron uses a configuration file called a crontab (short for cron table) to manage task scheduling. Each user on the system can have their own crontab file. In the crontab file, each line represents a scheduled task. Cron checks the contents of the crontab for each user and runs the tasks defined in it. These tasks consist of a command and a schedule.
The basic syntax for a crontab entry is:
* * * * * command_to_run
* * * * * command_to_run
This syntax means:
An example of what this might look like:
30 2 * * 1 /home/user/backup.sh
30 2 * * 1 /home/user/backup.sh
This cron job will run the /home/user/backup.sh
script every Monday (1st represents Monday) at 2:30 AM. Let's look at each part in more detail to see how we can use this tool to our advantage.
Most Fedora installations will have the cron service installed by default. If by chance it is not installed, you can easily add it. To make sure you have cron installed, use the following command:
sudo dnf install cronie
sudo dnf install cronie
The above command will install the cron daemon, which is responsible for managing cron jobs. After installation, make sure the service is running:
sudo systemctl start crond sudo systemctl enable crond
sudo systemctl start crond sudo systemctl enable crond
start
command will start the cron service, while enable
command ensures that it starts automatically at boot time.
Users can create a crontab file to schedule tasks. This can be done by typing the following command:
crontab -e
crontab -e
The above command opens an editor where you can write your cron jobs. If you are using crontab for the first time, it may ask you to choose an editor. Choose your favorite text editor (such as nano, vim, etc.).
When editing your crontab, it is important to ensure that each cron job command is specified correctly in the syntax described earlier. After adding your tasks, save the file and exit the editor. Cron will automatically register the changes.
Now that we know how to access the crontab file and create cron jobs, let's take a look at some common examples:
0 * * * * /home/user/hourly-task.sh
0 * * * * /home/user/hourly-task.sh
This will execute hourly-task.sh
from the home directory at the start of every hour.
30 14 1 3 * echo "Remember to check logs" >> /home/user/notes.txt
30 14 1 3 * echo "Remember to check logs" >> /home/user/notes.txt
This command will add a reminder note to notes.txt
at 2:30 PM on March 1st.
0 0 * * 0/2 /home/user/cleanup.sh
0 0 * * 0/2 /home/user/cleanup.sh
In this setup, cleanup.sh
is executed every other Sunday at midnight.
Cron does not load environment variables from the user's .bashrc
, .profile
or similar files. Thus, if your script depends on specific environment variables, you can define them directly in your crontab file before the cron job:
PATH=/usr/local/bin:/bin:/usr/bin:/home/user/bin 30 1 * * * /home/user/some_command --options
PATH=/usr/local/bin:/bin:/usr/bin:/home/user/bin 30 1 * * * /home/user/some_command --options
Each cron job runs with a specific environment, so it is important to make sure the correct paths and variables are set in the crontab file.
Cron allows the use of a few strings in place of the five-time and date fields, making scheduling simpler:
@reboot
: Run once after startup.@yearly
or @annually
: Run once a year, i.e., 0 0 1 1 *
.@monthly
: Run once a month, i.e. 0 0 1 * *
.@weekly
: Run once a week, i.e. 0 0 * * 0
.@daily
: Run once a day, i.e. 0 0 * * *
.@hourly
: Run once per hour, i.e. 0 * * * *
.These predefined strings make the crontab entry more readable and faster to write.
For example, to run daily-maintenance.sh
script once per day, you could use:
@daily /home/user/daily-maintenance.sh
@daily /home/user/daily-maintenance.sh
By default, cron sends the output (both stdout and stderr) to the user's email on the local machine. If you want to redirect it to a file, you can modify the command as follows:
* * * * * /home/user/script.sh > /home/user/logfile 2>&1
* * * * * /home/user/script.sh > /home/user/logfile 2>&1
Here, 2>&1
redirects the standard error (stderr) to the standard output (stdout), and the output is written to logfile
.
To list all cron jobs for the current user, type:
crontab -l
crontab -l
To delete the crontab file for the current user, use:
crontab -r
crontab -r
Debugging can be difficult because cron has its own environment and does not load the user shell configuration by default. Here are some steps to troubleshoot your cron jobs:
/var/log/cron
or by using journalctl
command in Fedora.While basic scheduling handles most tasks, advanced techniques can be employed for more complex scheduling needs:
You can specify a list of values for any field in crontab. For example, to run a task on the first and fifteenth day of every month:
0 0 1,15 * * /home/user/payroll.sh
0 0 1,15 * * /home/user/payroll.sh
Step values allow you to specify intervals within ranges. For example, to run a task every 10 minutes:
*/10 * * * * /home/user/check-system.sh
*/10 * * * * /home/user/check-system.sh
The */10
symbol indicates "every ten minutes".
Cron is a powerful and versatile tool for task automation, available on Fedora and many other Unix-like systems. By precisely setting time intervals and scripting repetitive tasks, system administrators and users can greatly increase productivity and system reliability. Understanding and using the capabilities of cron can greatly reduce manual workload by efficiently scheduling tasks that would otherwise require constant attention and intervention.
With this guide, you should now have a solid understanding of how to set up and manage cron jobs on Fedora. Whether you're doing basic scheduling, using environment variables, redirecting output, or using advanced scheduling techniques, cron offers many options for customizing task management to your specific needs.
Explore the crony package further, and dive into additional options and possibilities by experimenting with different jobs that will help streamline operations. Automation is the key to effective system management, and mastering cron is an essential skill for Linux users. Keep iterating and refining your task schedule, and leverage the power of cron to keep your system running smoothly and efficiently.
If you find anything wrong with the article content, you can