[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