Provided by: manpages-posix_2.16-1_all bug

NAME

       at - execute commands at a later time

SYNOPSIS

       at [-m][-f file][-q queuename] -t time_arg

       at [-m][-f file][-q queuename] timespec ...

       at -r at_job_id ...

       at -l -q queuename

       at -l [at_job_id ...]

DESCRIPTION

       The  at  utility  shall  read  commands  from  standard input and group them together as an at-job, to be
       executed at a later time.

       The at-job shall be executed in a separate invocation of the shell, running in a separate  process  group
       with  no  controlling  terminal,  except  that the environment variables, current working directory, file
       creation mask, and other implementation-defined execution-time attributes in effect when the  at  utility
       is executed shall be retained and used when the at-job is executed.

       When  the  at-job  is submitted, the at_job_id and scheduled time shall be written to standard error. The
       at_job_id is an identifier that shall be a string consisting solely of alphanumeric  characters  and  the
       period  character.  The  at_job_id shall be assigned by the system when the job is scheduled such that it
       uniquely identifies a particular job.

       User notification and the processing of the job's standard output and standard error are described  under
       the -m option.

       Users shall be permitted to use at if their name appears in the file /usr/lib/cron/at.allow. If that file
       does  not  exist,  the file /usr/lib/cron/at.deny shall be checked to determine whether the user shall be
       denied access to at. If neither file exists, only a process with  the  appropriate  privileges  shall  be
       allowed  to  submit  a  job.  If  only  at.deny exists and is empty, global usage shall be permitted. The
       at.allow and at.deny files shall consist of one user name per line.

OPTIONS

       The at utility shall conform to the  Base  Definitions  volume  of  IEEE Std 1003.1-2001,  Section  12.2,
       Utility Syntax Guidelines.

       The following options shall be supported:

       -f  file
              Specify the pathname of a file to be used as the source of the at-job, instead of standard input.

       -l     (The  letter  ell.)  Report  all jobs scheduled for the invoking user if no at_job_id operands are
              specified. If at_job_ids are specified, report only information for these jobs. The  output  shall
              be written to standard output.

       -m     Send  mail  to  the  invoking  user  after the at-job has run, announcing its completion. Standard
              output and standard error produced by the at-job shall be mailed  to  the  user  as  well,  unless
              redirected elsewhere. Mail shall be sent even if the job produces no output.

       If -m is not used, the job's standard output and standard error shall be provided to the user by means of
       mail,  unless  they  are  redirected elsewhere; if there is no such output to provide, the implementation
       need not notify the user of the job's completion.

       -q  queuename

              Specify in which queue to schedule a job for submission. When used with the -l option,  limit  the
              search  to  that particular queue. By default, at-jobs shall be scheduled in queue a. In contrast,
              queue b shall be reserved for batch jobs; see batch. The meanings  of  all  other  queuenames  are
              implementation-defined.   If  -q  is  specified  along  with either of the -t time_arg or timespec
              arguments, the results are unspecified.

       -r     Remove the jobs with the specified at_job_id operands that were previously  scheduled  by  the  at
              utility.

       -t  time_arg
              Submit  the job to be run at the time specified by the time option-argument, which the application
              shall ensure has the format as specified by the touch -t time utility.

OPERANDS

       The following operands shall be supported:

       at_job_id
              The name reported by a previous invocation of the at utility at the time the job was scheduled.

       timespec
              Submit the job to be run at the date  and  time  specified.  All  of  the  timespec  operands  are
              interpreted  as  if  they  were  separated  by  <space>s  and concatenated, and shall be parsed as
              described in the grammar at the end of this section. The date and time  shall  be  interpreted  as
              being  in  the  timezone  of  the  user (as determined by the TZ variable), unless a timezone name
              appears as part of time, below.

       In the POSIX locale, the following describes the three parts of the time specification string. All of the
       values from the LC_TIME categories in the POSIX locale shall be recognized in a case-insensitive manner.

       time
              The time can be specified as one, two, or four digits. One-digit and two-digit  numbers  shall  be
              taken  to  be  hours;  four-digit  numbers  to be hours and minutes. The time can alternatively be
              specified as two numbers separated by a colon, meaning hour:minute. An AM/PM  indication  (one  of
              the values from the am_pm keywords in the LC_TIME locale category) can follow the time; otherwise,
              a  24-hour  clock time shall be understood. A timezone name can also follow to further qualify the
              time. The acceptable timezone names are implementation-defined, except that they  shall  be  case-
              insensitive and the string utc is supported to indicate the time is in Coordinated Universal Time.
              In the POSIX locale, the time field can also be one of the following tokens:

              midnight
                     Indicates the time 12:00 am (00:00).

              noon
                     Indicates the time 12:00 pm.

              now
                     Indicates  the  current  day  and  time.  Invoking  at  <now>  shall  submit  an at-job for
                     potentially immediate execution (that is, subject only to unspecified scheduling delays).

       date
              An optional date can be specified as either a month name (one of the values from the mon or  abmon
              keywords  in  the  LC_TIME  locale  category)  followed  by a day number (and possibly year number
              preceded by a comma), or a day of the week (one of the values from the day or  abday  keywords  in
              the LC_TIME locale category). In the POSIX locale, two special days shall be recognized:

              today
                     Indicates the current day.

              tomorrow
                     Indicates the day following the current day.

              If  no  date  is given, today shall be assumed if the given time is greater than the current time,
              and tomorrow shall be assumed if it is less. If the given month is less  than  the  current  month
              (and no year is given), next year shall be assumed.

       increment
              The  optional  increment  shall be a number preceded by a plus sign ( '+' ) and suffixed by one of
              the following: minutes, hours, days, weeks, months, or years. (The singular forms  shall  also  be
              accepted.)  The  keyword  next  shall be equivalent to an increment number of +1. For example, the
              following are equivalent commands:

                     at 2pm + 1 week
                     at 2pm next week

       The following grammar describes the  precise  format  of  timespec  in  the  POSIX  locale.  The  general
       conventions  for  this  style  of grammar are described in Grammar Conventions . This formal syntax shall
       take precedence over the preceding text syntax description. The longest possible token or delimiter shall
       be recognized at a given point. When used in a timespec, white space shall also delimit tokens.

              %token hr24clock_hr_min
              %token hr24clock_hour
              /*
                An hr24clock_hr_min is a one, two, or four-digit number. A one-digit
                or two-digit number constitutes an hr24clock_hour. An hr24clock_hour
                may be any of the single digits [0,9], or may be double digits, ranging
                from [00,23]. If an hr24clock_hr_min is a four-digit number, the
                first two digits shall be a valid hr24clock_hour, while the last two
                represent the number of minutes, from [00,59].
              */

              %token wallclock_hr_min
              %token wallclock_hour
              /*
                A wallclock_hr_min is a one, two-digit, or four-digit number.
                A one-digit or two-digit number constitutes a wallclock_hour.
                A wallclock_hour may be any of the single digits [1,9], or may
                be double digits, ranging from [01,12]. If a wallclock_hr_min
                is a four-digit number, the first two digits shall be a valid
                wallclock_hour, while the last two represent the number of
                minutes, from [00,59].
              */

              %token minute
              /*
                A minute is a one or two-digit number whose value can be [0,9]
                or [00,59].
              */

              %token day_number
              /*
                A day_number is a number in the range appropriate for the particular
                month and year specified by month_name and year_number, respectively.
                If no year_number is given, the current year is assumed if the given
                date and time are later this year. If no year_number is given and
                the date and time have already occurred this year and the month is
                not the current month, next year is the assumed year.
              */

              %token year_number
              /*
                A year_number is a four-digit number representing the year A.D., in
                which the at_job is to be run.
              */

              %token inc_number
              /*
                The inc_number is the number of times the succeeding increment
                period is to be added to the specified date and time.
              */

              %token timezone_name
              /*
                The name of an optional timezone suffix to the time field, in an
                implementation-defined format.
              */

              %token month_name
              /*
                One of the values from the mon or abmon keywords in the LC_TIME
                locale category.
              */

              %token day_of_week
              /*
                One of the values from the day or abday keywords in the LC_TIME
                locale category.
              */

              %token am_pm
              /*
                One of the values from the am_pm keyword in the LC_TIME locale
                category.
              */

              %start timespec
              %%
              timespec    : time
                          | time date
                          | time increment
                          | time date increment
                          | nowspec
                          ;

              nowspec     : "now"
                          | "now" increment
                          ;

              time        : hr24clock_hr_min
                          | hr24clock_hr_min timezone_name
                          | hr24clock_hour ":" minute
                          | hr24clock_hour ":" minute timezone_name
                          | wallclock_hr_min am_pm
                          | wallclock_hr_min am_pm timezone_name
                          | wallclock_hour ":" minute am_pm
                          | wallclock_hour ":" minute am_pm timezone_name
                          | "noon"
                          | "midnight"
                          ;

              date        : month_name day_number
                          | month_name day_number "," year_number
                          | day_of_week
                          | "today"
                          | "tomorrow"
                          ;

              increment   : "+" inc_number inc_period
                          | "next" inc_period
                          ;

              inc_period  : "minute" | "minutes"
                          | "hour" | "hours"
                          | "day" | "days"
                          | "week" | "weeks"
                          | "month" | "months"
                          | "year" | "years"
                          ;

STDIN

       The standard input shall be a text file consisting of commands acceptable to the shell  command  language
       described  in  Shell  Command  Language  .  The standard input shall only be used if no -f file option is
       specified.

INPUT FILES

       See the STDIN section.

       The text files /usr/lib/cron/at.allow and /usr/lib/cron/at.deny shall contain zero or  more  user  names,
       one per line, of users who are, respectively, authorized or denied access to the at and batch utilities.

ENVIRONMENT VARIABLES

       The following environment variables shall affect the execution of at:

       LANG   Provide  a  default  value for the internationalization variables that are unset or null. (See the
              Base Definitions volume of IEEE Std 1003.1-2001, Section 8.2, Internationalization  Variables  for
              the  precedence  of  internationalization  variables  used  to  determine  the  values  of  locale
              categories.)

       LC_ALL If set to a non-empty string value, override the values  of  all  the  other  internationalization
              variables.

       LC_CTYPE
              Determine  the locale for the interpretation of sequences of bytes of text data as characters (for
              example, single-byte as opposed to multi-byte characters in arguments and input files).

       LC_MESSAGES
              Determine the locale that should be used to affect the format and contents of diagnostic  messages
              written to standard error and informative messages written to standard output.

       NLSPATH
              Determine the location of message catalogs for the processing of LC_MESSAGES .

       LC_TIME
              Determine the format and contents for date and time strings written and accepted by at.

       SHELL  Determine  a  name  of  a  command interpreter to be used to invoke the at-job. If the variable is
              unset or null, sh shall be used.  If it is  set  to  a  value  other  than  a  name  for  sh,  the
              implementation shall do one of the following: use that shell; use sh; use the login shell from the
              user database; or any of the preceding accompanied by a warning diagnostic about which was chosen.

       TZ     Determine the timezone. The job shall be submitted for execution at the time specified by timespec
              or  -t  time  relative  to  the  timezone  specified  by the TZ variable.  If timespec specifies a
              timezone, it shall override TZ . If timespec does not specify a timezone and TZ is unset or  null,
              an unspecified default timezone shall be used.

ASYNCHRONOUS EVENTS

       Default.

STDOUT

       When  standard  input  is  a  terminal,  prompts  of  unspecified  format for each line of the user input
       described in the STDIN section may be written to standard output.

       In the POSIX locale, the following shall be written to the standard output for each  job  when  jobs  are
       listed in response to the -l option:

              "%s\t%s\n", at_job_id, <date>

       where date shall be equivalent in format to the output of:

              date +"%a %b %e %T %Y"

       The  date  and  time  written  shall  be  adjusted  so  that  they appear in the timezone of the user (as
       determined by the TZ variable).

STDERR

       In the POSIX locale, the following shall be written to standard error when a job  has  been  successfully
       submitted:

              "job %s at %s\n", at_job_id, <date>

       where  date  has  the  same  format  as  that  described in the STDOUT section. Neither this, nor warning
       messages concerning the selection of the command interpreter,  shall  be  considered  a  diagnostic  that
       changes the exit status.

       Diagnostic messages, if any, shall be written to standard error.

OUTPUT FILES

       None.

EXTENDED DESCRIPTION

       None.

EXIT STATUS

       The following exit values shall be returned:

        0     The at utility successfully submitted, removed, or listed a job or jobs.

       >0     An error occurred.

CONSEQUENCES OF ERRORS

       The job shall not be scheduled, removed, or listed.

       The following sections are informative.

APPLICATION USAGE

       The  format of the at command line shown here is guaranteed only for the POSIX locale. Other cultures may
       be supported with substantially different interfaces, although implementations are encouraged to  provide
       comparable levels of functionality.

       Since  the  commands  run  in  a  separate  shell invocation, running in a separate process group with no
       controlling terminal, open file descriptors, traps, and priority inherited from the invoking  environment
       are lost.

       Some  implementations  do  not allow substitution of different shells using SHELL . System V systems, for
       example, have used the login shell value for the user in /etc/passwd. To select reliably another  command
       interpreter, the user must include it as part of the script, such as:

              $ at 1800
              myshell myscript
              EOT
              job ... at ...
              $

EXAMPLES

        1. This sequence can be used at a terminal:

           at -m 0730 tomorrow
           sort < file >outfile
           EOT

        2. This  sequence,  which  demonstrates  redirecting  standard  error  to a pipe, is useful in a command
           procedure (the sequence of output redirection specifications is significant):

           at now + 1 hour <<!
           diff file1 file2 2>&1 >outfile | mailx mygroup
           !

        3. To have a job reschedule itself, at can be invoked from within the at-job. For  example,  this  daily
           processing  script  named my.daily runs every day (although crontab is a more appropriate vehicle for
           such work):

           # my.daily runs every day
           daily processingat now tomorrow < my.daily

        4. The spacing of the three portions of the POSIX locale timespec is quite flexible as long as there are
           no ambiguities.  Examples of various times and operand presentation include:

           at 0815am Jan 24
           at 8 :15amjan24
           at now "+ 1day"
           at 5 pm FRIday
           at '17
               utc+
               30minutes'

RATIONALE

       The at utility reads from standard input the commands to be executed at a later time. It may be useful to
       redirect standard output and standard error within the specified commands.

       The -t time option was added as a new capability to support an internationalized way of specifying a time
       for execution of the submitted job.

       Early proposals added a "jobname" concept as a way of giving submitted jobs names that are meaningful  to
       the  user submitting them. The historical, system-specified at_job_id gives no indication of what the job
       is. Upon further reflection, it was decided that the  benefit  of  this  was  not  worth  the  change  in
       historical  interface.  The  at  functionality  is useful in simple environments, but in large or complex
       situations, the functionality provided by the Batch Services option is more suitable.

       The -q option historically has been an undocumented option, used mainly by the batch utility.

       The System V -m option was added to provide a method for informing users that an  at-job  had  completed.
       Otherwise, users are only informed when output to standard error or standard output are not redirected.

       The  behavior of at <now> was changed in an early proposal from being unspecified to submitting a job for
       potentially immediate execution. Historical BSD at implementations  support  this.  Historical  System  V
       implementations  give  an  error  in  that  case,  but  a  change to the System V versions should have no
       backwards-compatibility ramifications.

       On BSD-based systems, a -u user option has allowed those with appropriate privileges to access  the  work
       of  other  users.  Since  this  is  primarily  a  system  administration  feature  and is not universally
       implemented, it has been omitted. Similarly, a specification for  the  output  format  for  a  user  with
       appropriate privileges viewing the queues of other users has been omitted.

       The  -f  file  option  from  System  V is used instead of the BSD method of using the last operand as the
       pathname. The BSD method is ambiguous-does:

              at 1200 friday

       mean the same thing if there is a file named friday in the current directory?

       The at_job_id is composed of a limited character set in historical practice, and it is mandated  here  to
       invalidate systems that might try using characters that require shell quoting or that could not be easily
       parsed by shell scripts.

       The  at  utility  varies  between  System  V  and  BSD systems in the way timezones are used. On System V
       systems, the TZ variable affects the at-job submission times and the times displayed for the user. On BSD
       systems, TZ  is  not  taken  into  account.  The  BSD  behavior  is  easily  achieved  with  the  current
       specification.   If  the user wishes to have the timezone default to that of the system, they merely need
       to issue the at command immediately following an unsetting or null assignment to TZ . For example:

              TZ= at noon ...

       gives the desired BSD result.

       While the yacc-like grammar specified in the OPERANDS section is lexically unambiguous  with  respect  to
       the  digit  strings, a lexical analyzer would probably be written to look for and return digit strings in
       those cases. The parser could then check whether  the  digit  string  returned  is  a  valid  day_number,
       year_number, and so on, based on the context.

FUTURE DIRECTIONS

       None.

SEE ALSO

       batch , crontab

COPYRIGHT

       Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2003 Edition,
       Standard  for  Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base
       Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of Electrical and Electronics Engineers,
       Inc and The Open Group. In the event of any discrepancy between this version and the  original  IEEE  and
       The  Open  Group  Standard,  the  original  IEEE and The Open Group Standard is the referee document. The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .

IEEE/The Open Group                                   2003                                                 AT(P)