log_input - run a command, collecting all stdout & stderr to file


Take a command line, run this command as a child process, collection all output into a specified logfile, with timestamps.

When a signal is received, it will be logged. If the signal is a SIGCONT, the logger will check to see how many children are still alive, and log that count. If the signal is a SIGHUP or SIGTERM, the child process will be killed, before log_input itself exits (with whatever exit code the child exited with).

For each line of output received from the child, the log file is checked to see if it would exceed 1Gb. If it would, then the log file is closed, renamed to include a timestamp (of the time of closure), and a new log file with the original name is opened.



If provided, set the exit status to this.

  • The exit status of the logged process, or undef if it has not yet finished.



If provided, set the log file (handle) to this.

  • The file handle of the log file.



If provided, set the log file (name) to this.

  • The file name of the log file.


log_input [options] <logfile> <command>

  option:          Value     Default   Unit   Meaning
  -h|--nohup       boolean   false            Ignore SIGHUP in child
  -m|--maxsize     int       1Gb              Maximum log size in bytes
  -A|--noarchive   boolean   false            Don't archive old logs
  --preserve-lines int       128              Keep n lines if not archiving(-A)
  --help                                      Produce summary help on stdout
  --longhelp                                  Produce long help on stdout
  --man                                       Produce full man page on stdout

logfile is a single shell word. command may be multiple shell words.


Options come in short (single-character) and/or long forms. Short options are preceded by a single dash (-x), whilst long options are preceded by a double-dash (--option). Long options may be abbreviated to the minimal distinct prefix. Single char options may be bundled (-v -a -x == -vax), values may be interspersed (-v 1 -a 2 -x 3 == -v1a2x3). Options taking string values will assume that anything immediately following is a string value, even if the string is optional and/or the "value" could be interpreted as another option (if -v takes a string, -vax will give the value "ax" to the option -v). Options which are boolean must use the long form to negate, prefixed by "no_" (--foo may be negated by --no_foo).

log_input will only see options presented prior to the specification of the logfile. Logfiles with names beginning with '-' are not usable. Any options presented after the logfile will be considered as part of the command to run.


Attempt to ignore the NOHUP signal in the logger and child; this is useful if you may want to detach the controlling terminal, for example. See nohup.

Note that we cannot promise that the child will ignore it, unfortunately. If the child installs its own HUP handler, we can not affect it.


The maximum permissable size for a log file. Once this size is reached, the logfile will be moved to a timestamped name, and a new one opened. The size is given in bytes.


Don't create archive files when the log gets cleaned (due to exceeding the maximum size). Instead, just restart the log file (preserving the last n lines, where n is preserve-lines)


The number of log lines to preserve when rotating but not archiving logs. Note that up to twice this number of lines are kept in memory whilst running, so a larger number increases the memory footprint. Also be careful that the total size of the lines does not itself exceed the maxsize, to avoid unpredictable behaviour. Defaults to 128.


Print a brief help message and exits.


Print a longer help message and exits.


Prints the manual page and exits.


Martyn J. Pearce

 Copyright (c) 2001 Martyn J. Pearce.  This program is free software; you can
 redistribute it and/or modify it under the same terms as Perl itself.


3 POD Errors

The following errors were encountered while parsing the POD:

Around line 137:

Expected text after =item, not a bullet

Around line 171:

Expected text after =item, not a bullet

Around line 208:

Expected text after =item, not a bullet