Automation is great, but not everyone knows how to automate tasks. However, being able to schedule a task for the computer at a specific time is equally as good. So in this article, I will show you how to schedule tasks using the at command in Linux.
What is the at command?
at is a Linux command that allows you to schedule jobs for a specific date and time. It’s automation made easy from Terminal.
How to install
On Linux, the at command may already be installed by default. You can verify it is installed with the command
$ at -V at version x.y.z
If you can’t find the at command, most modern Linux distributions provide an at command installation package for you.
You may also need to start the at daemon, called atd. On most Linux systems, you use the systemctl command to enable services and allow them to automatically start from now on:
$ sudo systemctl enable --now atd
How to schedule an interactive task with the at . command
You first need to create an event at some point and then you specify what you want to happen.
For example, try scheduling by creating a task for the next few minutes. Just do a simple task. To exit the terminal, press Ctrl + D on your keyboard.
$ at 11:20 AM warning: commands will be executed using /bin/sh at> echo "hello world" > ~/at-test.txt at> <EOT> job 3 at Mon Jul 26 11:20:00 2021
As you can see, at uses intuitive and natural time definitions. You don’t need to know the 24 hours or convert to UTC. In general, you can use any time notation such as noon, 1:30 PM, 13:37,… to describe the moment you want.
Wait a few minutes and then see if the word “hello world” has been written to the file at-text.txt using the cat command.
$ cat ~/at-test.txt hello world
How to schedule a task with the at . command
You don’t need to write dance on terminal to schedule jobs with at. You can use the echo or printf command instead. In this example, I will use now to delay that task for 1 minute.
$ echo "echo 'hello again' >> ~/at-test.txt" | at now +1 minute
After a minute, you need to confirm the task has been completed with the cat command.
$ cat ~/at-test.txt hello world hello again
The at command is pretty easy to manipulate with time options. You can choose between several formats, depending on which is most convenient for you:
YYMMDDhhmm[.ss] (short for year, month, day, hour, minute and second)
CCYYMMDDhhmm[.ss] (full year, month, day, hour, minute and second)
Times and dates can be absolute, or add a plus sign (+) to make them relative to now.
Date and time syntax
The at command is less comfortable when dealing with dates and times. The time must be entered first, then the date, although that date defaults to the current date and only scheduled tasks for some future date.
$ echo "rsync -av /home/tux me@myserver:/home/tux/" | at 3:30 AM tomorrow $ echo "/opt/batch.sh ~/Pictures" | at 3:30 AM 08/01/2022 $ echo "echo hello" | at now + 3 days
View task queue
You can view your scheduled jobs on Linux with the atq command:
$ atq 10 Thu Jul 29 12:19:00 2021 a tux 9 Tue Jul 27 03:30:00 2021 a tux 7 Tue Jul 27 00:00:00 2021 a tux
To remove a job from the queue, use the atrm command. To remove job #7:
$ atrm 7 $ atq 10 Thu Jul 29 12:19:00 2021 a tux 9 Tue Jul 27 03:30:00 2021 a tux
In addition, you can also see 10 more dangerous Linux commands you absolutely should not try here.