Linux Command - at
The Linux at command allows you to schedule other commands to run at a specific time. It also comes together wtih the batch command ( at -b ).
at | runs commands at a scheduled time |
batch | runs commands when the system load average is less than 0.8 |
sudo apt install at
sudo systemctl status atd
List all scheduled jobs:
atq
Same:
at -l
Show command or content of a job by job ID:
at -c 56
Shows the job number, time/date, queue, and user.
Show specific queue ( ex: queue m ):
atq -q m
at -l -q m
Delete job by job number, use any of these commands:
atrm 56
at -r 56
at -d 56
Scheduling
Run a command at specified time. Input command interactively:
at 17:00
echo "test"
[enter]
[ctrl] - d
Run a shell script:
at 17:00 -f /home/user1/test1.sh
Pipe command to at:
echo "echo 'test'" | at 17:00
Using a heredoc:
at 17:00 <<END
> echo "test"
> END
Alternate ways of specifying the time:
at 5pm -f /home/user1/test1.sh # 12 hour clock
at midnight -f /home/user1/test1.sh # midnight
at noon -f /home/user1/test1.sh # noon
at teatime -f /home/user1/test1.sh # 4pm
at now -f /home/user1/test1.sh # right now
at now +3 hours -f /home/user1/test1.sh # 3 hours later
at today -f /home/user1/test1.sh # right now
at 17:15 today -f /home/user1/test1.sh # 17:15 same day
at tomorrow -f /home/user1/test1.sh # in 24 hourse
at 5:15pm tomorrow -f /home/user1/test1.sh # 5:15pm tomorrow
at Friday -f /home/user1/test1.sh # on Friday
at 17:00 Friday -f /home/user1/test1.sh # on Friday at 17:00
at 17:00 Friday +2 weeks -f /home/user1/test1.sh # 2 weeks from Friday at 17:00
Using dates:
at Aug 21 -f /home/user1/test1.sh
at Aug 21 2024 -f /home/user1/test1.sh
at 08/21/24 -f /home/user1/test1.sh
at 21.08.24 -f /home/user1/test1.sh
at 24-08-21 -f /home/user1/test1.sh
at 2024-08-21 -f /home/user1/test1.sh
at 5pm 2024-08-21 -f /home/user1/test1.sh
at -t 202308161708.30 -f home/user1/test1.sh # exact time and date YYYYMMDDhhmm.ss
Queues
a | default queue for at |
b | default queue for batch |
= | currently running queue |
- Custom queue names: a-z and A-Z
- higher letters have higher niceness ( lower priority )
- ex: a is higher priority than z
- capital letter queues
- lower priority that lower case letter queues
- also only run when load average is below 0.8
at 4pm -f file.sh -q s
Batch Command
This command will run when the load average is below 0.8. It is similar to the at command except that it won’t accept time, command, or script parameters. You can input the command interactively. You can also use a pipe or heredoc block.
batch 17:00 <<END
> echo "test"
> END
By default at will send output as mail but only if there is output. This can be overridden.
Override:
at 4pm -f /home/user1/test1.sh -m # ensure mail is sent
at 4pm -f /home/user1/test1.sh -M # suppress sending mail