Scheduling one-off tasks with 'at'

Scheduling one-off tasks with 'at'
Photo by Byeong woo Kang / Unsplash

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

Use atq or at -l to see the list of pending jobs:

$ atq
6 2012-02-26 00:00 a root

Use 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)