You might be familiar with the cron job scheduler, which is great for repeating tasks. But when you want to schedule a command to only run once in the future, the at command is what you are looking for.
In my case, I was updating a plugin for our Thoughtworks Mingle instance, but the update wasn't hugely important. Many of our staff rely on Mingle for their work, and restarting it takes it offline for a few minutes.
So I used the
at command to schedule the restart to happen at midnight, after everyone had gone home:
$ echo "/etc/init.d/mingle restart" | at -m 00:00 job 6 at 2012-02-26 00:00
at -l to see the list of pending jobs:
$ atq 6 2012-02-26 00:00 a root
at -c <job id> to view the script that will be run:
$ at -c 6 #!/bin/sh # atrun uid=0 gid=0 # mail root 1 umask 22 HOSTNAME=... <lots of environment variables set here> /etc/init.d/mingle restart
To delete a scheduled task, run
at -d <job id>:
$ at -d 6 $ atq (no output)