Man Linux: Main Page and Category List

NAME

       shush - Run a command and optionally report its output by mail

SYNOPSIS

       shush [ -h | -V ]

       shush [ -c dir ] [ -S | -s facility ] [ -vfmk ] name [ ID ]

       shush  [  -c  dir  ]  [  -H to ] [ -R to ] [ -T to ] -C name [ stdout [
       stderr ] ]

       shush [ -i | -u | -r ] [ -c dir ]

DESCRIPTION

       shush runs a command and optionally reports its output by mail.  It  is
       a  useful wrapper around cron jobs.  By default, shush will not produce
       any output when running as everything  (if  anything)  is  reported  by
       mail.   However,  configuration  as  well  as  critical  errors will be
       reported on  the  standard  error  and  (optionally)  syslog.   Because
       interrupting  shush  has dire consequences including the likely loss of
       any output from the command, the following commonly  used  signals  are
       ignored  by  shush: SIGHUP, SIGINT, SIGQUIT and SIGTERM.  If one really
       wants to kill a running instance  of  shush  rather  than  killing  the
       running  managed  command,  SIGKILL  may  be  used and shall serve as a
       reminder of how inappropriate such action typically is.

       For a command to be run using shush, a  configuration  file  name  must
       exist  in  the  configuration directory ($HOME/.shush by default). This
       file defines how the command should be run as well when to send reports
       by  mail.   For  details on available configuration parameters, see the
       CONFIGURATION section below.

       Two  additional  configuration  files  may   exist:   name.stdout   and
       name.stderr (by default).  These files are used to look at the standard
       output and standard error (respectively) produced by the command.   For
       details on how to use these, see the COMMAND OUTPUT section below.

       When   the   -C   option   is  specified,  shush  will  only  load  the
       configuration, optionally analyze  the  standard  output  and  standard
       error  from  the  specified files and finally produce sample reports if
       desired.  This may also be used to produce reports if shush  failed  to
       properly  terminate  when  running a command.  (The standard output and
       error from the command are normally found in files located under /tmp.)

       shush  is  able  to  manage  crontab(5) entries based on configurations
       defined by the user.  This may be done in one of two ways.  If  a  file
       named "schedule" exists in the configuration directory, then it is read
       for scheduling information.  Each line should contain  a  single  entry
       containing three fields separated by whitespace(s).  The fields are (in
       order) the hostname for which the entry applies or the character "*" to
       include all hosts, the configuration name,  and finally, the scheduling
       information in the same format as is used  by  the  schedule  parameter
       (see  below).   To  specify an ID, use name:ID as the second field.  If
       there is no file named "schedule", then shush checks the  configuration
       directory  for  configuration files and adds them to the current user’s
       crontab(5) file as specified by the included  schedule  parameter  (see
       below).  Files whose names start with the character "#" or end with the
       character "~" are ignored.

OPTIONS

       -h     Display a brief help message.

       -V     Display the version information.   Prefix  with  -v  to  display
              compile time defaults.

       -c dir Specify the directory where configurations are stored.

       -s facility
              Defines the syslog facility to use for logging.

       -S     Disable syslog logging.

       -v     Copy information log messages to the standard output.

       -f     Fast mode:  Any configured randomdelay is ignored.

       -m     Monitor  and  display the command’s standard output and error in
              real time.

       -k     Keep the command’s output log files  instead  of  deleting  them
              upon completion.

       -C     Check the configuration without running any command.

       -H to  Send a sample HTML report to the specified recipient(s).

       -R to  Send a sample enriched report to the specified recipient(s).

       -T to  Send a sample text report to the specified recipient(s).

       -i     Use  crontab(1) to install a new crontab(5) file for the current
              user.  The user must not already have a crontab(5) file.

       -u     Use crontab(1) to update the  current  user’s  crontab(5)  file,
              which must already exist.

       -r     Remove  any entry added by the -u option from the current user’s
              crontab(5).

CONFIGURATION

       shush configuration files consist of a main section, report  section(s)
       and  parameters.  The main section defines global parameters as well as
       defaults for reports.  Each report section begins with the name of  the
       report  between  brackets.   Lines beginning with the character "#" are
       ignored.  Parameters should  be  specified  only  once.   If  specified
       multiple  times,  all  but  the last occurrence will be ignored, unless
       noted otherwise.  Parameters are defined using the following syntax:

              name=value

       or:

              name@hostname=value

       or:

              name%ID=value

       or finally:

              name@hostname%ID=value

       The second and fourth formats will be ignored unless shush  is  running
       on the specified hostname.  The third and fourth formats allow defining
       multiple instances of a single configuration file.  Such  configuration
       files  require  an  instance  ID  to be specified in order to run.  Any
       configuration line using the third or fourth formats will be ignored if
       the  ID  found  on that line does not match the instance ID used to run
       shush.

       The following parameters may appear in the main section:

       command
              The actual command to run.  shush sets two environment variables
              before  running  the  command:  SHUSH_NAME  is  set to name, and
              SHUSH_ID is set to ID.

       config This defaults to the full path of the main  configuration  file.
              The other two configuration file names are obtained by appending
              the ".stdout" and  ".stderr"  suffixes  to  the  value  of  this
              parameter.

       lock   If  set,  this  parameter  instructs shush to obtain a lock file
              before running the command, and defines the actions to  take  in
              case  the  lockfile is held by another process.  The format is a
              comma separated list of actions.   Valid  actions  are:  a  time
              duration  (during which shush should simply wait and keep trying
              to obtain the lockfile), the  string  "abort"  (indicating  that
              shush  should  terminate  immediately  if  the  lockfile already
              exists), the  string  "ignore"  (indicating  that  shush  should
              ignore  an  existing lockfile), the string "loop" (to mark where
              to start again from when all actions have been executed) and the
              string   "notify="   followed  by  mail  addresses  to  which  a
              notification mail should be sent.  Actions are executed  in  the
              order  they  are provided, and shush will wait forever trying to
              obtain the lockfile once all the  actions  have  been  executed,
              unless  the  string  "loop"  is  one  of  defined actions.  Time
              durations may be specified in units of w(eeks), d(ays), h(ours),
              m(inutes)  or s(econds).  If no unit is specified, it is assumed
              to be minutes.

       lockfile
              By default, shush will use a file located in the same  directory
              as the configuration file, and named after the configuration and
              host names.  An alternate filename may be specified  using  this
              parameter.

       lockmsg
              If   set,   this  string  will  be  used  as  subject  for  lock
              notification(s)  mail  messages.   The   default   is   "[%u@%h]
              **PENDING**  %N [%t]".  See the MAIL SUBJECT section for details
              on the format.

       path   shush does not modify the environment, except to  set  the  PATH
              variable if the path parameter is set.

       randomdelay
              If  this  parameter  is set, shush will wait up to the specified
              amount of time before starting the command unless  invoked  with
              the  -f.   Valid  time units are: s(econds), m(inutes), h(ours),
              d(ays), w(eeks).  If no unit is specified, it is assumed  to  be
              minutes.

       schedule
              This  defines  when  to  run  this  command  as a cron job, in a
              crontab(5) compatible format.  Multiple entries may be specified
              using  the  character ";" as separator.  Entries prefixed by the
              character "#" will be skipped.  This parameter is  not  directly
              used  by  shush  to  run  the command, but used by the -i and -u
              options.

       sendmail
              This may be used to override the command used to send mail.

       shell  By default, the Bourne shell sh(1) is used to run  the  command,
              allowing any shell syntax to be used.  An alternate shell may be
              defined using this parameter.

       statedir
              This defines the directory where the status of  shush  is  saved
              and   defaults   to  the  ".state"  directory  under  where  the
              configuration  is  located.   An  error  is  generated  if   the
              directory  does  not  exist  unless  this  option  was  not set.
              Setting this option to an empty string will prevent  shush  from
              saving  its  status.  shlast(1) uses these state files to report
              on running instances of shush as well as previous runs.

       syslog This parameter is only used by the -i and -u options and has  no
              other  effect on shush.  It allows overriding the default syslog
              facility used for logging and defined at compile time.  If  left
              blank, this suppresses the use of syslog.

       timeout
              This  parameter  allows  one to control how long the command may
              run.  It should be a comma separated  list  of  actions.   Valid
              actions  are:  a time duration (during which shush should simply
              wait for the command to terminate), a signal  (either  "SIGNAME"
              or  "-SIGNUMBER")  that  should be sent to the command’s process
              group, a signal (either "=SIGNAME" or "=SIGNUMBER") that  should
              be  sent  to  the  shell  used  to spawn the command, the string
              "loop" (to mark where to start again from when all actions  have
              been  executed)  and  the  string  "notify="  followed  by  mail
              addresses to which a notification mail should be sent.   Actions
              are executed in the order they are provided, and shush will wait
              forever if the command is still running  once  all  the  actions
              have  been  executed  unless the string "loop" is one of defined
              actions.  Time durations may be specified in units  of  w(eeks),
              d(ays),   h(ours),  m(inutes)  or  s(econds).   If  no  unit  is
              specified, it is assumed to be minutes.

       timeoutmsg
              If set,  this  string  will  be  used  as  subject  for  timeout
              notification(s)   mail   messages.    The  default  is  "[%u@%h]
              **TIMEOUT** %N [%t]".  See the MAIL SUBJECT section for  details
              on the format.

       The  following parameters may appear anywhere in the configuration.  If
       specified in the main section, they define defaults settings that  will
       apply  to any report for which the same parameter has not been defined.

       to, cc, bcc
              Where to send the mail report.

       subject
              Subject of the mail report.  See the MAIL  SUBJECT  section  for
              details on the format.

       header Additional  mail  header(s).   Note  that  this parameter may be
              repeated to specify multiple  headers.   However,  only  headers
              from  the report (if specified) or from the main section will be
              used for a given report.

       hostprefix
              By default, specified subjects are prefixed with the  host  name
              between  brackets.   This parameter allows one to customize this
              prefix.  A positive integer indicates how many components of the
              fully  qualified  hostname  should be shown.  A negative integer
              indicates how many trailing components of  the  fully  qualified
              hostname should be trimmed.  The integer zero indicates that the
              prefix should be omitted.  This  parameter  is  ignored  if  the
              "subject" contains any "%" character.

       userprefix
              By  default,  specified  subjects are prefixed with the username
              between brackets.  This parameter allows to disable this prefix.
              Any  non  zero value indicates that the username should be shown
              while zero causes the prefix to be omitted.  This  parameter  is
              ignored if the "subject" contains any "%" character.

       output (previously "stderr")

              This  defines  how  the  commands  standard output and standard
              error are  captured  and  reported  to  the  user:   "errfirst",
              "mixed",   "outfirst".   When  using  "mixed",  the  name.stderr
              configuration  file  is  ignored.   When  using  "errfirst"   or
              "outfirst",  individual reports may use one of the following two
              additional options "outonly" and "erronly".

       format Mail messages sending the output of the command may be  sent  in
              three  different  formats: "text" (the default), "enriched" text
              or "html".

       sizelimit
              By default, the entire output of the command  is  sent  in  mail
              reports.   This  parameter  may be used to limit the size of the
              output included in a report.  Note that the total size  of  mail
              sent  will  be  greater  as  this  limit has no effect upon mail
              headers.  The size can be specified in units of m, k, b, c  (MB,
              KB, Bytes).  If no unit is specified, it is assumed to be KB.  A
              limit of zero indicates that the output should not be truncated.

       if     A  report is only sent if no if condition is specified or if the
              specified if condition is true.  The condition syntax allows for
              the  usual  logical  operators  ("||",  "&&",  "!"),  comparison
              operators  ("==",  "!=",  "<",  "<=",  ">",  ">=")   and   basic
              arithmetic operators ("+", "-").  Aside from counters defined by
              the configuration (see the COMMAND OUTPUT  section  below),  the
              following variables may be used:

              $exit  If  the  command  terminated  normally,  this is its exit
                     code.  Otherwise, it is negative and indicates the signal
                     number  having  caused  the command to terminate (e.g. -1
                     indicates  signal  number  1  caused   the   command   to
                     terminate).

              $size  output size (in bytes), same as "$outsize + $errsize"

              $outsize
                     size (in bytes) of standard output

              $errsize
                     size (in bytes) of standard error

              $lines number of lines output

              $outlines
                     number of standard output lines

              $errlines
                     number of standard error lines

              $runtime
                     command run time (in seconds)

              $utime user time used by the command

              $stime system time used by the command

              $tty   1 if shush is run from a terminal (e.g. interactively), 0
                     otherwise.

MAIL SUBJECTS

       The "lockmsg", "timeoutmsg" and "subject" parameters  may  contain  the
       following tokens which are expanded as described below:

              %%     The "%" character

              %h     The hostname

              %<digit>
                     or "%-<digit>"

                     A  partial  hostname: A positive digit indicates how many
                     components of the fully qualified  hostname  to  keep;  a
                     negative  digit indicates how many trailing components of
                     the fully qualified hostname to trim.

              %i     The instance ID

              %n     The configuration name

              %N     The configuration name and instance ID

              %r     The report name

              %t     The elapsed time.

              %u     The username.

              %U     The userid.

                     If the "%" character is found in the "subject" parameter,
                     then  the  "hostprefix"  and  "userprefix" parameters are
                     ignored.

COMMAND OUTPUT

       After the command terminates,  shush  will  use  the  contents  of  the
       name.stdout and name.stderr files (if they exist) to look at the output
       produced by the command.

       These files follow a simple format.  Each line is composed of a  single
       character (the counter name) followed by a regular expression.

       All  counters  are  initialized  to  0  (zero).  Each line of output is
       matched against these regular expressions until a match is found.  If a
       match  is  found,  the associated counter is incremented by one.  These
       counters may then be used as part of the main configuration, in an "if"
       configuration parameter, allowing the decision to send a mail report to
       be based on how  many  times  certain  regular  expressions  have  been
       matched.

       Finally,  regular  expressions may define sub-expressions which will be
       rendered in bold in mail reports.

       Lines starting with the character "#" are considered to be comments and
       are ignored.  By default, standard regular expressions are used, unless
       the first line  is  "#pcre"  in  which  case  Perl  compatible  regular
       expressions are used.

ENVIRONMENT VARIABLES

       HOME   If  the -c option is not used, shush will look for configuration
              files in $HOME/.shush.

       SHUSH_SENDMAIL
              If defined, this should point to the sendmail(1)  binary.   This
              variable  overrides  the  "sendmail"  configuration  setting and
              should be used with care.

       TMPDIR Directory where temporary files are created.

EXAMPLE

       The following configuration runs "shush  -c  /etc/shush  -u"  daily  at
       9:00, updating the user (root) crontab:

              command=shush -c /etc/shush -u
              schedule=0 9 * * *
              lock=notify=root root-logs,abort
              timeout=5m,loop,notify=root root-logs,15m
              stderr=first
              format=text
              Subject=Crontab Daily Update
              [logs]
              to=root-logs
              [readers]
              if=$exit != 0 || $outlines != 1 || $errsize > 0 || U
              to=root
              format=rich

       The associated configuration for standard output is:
              Oshush: crontab updated\.$
              U^.+$

       and for standard error:
              U^(.+)$

       A  lock  will be set while running the command, and mail sent to "root"
       and "root-logs" if the lock is  held  by  another  process  when  shush
       starts,  in  which  case shush will abort.  A mail will also be sent to
       "root" and "root-logs" if "shush -c /etc/shush -u" runs for more than 5
       minutes, and for every 15 minutes following the first 5 minutes.

       Upon  completion,  the  output  will  always  be  sent  to "root-logs".
       Additionally, the output will be sent to "root" if the condition "$exit
       !=  0  ||  $outlines  !=  1  ||  $errsize  > 0 || U" is true.  For this
       condition to be true, one of the following must be true: the exit  code
       is  non  zero, the command standard output was not a single line, there
       was output on standard error or finally, the counter "U" is  non  zero.
       For  the  counter  "U" to be non zero, there must be output on standard
       output other than the line "shush:  crontab  updated.".   Finally,  any
       line of output produced on the standard error will be displayed in bold
       in mails sent to "root".

SEE ALSO

       crontab(1), pcre(3), regex(3), sendmail(1), sh(1).

AVAILABILITY

       The latest official release of shush is available on the web.  The home
       page is http://web.taranis.org/shush/

AUTHOR

       Christophe Kalt <kalt@taranis.org>

BUGS

       The -C option does not allow specifying an ID.

       For other bugs, send reports to ‘shush-bugs@taranis.org’.

                         $Date: 2007-09-30 23:38:23 $