In the realm of Linux, the at command stands as a powerful yet often overlooked tool for scheduling tasks. This utility is specifically designed for one-time job scheduling, allowing users to execute commands or scripts at a later time. This article delves into the functionality, usage, and practical applications of the at command, providing insights into how it can streamline workflow and automate tasks in a Linux environment.
Understanding the ‘at’ Command
The at command in Linux is a job scheduling tool, distinct from the more commonly known cron. While cron is used for recurring tasks, at is the tool of choice for one-time tasks that need to run at a specific time. This could include running a backup script overnight, scheduling a system update, or any other task that you need to occur once at a set time.
Installing the ‘at’ Command
Most Linux distributions come with the “at” command pre-installed. However, if it is not present on your system, you can install it using the package manager for your distribution.
- For Debian-based distributions, use the following command:
sudo apt install at
- For Red Hat-based distributions, use this command:
sudo dnf install at
Syntax and Options
The basic syntax of the “at” command is as follows:
at [OPTIONS] TIME
-f
: Specifies a file containing the commands to be executed.-t
: Specifies the time at which to run the commands using a Unix timestamp.-m
: Sends an email to the user when the job has completed.-q
: Specifies a queue in which to place the job.
Scheduling a One-Time Job
To schedule a one-time job, simply provide the desired time for execution. The “at” command supports various time formats, such as:
- Relative time: “
now + 1 hour
” or “now + 30 minutes
” - Absolute time: “
2:30 PM
” or “15:30
” - Date and time: “
10:00 AM tomorrow
” or “2023-04-01 18:00
”
Example:
echo "echo 'Hello, World!' > /tmp/hello_world.txt" | at now + 1 hour
This example schedules a one-time job to create a file containing “Hello, World!” in the /tmp directory after one hour.
You can also schedule the command as below:
at now + 1 hour
echo 'Hello, World!' > /tmp/hello_world.txt
Press CTRL + d to exit from at command terminal.
Listing and Managing Scheduled Jobs
To list all scheduled jobs for the current user, use the “atq” command:
atq
To remove a scheduled job, use the “atrm” command followed by the job ID:
atrm <job_id>
Best Practices
- Always verify that the “at” command is installed and enabled on your system.
- Use descriptive comments in your “at” jobs to make it easier to understand their purpose.
- Test your commands or scripts before scheduling them with the “at” command.
- Remember that the “at” command is designed for one-time jobs. Use the cron command for recurring tasks.
At Command Examples
- Schedule task at coming 10:00 AM.
at 10:00 AM
- Schedule task at 10:00 AM on coming Sunday.
at 10:00 AM Sun
- Schedule task at 10:00 AM on coming 25’th July.
at 10:00 AM July 25
- Schedule task at 10:00 AM on coming 22’nd June 2015.
at 10:00 AM 6/22/2015
at 10:00 AM 6.22.2015
- Schedule task at 10:00 AM on the same date as next month.
at 10:00 AM next month
- Schedule task at 10:00 AM tomorrow.
at 10:00 AM tomorrow
- Schedule task at 10:00 AM tomorrow.
at 10:00 AM tomorrow
- Schedule task to execute just after 1 hour.
at now + 1 hour
- Schedule task to execute just after 30 minutes.
at now + 30 minutes
- Schedule tasks to execute just after 1 and 2 weeks.
at now + 1 week
at now + 2 weeks
- Schedule tasks to execute just after 1 and 2 years.
at now + 1 year
<at now + 2 years
- Schedule tasks to execute at midnight.
at midnight
The above job will execute at 12:00 AM
Conclusion
The at command is an invaluable tool for Linux users looking to efficiently manage one-time tasks. Its flexibility in scheduling and ease of use make it suitable for a variety of applications, from simple reminders to more complex system administration tasks. By mastering the at command, users can take full advantage of this powerful scheduling tool to enhance productivity and automate their workflows.
29 Comments
EXACTLY WHAT I NEEDED!!!!!
BTW the recaptcha input is underneath the Submit button in the comments form. Hard to click.
Thanks Khay, I hope recaptcha positioned correctly now.
Hi,
does it generate log after execution like cron ?
How can we schedule a gtk “graphical” job, for example a simple yad message?
yad –title “Warning” –text “Alarm now, attention” –on-top –borders=25
In my tests, no display is shown at a specified time.
How is it better to schedule installation of upgrades?
For some reason tasks don’t execute. I tried something like: sudo apt-get upgrade -y | at 21:00
It should be
echo “apt-get upgrade -y” | sudo at 21:00
how can we Schedule one job at two different timing with single command
| at | at
ex.
touch helloworld.txt | at now + 1 minute | at now + 2 hours
HI
Where do I see the output ? How will I know if the job has been executed or not ?
please tell me that i want to run a corntab command in every last day of the month.
i am thinking but in some its 30 days and 31 in some and 28 and 29 like that.
Hi Tharun,
You can try cron like this:
here [ “$(date +%d -d tomorrow)” = “01” ] will retrun true if tomorrow is the first day of next month.
I’m using at to run mplayer and stream some radio station, when i want to stop mplayer and use atrm command it doesn’t work. i got only ” Warning: deleting running job” . job vanishes from the atq list, but it still streams music.
HI, I am experiencing an issue. When i am using the format:
command | at time
It is not executing the command that I am providing.
Please tell how to get past it.
echo “command” | at time
Great article Rahul!
I just wanted to extend it a bit with some useful additions.
1) You can use -f option to point “at” to the script you need to run:
at -f /path/to/the/script time_spec
2) One can use “at” to start a process in background without nohup, etc. As easy as
at -f /a/command now
or
echo “/a/command” | at now
3) You can use “at” to run a command repeatedly, but unlike cron you can use “at” to run commands with some period between runs, for example after 3 minutes after previous run was completed. This allow you to avoid various checks preventing next run to start before previous is finished.
Moreover you can define this period as random value. Examples:
The script (lets name it /home/user1/at_run.sh):
————————————-
#!/bin/bash
/the/command/you/need
# fixed period between runs
period=3
# or random period. RANDOM is a bash’s random number from 0 to 32767
period=$[ ($RANDOM % 20) + 15 ]
at -f /home/user1/at_run.sh now + $period minutes
————————————-
run /home/user1/at_run.sh and all next runs will be scheduled automatically, so your /the/command/you/need will run repeatedly forever. Sure, you can break the next run with atq/atrm.
Thx Rahul and Sergey.
@Sergey, in your last point you are basically using a wrapper with a random pause and re-scheduling of the at job.
I think this is also achievable with cron, without the “various checks preventing next run to start before previous is finished”.
You can just replace the last line of your script with this:
sleep $(($period * 60)) && exec /home/user1/at_run.sh
Then set a crontab for /home/user1/at_run.sh .
Note: the ‘exec’ bash builtin will prevent calling bash recursively (nested bash’s) and spare memory.
You will need to kill the process to end it.
If the job is not supposed to stay permanently (boot safe), I would prefer to use an interactive bash inside a ‘screen’ command and just do a loop:
while : ; do
/the/command/you/need
sleep 60
done
So you can follow in “live” the output of the script.
hello!
i am running centos. when i submit an at nothing happens. i can call it up using “atq #”, however, it doesn’t execute?
thanks for the help!!!
What are the differences between at-command and chrontab?
at command is used for one-time task scheduling. crontab is used for repeated tasks.
Hi,
I need to run a script at particular time-stamp which internally calls one more script.
But I am getting an error :
at `./radConnect.sh` 09:00
sh: netstat: command not found
sh: /sbin/ifconfig: No such file or directory
Radskman rc:[0] [Request successfully completed]
syntax error. Last token seen: h
Garbled time
Hi Shitanshu,
Schedule job like following
Hi Rahul,
Thanks for the quick response, the use case which I am trying is a bit different.
I have created some containers using a script and a script internally calls another one which needs to run at a particular timestamp. So the command prompt for giving the script won’t be visible. So is there any alternative to it. Or can we do it using crontab?
Hi Shitanshu,
Try following command.
What would be the command for future date? midnight on 30 October 2017
echo “sh radConnect.sh” | at ?
i think it should be
echo “sh radConnect.sh” | at 0 0 30 10 * *
this would repeat every year on 30th October.
I think i’ve mixed up with crontab function command.
Correction of the previous command:
echo “sh radConnect.sh” | at 12:00 AM 30.10.17
Hi Nabil.. This will work
Wow that was unusual. I just wrote an incredibly long comment but after I clicked submit my comment didn’t appear. Grrrr… well I’m not writing all that over again. Anyway, just wanted to say fantastic blog!
We are interested as well as enthusiastic about what you really are writing about here.