You can specify an exact date and time by using HH:MM MM/DD/YY
format (for example, 16:40 22/12/18 for 4:40 p.m. on December 22,
2018).
When your job is submitted, at reports the job number, date, and time that
the job will be executed; the queue identifier; and the job owner (you). It also
captures all your environment variables and stores them along with the job so
that when your job runs, it can restore the variables, preserving your
execution environment.
The job number and job queue identifier are both important. When you
schedule a job using at, it is placed into queue “a” by default, which means it
runs at your specified time and takes up a normal amount of resources.
An alternative command, batch, is really just a shell script that calls at
with a few extra options. These options (-q b -m now, in case you are
interested) set at to run on queue b (-q b), mail the user on completion (-
m), and run immediately (now). The queue part is what is important: Jobs
scheduled on queue b will only be executed when system load falls below 0.8
—that is, when the system is not running at full load. Furthermore, those jobs
run with a lower niceness, meaning a queue jobs usually have a niceness of 2,
whereas b queue jobs have a niceness of 4.
Because batch always specifies now as its time, you need not specify your
own time; the task will simply run as soon as the system is quiet. Having a
default niceness of 4 means that batched commands get fewer system
resources than a queue job’s (at’s default) and fewer system resources than
with most other programs. You can optionally specify other queues by using
at. Queue c runs at niceness 6, queue d runs at niceness 8, and so on.
However, it is important to note that the system load is only checked before
the command is run. If the load is lower than 0.8, your batch job runs. If the
system load subsequently rises beyond 0.8, your batch job continues to run,
albeit in the background, thanks to its niceness value.
When you submit a job for execution, you are also returned a job number. If
you forget this or just want to see a list of other jobs you have scheduled to
run later, use the atq command with no parameters. If you run this as a
normal user, it prints only your jobs; running it as a super user prints
everyone’s jobs. The output is in the same format as when you submit a job,
so you get the ID number, execution time, queue ID, and owner of each job.
If you want to delete a job, use the atrm command followed by the ID
number of the job you want to delete. This next example shows atq and
atrm being used to list jobs and delete one: