Automating repetitive tasks is a powerful feature of Unix, enabling you to schedule scripts or commands to run at specific times. Tools like cron
and at
make this process seamless.
In this blog, we’ll explore how to schedule tasks effectively with clear examples and practical tips.
1. Scheduling Tasks with cron
The cron
service runs tasks at specified times and intervals. You define these tasks in a crontab file.
View Your Crontab
To view or edit your scheduled tasks, use:
$ crontab -e
Crontab Syntax
A typical crontab entry looks like this:
* * * * * command_to_run
The five *
symbols represent the following time fields:
- Minute (0–59)
- Hour (0–23)
- Day of the Month (1–31)
- Month (1–12)
- Day of the Week (0–7, where both 0 and 7 mean Sunday)
Examples of Crontab Entries
- Run a Script Every Hour:
0 * * * * /path/to/script.sh
- Run a Command Every Day at 7:30 AM:
30 7 * * * echo "Good morning!" >> ~/log.txt
- Run a Script Every Monday at 10 PM:
0 22 * * 1 /path/to/backup.sh
- Run a Task Every 5 Minutes:
*/5 * * * * /path/to/task.sh
List All Crontab Jobs
To view all scheduled tasks for your user:
$ crontab -l
2. Scheduling One-Time Tasks with at
The at
command schedules a task to run once at a specified time.
Enable the at
Service
First, ensure the atd
service is running:
$ sudo systemctl start atd
$ sudo systemctl enable atd
Basic Syntax
at [time]
Examples of Using at
- Schedule a Task for 2 PM Today:
$ at 2pm
at> echo "Task complete!" >> ~/log.txt
at> Ctrl+D
- Schedule a Task for Tomorrow:
$ at 5:30pm tomorrow
at> /path/to/task.sh
at> Ctrl+D
- Schedule a Task in an Hour:
$ at now + 1 hour
at> echo "This is a one-time task." >> ~/task_log.txt
at> Ctrl+D
View Scheduled at
Tasks
To see all tasks in the queue:
$ atq
Remove a Scheduled at
Task
Use the atrm
command followed by the task’s job number:
$ atrm 3
3. Combining cron
and at
with Logs
It’s good practice to log the output of your tasks to ensure they’ve run successfully.
Log cron
Outputs
Add >>
to redirect output to a log file:
0 9 * * * /path/to/command.sh >> ~/cron.log 2>&1
>> ~/cron.log
: Appends the output tocron.log
.2>&1
: Captures both standard output and errors.
Log at
Outputs
You can also redirect at
command outputs:
$ at 3pm
at> /path/to/script.sh >> ~/at.log 2>&1
at> Ctrl+D
Practice Time!
- Schedule a
cron
job to clean up temporary files every day at midnight:
0 0 * * * rm -rf ~/temp/*
- Schedule an
at
task to remind you in 30 minutes:
$ at now + 30 minutes
at> echo "Time for a break!" | wall
at> Ctrl+D
- View and remove all your scheduled
at
tasks:
$ atq
$ atrm [job_number]
Summary
- Use
cron
for recurring tasks andat
for one-time tasks. - Crontab files allow flexible scheduling with precise time intervals.
- Log task outputs to ensure proper execution and troubleshoot errors.