GICT knowledge base
Task Scheduling In Linux Command Line
Published
In this tutorial we can learn how to schedule tasks via the Linux Command line
Scheduling one-time tasks with at
One solution available to users of a Linux system for scheduling future tasks is at. This not a standalone tool, but rather a system daemon (atd), with a set of command-line tools to interact with the daemon (at, atq and more). In Linux installation, the atd daemon will be installed and enabled automatically. The atd daemon can be found in the at package. Users (including root) can queue up jobs for the atd daemon using the command-line tool at. The atd daemon provides 26 queues, a to z, with jobs in alphabetically later queues getting less system priority.
Scheduling jobs
A new job can be scheduled by using the command at <TIMESPEC>.at then read this commands to execute from stdin. For larger commands, and typo-sensitive commands. It is often easier to use input redirection from a script file, eg., at now +5min < myscript, than typing all the commands by hand in a terminal window. When entering commands by hand, you can finish your input by pressing ctrl+D. The <TIMESPEC> allows for many powerful combinations, giving users a free-form way of describing exactly when a job should run. Typically, they start with a time, eg.,02:00pm or 15:59 followed by an optional date or number of days in the future.
Some examples of combinations that can be used are listed in the following text.
1) now +5min
2) teatime tomorrow (teatime is 16:00)
3) noon +4 days
4) 5pm august 3 2016
Inspecting and managing jobs
Inspecting jobs
To get an overview of the pending jobs for your user, use the command atq or, alternatively. the alias at -l.
Running this command gives the following output:
# atq
28 Mon Feb 2 05:13:00 2015 a job1
29 Mon Feb 3 16:00:00 2014 h job2
27 Tue Feb 4 12:00:00 2014 a job3
This shows columns for every job scheduled to run in the future:
1) The job number 28 in the first line.
2) The date and time scheduled for that job, Mon feb 2 05:13:00 2015 in the first line.
3) The queue for the job, a in the first line, but h in the second
4) The owner of the job (and user as which the job will run), Student in all our lines.
To inspect the actual commands that will run when a job is executed, use the command at -c <JOBNUMBER>. This output will first show the environment for the job being set up to reflect the environment of the user who created the job at the time it was created, followed by the actual commands to be run.
Removing Jobs
The atrm <JOBNUNUMBER> will remove a scheduled job. This is useful when a job is no longer needed; for example, when a remote firewall configuration succeeded, and does not need to be reset.
Scheduling Recurring Task with Cron
Schedule a recurring job by having the job resubmit a new job at the end of its execution. Linux systems ship with the crond daemon enabled and started by default specifically for recurring jobs. crond controlled by multiple configuration files, one per user and systemd wide files. These configuration files give users and administrators fine-grained control over exactly when their recurring jobs should be executed. The crond daemon is installed as part of the cron package.
Job Format
When editing jobs with crontab -e, an editor will be started, the file being edited will have one job per line. Empty lines are allowed, and comments start their line with a hash symbol. Environment variables can also be declared, using the format NAME=Value, and will reflect all lines below the line where they are declared. Common environment variables in a crontab include SHELL and MAILTO. Setting the shell variable will change which shell is used to execute the commands on the lines below it, while setting the MAILTO variable will change will email address output will be to.
Individual jobs consist of six fields detailing when and what should be executed. When all five of the first fields match the current date and time, the command in the last field will be executed. These fields are below:
1) Minute
2) Hours
3) Day-Of-Month
4) Month
5) Day-Of-Week
6) Command
Example cron Jobs
1) 0 9 2 2 * /usr/local/bin/yearly_backup
Execute the command /usr/local/bin/yearly_backup at exactly 9 am on February 2nd. every year.
2) */7 9-16 * jul 5 echo “chime”
Send an email containing the word chime to the owner of this job, every seven minutes between 9 am and 5 pm on every Friday in July.
3) 58 23 * * 1-5 /usr/local/bin/daily_report
Run the command /usr/local/bin/daily_report every weekday at two minutes before midnight.
If you need any further assistance please contact our support department.
Related guides
How to Restrict an SSH Key to One Command
Restrict an SSH key to one command with authorized_keys options. Protect the command and check that unwanted shell and forwarding access are denied.
Linux and CommandsSelf-Hosted Video Processing With FFmpeg: A Practical Guide
Learn how to self-host video processing on a VPS using FFmpeg, with practical commands for conversion, compression, thumbnails, and automated workflows.
Linux and CommandsHow to use nohup: Commands in Linux That Survive Terminal Closes
Keep commands running after you close the terminal. nohup examples with wget, Python, rsync, and Docker on any VPS.
Linux and CommandsHow to Fix “Too Many Open Files” Error on Linux Servers
Learn how to fix the "Too Many Open Files" error on Linux servers by understanding file descriptors, adjusting limits, and diagnosing leaks effectively.
