[PATCH] Add 'log' argument to 'console' stanza allowing job output to be captured.

James Hunt james.hunt at ubuntu.com
Thu Oct 27 16:36:49 UTC 2011


Hi All,

This patch adds a 'log' argument to the 'console' stanza which allows all job output to be captured
and persisted to disk.

Note that this patch makes "console log" the new default (the old default being "console none"). The
rationale for this change being that if your jobs do produce output, you generally want to see it
(more than likely it will contain details of errors). If you do not want this behaviour, you will
need to modify your job configuration files to specify explicitly "console none". This is a change
in behaviour. This feature is available to user jobs as well [*].

Code:

  lp:~jamesodhunt/upstart/job-logging

Kind regards,

James.

[*] - Note that I have occasionally seen problems where the newly-expanded
'util/tests/test_user_sessions.sh' script complains that a particular test job is not producing an
output file. I am investigating this currently but am still keen for comments on the patch.

ChangeLog:

  Introduction of 'log' argument to 'console' stanza allowing
  job output to be captured.

  * contrib/vim/syntax/upstart.vim: Added 'log' and missing
    'none'.
  * init/Makefile.am: Added log.c, log.h and test_log.c
  * init/job.c: job_new(): Initialize log.
  * init/job.h: Add Log pointer to Job.
  * init/job_class.c: XXX: behaviour change: Default for 'console'
    is now CONSOLE_LOG rather than CONSOLE_NONE.
    Rationale is that if a job does produce output, you want to see
    it since the chances are it will contain useful error details.
  * init/job_class.h: Added CONSOLE_LOG to ConsoleType and updated
    documentation for ConsoleType.
  * init/job_process.c:
    - job_process_run(): Updated to reflect new parameter for
      job_process_spawn().
    - job_process_spawn(): Now accepts a Job rather than a
      JobClass to allow job->log and class->console to be handled
      appropriately. Now creates pty master and slave fds for
      console logging.
    - job_process_error_read(): Added entries for:
      - JOB_PROCESS_ERROR_OPENPT_MASTER
      - JOB_PROCESS_ERROR_OPENPT_UNLOCKPT
      - JOB_PROCESS_ERROR_PTSNAME
      - JOB_PROCESS_ERROR_OPENPT_SLAVE
    - job_process_log_path(): New function that returns full path to log
      file for specified Job.
  * init/job_process.h:
    - Updated JobProcessErrorType with new entries:
      - JOB_PROCESS_ERROR_OPENPT_MASTER
      - JOB_PROCESS_ERROR_OPENPT_UNLOCKPT
      - JOB_PROCESS_ERROR_PTSNAME
      - JOB_PROCESS_ERROR_OPENPT_SLAVE
    - job_process_spawn(): Updated prototype.
    - job_process_log_path(): Added prototype.
  * init/main.c:
    - handle_logdir(): New function for overriding log directory.
    - Added '--logdir' to options.
  * init/man/init.5:
    - Update and restructure of section on 'console' stanza.
    - Added a FILES section.
  * init/man/init.8: Updated with details of new '--logdir' option.
  * init/parse_job.c: stanza_console(): Updated for "log".
  * init/paths.h: Added defines for JOB_LOGDIR, LOGDIR_ENV, XDG_CACHE_HOME
    and USER_JOB_LOGDIR.
  * init/session.c: Added missing function headers. New functions:
    session_user_home() and session_user_group().
  * init/session.h: Added prototypes for session_user_home() and
    session_user_group().
  * init/system.c: system_setup_console(): Update for CONSOLE_LOG.
  * init/test_conf.c:
    - TEST_FORCE_WATCH_UPDATE(): Removed debug.
    - test_select_job(): Added variable attributes to keep gcc 4.6 happy.
  * init/test_event.c: Explicitly set console type to CONSOLE_NONE to
    retain behaviour of existing tests.
  * init/test_job.c:
    - test_job_new(): Ensure log object not created on Job instantiation.
    - test_change_state(): Explicitly set console type to CONSOLE_NONE to
      retain behaviour of existing tests.
  * init/test_job_class.c:
    - test_new(): Ensure console type now defaults to CONSOLE_LOG.
    - Explicitly set console type to CONSOLE_NONE to retain behaviour of
      existing tests.
  * init/test_job_process.c:
    - child(): New child_tests added for TEST_OUTPUT and TEST_SIGNALS.
    - get_available_pty_count(): New function.
    - Explicitly set console type to CONSOLE_NONE to retain behaviour of
      existing tests.
    - test_run(): Added new tests for CONSOLE_LOG.
    - test_spawn(): Added new tests for CONSOLE_LOG.
    - test_log_path(): New function.
    - test_handler(): Added UPSTART_LOGDIR support to
    - main():
      - Update to allow number of forks to be specified when run as a child
        process.
      - Added call to test_log_path().
      - initialize various subsystems since before, functions run from
        main() had to be run in the order specified and exactly as listed
       (certain tests relied on previous tests initializing a subsystem
       which gives unexpected results and thus confusing behaviour
       if the order of tests is changed).
  * util/tests/test_user_sessions.sh: Added tests for job logging.

--
James Hunt
____________________________________
http://upstart.ubuntu.com/cookbook
http://upstart.ubuntu.com/cookbook/upstart_cookbook.pdf



More information about the upstart-devel mailing list