====== at - Task Scheduling ======
**at** is a task scheduling tool which one-time enables tasks to be
performed on your system. The **batch** is
like **at** but permforms the one-time tasks when system load permits it, all
command and functions of **at** can be replicated by **batch** with the same
arguments.
===== Related Commands =====
The following commands are included to monitor the **at** command:
* **at** - The program used to submit a one-time task.
* **atq** - The program used to review the queue of jobs submitted with **at**
.
* **atrm** - The program used to remove jobs from the at queue.
===== at Command Use =====
The **at** command can be issued to allow you to write a custom script or
point it to a pre-built script. In addition, the broad time specifications
allowed increase the complexity.
The //-m// argument can be added to any command telling the daemon to mail
the user on the local system advising of the completion of the task.
==== Scheduling an Existing Script ====
This example will tell the **at** application to run the script
///home/user/testscript.sh// at 4PM today and e-mail the user upon
completion.
user@darkstar$ at 16:00 -m -f /home/user/testscript.sh
As you can see the //-f// argument means **file** as it points to the
file that will be executed.
==== Scheduling a New Action ====
As seen below, when no file is specified the **at** application opens a
prompt for the user to enter the new script.
user@darkstar$ at 19:40 -m
warning: commands will be executed using /bin/sh
at> ping -c 4 www.google.com
at> echo $?
at>
job 4 at Sun Dec 30 19:40:00 2012
The user will need to type the sequence of commands that will be issued
within the prompt, upon completion you close the prompt with the
Ctrl+'d'
The command above instructed **at** to ping google 4 times at 7:40PM, return
the application status and e-mail the results to the user.
Be sure to note the job number, it is the only visible identifier for the job
and must be referenced if you wish to remove the job later.
==== Reviewing Queued Tasks ====
The command **atq** lists the user's pending jobs. The output is Job Number,
date, hour, queue and username.
user@darkstar$ atq
4 Sun Dec 30 19:40:00 2012 a user
Once the task number has been noted you can review the commands that are
included in the job by issuing the command //at -c {jobnumber}//, and example is shown below.
user@darkstar$ at -c 4
#!/bin/sh
# atrun uid=1000 gid=1000
# mail user 1
umask 22
....Environment Details....
cd /home/user || {
echo 'Execution directory inaccessible' >&2
exit 1
}
ping -c 4 www.google.com
echo $?
==== Removing Queued Tasks ====
The command **atrm** removes jobs from the pending queue, it does not present
any confirmation that the job is removed so it may be advisable to run
**atq** after **atrm** to confirm the job has been removed.
user@darkstar$ atrm 4
====== Further Resources ======
* [[http://unixhelp.ed.ac.uk/CGI/man-cgi?at|at manual page]]
* [[http://www.brunolinux.com/02-The_Terminal/The_at_Command.html|BrunoLinux]]
* [[http://sathyaphoenix.wordpress.com/2009/01/18/using-at-command-to-schedule-jobs-in-linux/]]
====== Sources ======
* Originally written by [[wiki:user:mfillpot | mfillpot]]
{{tag>howtos task_scheduling author_mfillpot}}