How to use At

Being as I found the man files and the –help option for at unnecessarily cryptic, and that it seems impossible to get a useful answer from google for “How to use at” I thought I’d make an attempt at creating one now that I’ve managed to figure it out.

In case you are unaware, ‘at’ is a command which, under linux/unix operating systems, will allow you to run a command or group of commands at a specified time. It differs from cron in that, while both will allow you to schedule commands or scripts to run whenever you please, cron jobs will run repeatedly whenever the given time is matched (daily, hourly, weekly, monthly, or yearly..) while a job created using at will run only once. Useful for very specific reminders, or something you have to get done at a later date, but not now.

It also differs in that “How to use Cron” is a much more useful search phrase.

Using at is actually quite simple, so long as you know exactly how it operates. The main problem with the built-in help, is it includes no examples. All the pertinent information is spread out, and some of it isn’t included. So, here is how to use it to download a file at 9:30 pm on August 31, 2009

~/ $ at 21:30 083109

warning: commands will be executed using /bin/sh
at> cd ~/downloads
at> wget http://www.thatonesite.com/thatonefile.txt
at> <Ctrl+D>
job 8 at  Mon Aug 31 21:30:00 2009
~/ $

or, to run it today instead

~/$ at 21:30

And that’s it.

At <TIME> # Starts the editor prompting you for commands
Commands # Everything you type is queued to execute at the time you specified
<Ctrl+D>    # Submits the job. Just like sending a message using the console mail command.

You can also add -f ‘filename’, to use a script file instead of typing the commands manually.

Other commands you may like to know

atq (OR at -l)                    – Lists all jobs you have scheduled

atrm (OR at -d) #           – Removes a job you have scheduled, the job number is the first thing to appear in the list with atq

batch (OR at -qb now)   – will run the specified commands in the background, ensuring your system performance isn’t affected

The time has lots of fun permutations, which the man file does a pretty good job of explaining

At allows fairly complex time  specifications,  extending  the  POSIX.2
standard.   It  accepts  times of the form HH:MM to run a job at a spe-
cific time of day.  (If that time is already  past,  the  next  day  is
assumed.)   You  may  also specify midnight, noon, or teatime (4pm) and
you can have a time-of-day suffixed with AM or PM for  running  in  the
morning or the evening.  You can also say what day the job will be run,
by giving a date in the form month-name day with an optional  year,  or
giving a date of the form MMDDYY or MM/DD/YY or DD.MM.YY.  The specifi-
cation of a date must follow the specification of the time of day.  You
can  also  give times like now + count time-units, where the time-units
can be minutes, hours, days, or weeks and you can tell at  to  run  the
job  today by suffixing the time with today and to run the job tomorrow
by suffixing the time with tomorrow.


For example, to run a job at 4pm three days from now, you would do
at 4pm + 3 days; to run a job at 10:00am on July 31, you would do at
10am Jul 31; and to run a job at 1am tomorrow, you would do at 1am
tomorrow.

The exact  definition  of  the  time  specification  can  be  found  in
/usr/share/doc/at/timespec.

It should also be noted that commands executed using at will run in their own environment, completely disconnected from your open consoles or the X server. So you can’t use it to, say, open a video detailing your plans as a reminder, although you can open an mp3:)

However, in order to prevent it from closing out immediately after openning, you have to hold the job open somehow.

So

~/messages $ at now
warning: commands will be executed using /bin/sh
at> mplayer ~/messages/file.mp3
at> sleep 5
at> <EOT>
job 34 at Tue Aug 25 19:42:00 2009
~/messages $

works, while

~/messages $ at now
warning: commands will be executed using /bin/sh
at> mplayer ~/messages/file.mp3
at> <EOT>
job 35 at Tue Aug 25 19:43:00 2009
~/messages $

Will only play the first half second..for some reason.