As an alternative to cron job scheduler, the at command allows you to schedule a command to run once at a given time without editing a configuration file.
The only requirement consists of installing this utility and starting and enabling its execution:
# yum install at [on CentOS based systems] $ sudo apt-get install at [on Debian and derivatives]
Next, start and enable the at service at the boot time.
--------- On SystemD --------- # systemctl start atd # systemctl enable atd --------- On SysVinit --------- # service atd start # chkconfig --level 35 atd on
Once atd is running, you can schedule any command or task as follows. We want to send 4 ping probes to www.google.com when the next minute starts (i.e. if it’s 22:20:13, the command will be executed at 22:21:00) and report the result through an email (-m, requires Postfix or equivalent) to the user invoking the command:
# echo "ping -c 4 www.google.com" | at -m now + 1 minute
If you choose to not use the -m option, the command will be executed but nothing will be printed to standard output. You can, however, choose to redirect the output to a file instead.
In addition, please note that at not only allows the following fixed times: now, noon (12:00), and midnight (00:00), but also custom 2-digit (representing hours) and 4-digit times (hours and minutes).
To run updatedb at 11 pm today (or tomorrow if the current date is greater than 11 pm), do:
# echo "updatedb" | at -m 23
To shutdown the system at 23:55 today (same criteria as in the previous example applies):
# echo "shutdown -h now" | at -m 23:55
You can also delay the execution by minutes, hours, days, weeks, months, or years using the + sign and the desired time specification as in the first example.