--- upstart-1.8.orig/ChangeLog +++ upstart-1.8/ChangeLog @@ -1,3 +1,287 @@ +2013-06-05 James Hunt + + * init/tests/data/upstart-1.8+apparmor.json: New test data file. + * init/tests/data/upstart-1.8+full_serialisation-apparmor.json: + New test data file. + * init/tests/data/upstart-1.8+full_serialisation+apparmor.json: + New test data file. + * init/tests/test_state.c: + - test_upgrade(): Re-initialise lists and hashes as a convenience to + the tests. + - test_upstart_with_apparmor_upgrade(): New test to ensure Upstart can + parse the current 1.8 format JSON with the addition of the AppArmor + serialisation (but crucially *without* the full serialisation data + (EventOperator, etc). + - test_upstart_full_serialise_without_apparmor_upgrade(): New test to + ensure Upstart can parse the current 1.8 format JSON with the + addition of the full serialisation data (EventOperator, etc), + but _without_ the AppArmor serialisation. + - test_upstart_full_serialise_with_apparmor_upgrade(): New test to + ensure Upstart can parse the current 1.8 format JSON with the + addition of the full serialisation data (EventOperator, etc), + and the AppArmor serialisation. + * init/state.c: state_from_string(): Check if ConfSources + exist in the serialisation data to allow distinction between + ConfSources not present and failing to deserialise them. + +2013-06-04 James Hunt + + * init/event.c: event_deserialise(): Revert to checking JSON for + blockers to avoid reliance on JSON serialisation data format version. + * init/event_operator.h: Fix misplacement of NIH_END_EXTERN. + * init/state.c: Remove serialisation version code since the autoconf + approach of detecting the format of the JSON is safer. + * init/state.h: Remove STATE_VERSION. + +2013-05-13 James Hunt + + * init/state.c: stateful_reexec(): Specify all values for array + initialiser. + +2013-05-10 James Hunt + + Revert to not supporting deserialisation of JobClasses with associated + user/chroot sessions to avoid behavioural change for now. + + * init/job_class.c: + - job_class_deserialise(): Revert to failing if associated session is + non-NULL. + - job_class_deserialise_all(): Revert to ignoring failure to + deserialise a JobClass iff it has a non-NULL associated session. + * init/state.c: + - state_to_string(): Provide some diagnostics if serialisation fails. + - state_from_string(): Provide some diagnostics if deserialisation fails. + - state_deserialise_resolve_deps(): Ignore failure to lookup JobClass + iff it has an associated user/chroot session. + - state_deserialise_blocking(): Revert to ignoring failure to + deserialise a Blocked object that is associated with a Job whose + JobClass has a non-NULL session. + * init/tests/test_state.c: test_blocking(): Revert test to assert that + blocked job with non-NULL session is ignored. + +2013-05-09 James Hunt + + * init/job.c: job_serialise(): Corrected logic for handling 'stop on' + condition. + * init/job_class.c: job_class_deserialise(): Only check type after JSON + queried (thanks Coverity). + +2013-05-08 James Hunt + + * init/Makefile.am: Link test_util to test_event_operator. + * init/conf.c: conf_source_deserialise_all(): Assert conf_sources is + empty. + * init/control.h: control_get_job(): Use job_class_get_registered() + rather than redundant job_class_find(). + * init/event_operator.c: + - Typos and formatting. + - event_operator_serialise(): Conditionally encode name and env. + - event_operator_deserialise(): Treat env as a string array, not an + environ array to ensure values are not discarded unless they contain '='. + * init/job.c: + - job_deserialise(): Check JSON type for 'stop on' prior to attempting value extraction. + - job_find(): + - Make job_class const. + - Use job_class_get_registered() rather than job_class_find(). + * init/job_class.c: + - job_class_get_registered(): Rework. + - job_class_add_safe(): Re-add since required to support old + serialisation formats that do not encode ConfSource and ConfFile + objects. + - job_class_deserialise(): + - Take care to only associate ConfFile with JobClass if JSON encodes + ConfFile objects. + - Check JSON type for 'start/stop on' prior to attempting value extraction. + - job_class_find(): Remove (redundant due to job_class_get_registered()). + * init/state.c: + - Set serialisation_version to an invalid value to detect if it was + never set (to handle old serialisation formats). + - state_from_string(): + - Make failure to read header and ConfSources warnings only, to support old + serialisation formats that do not encode this information. + - state_deserialise_blocked(): Fix bug where event blocker was being + incremented twice. Now, just assert it is set. + - state_deserialise_blocking(): Failure to deserialise a Blocked object + is no longer ignored since sessions are supported. + * init/state.h: STATE_VERSION history and notes. + * init/tests/test_conf.c: Replace calls to job_class_find() with + job_class_get_registered(). + * init/tests/test_event_operator.c: + - test_operator_serialisation(): Check both the original string + serialisation format and the new full EventOperator serialisation. + type. + * init/tests/test_job.c: + - test_deserialise_ptrace(): + - Comments and more checks. + - Create ConfSource, ConfFile and JobClass manually. + - Call job_class_consider() as we now have a backing ConfFile. + - Wait for childs child. + * init/tests/test_state.c: + - Simplify TestDataFile. + - Ensure files passed to conf_file_new() provide expected suffix. + - job_class_diff(): Add event_operator_diff() call. + - conf_source_diff(): New function. + - conf_file_diff(): New function. + - test_blocking(): + - Extra checks. + - Expect ConfFiles to be recreated on re-exec. + - test_upgrade(): Check environment is clean before running the next test. + - test_upstart1_8_upgrade(): New Upstart-1.8 serialisation format test. + - conf_source_from_path(): New utility function. + * init/tests/test_util.c: + - event_operator_diff(): New function. + - session_from_chroot(): New function. + * init/tests/data/upstart-1.8.json: New test file. + +2013-05-08 James Hunt + + * init/conf.c: + - conf_source_serialise_all(): Make failures fatal. + * init/event_operator.c: event_operator_collapse(): Unhide but mark as + unused (it's still used by the tests). + * init/job.c: + - job_serialise(): Remove unused variable. + - job_deserialise(): Check the type of the start/stop on condition in + the json, not the json passed to the function. + * init/job_class.c: job_class_deserialise(): Check the type of the + start/stop on condition in the json, not the json passed to the + function. + * init/state.c: + - Comments. + - state_read_header(): Extract header from JSON before checking for + serialisation version. + +2013-05-02 James Hunt + + * init/event.c: event_deserialise(): Only set blockers if EventOperators + are serialised. + * init/event_operator.c: event_operator_collapse(): Now only needed for + DEBUG. + * init/job.c: + - job_deserialise(): Support old string format for 'stop_on' + EventOperator as well as new array format. + * init/job_class.c: + * init/state.c: Create a meta-header containing a serialisation version + number. + +2013-05-02 James Hunt + + * init/conf.c: + - New serialisation and support functions: + - conf_source_serialise() + - conf_source_serialise_all() + - conf_source_deserialise() + - conf_source_deserialise_all() + - conf_source_type_enum_to_str() + - conf_source_type_str_to_enum() + - conf_file_serialise() + - conf_file_deserialise() + - conf_file_deserialise_all() + - conf_source_get_index() + - conf_file_find() + - debug_show_event_operator() + - debug_show_event_operators() + * init/event_operator.c: + - event_deserialise(): + - Fix leaked env array. + - Deserialise blockers count now EventOperators are also serialised. + - event_operator_type_enum_to_str() + - event_operator_type_str_to_enum() + - event_operator_serialise() + - event_operator_serialise_all() + - event_operator_deserialise() + - event_operator_deserialise_all() + * init/job_class.c: + - job_class_add_safe(): Remove as no longer required. + - job_class_get(): Must call job_class_init(). + - job_class_serialise(): + - Remove error case if chroot session specified now that ConfSources + are serialised. + - Serialise start/stop on fully (as EventOperators) rather than just the original + string condition (LP: #1103881). + - job_class_deserialise(): + - Remove error case if chroot session specified now that ConfSources + are serialised. + - Associate the JobClass with its ConfFile. + - job_class_serialise_all(): + - Comments. + - Failure to serialise a JobClass is now a hard error since we now + serialise all JobClasses. + - job_class_deserialise(): + - Deserialise start/stop on conditions as EventOperators rather than as a + string condition. + - Since ConfFiles are now serialised, call job_class_consider() + rather than job_class_add_safe(). + - job_class_deserialise_all(): + - Failure to deserialise a JobClass is now a hard error since we now + serialise all JobClasses. + - job_class_get_index(): New function. + * init/state.c: + - state_to_string(): Serialise ConfSources and ConfFiles. + - state_from_string(): Deserialise ConfSources and ConfFiles. + - state_deserialise_resolve_deps(): Allow chroot sessions to be + handled now we serialise ConfSources and ConfFiles. + +2013-04-30 James Hunt + + * init/job.c: job_serialise_all(): Really serialise all JobClasses, + * init/main.c: Add 'write-state-file' command-line option. + regardless of whether they have associated Jobs. + * init/paths.h: Added STATE_FILE_ENV. + * init/state.c: + - state_read_objects(): Write state file if 'write-state-file' + specified or STATE_FILE_ENV set. + - event_deserialise(): + - Preserve the pre-reexec blockers count until JobClasses + are deserialised and reverse-dependencies resolved. + - Fix incorrect calls for failed and blockers Event attributes. + * init/state.h: Comments. + * init/tests/test_state.c: + - test_job_class_serialise(): Ensure that all JobClasses get + serialised, regardless of whether they have any associated + Jobs. + - test_event_serialise(): New "with failed" test. + * init/event.c: event_deserialise(): Don't deserialise Event->blockers - + there is no point until we serialise EventOperators. + +2013-04-29 James Hunt + + * init/conf.c: + - conf_reload(): Explanation of how reload works. + - conf_reload_path(): Defer destruction of original ConfFile until + newly-loaded .conf file has a chance to reference any events its + 'start on' condition requires (LP: 1124384). + - debug_show_jobs(): Return if no instances. + - debug_show_events(): New function. + * init/event.c: Comments. + * init/job.c: Comment. + * init/job_class.c: + - job_class_get_registered(): New function resulting from refactor of + job_class_consider() and job_class_reconsider(). + - job_class_consider(): + - Use job_class_get_registered(). + - Call job_class_event_block() to avoid premature event destruction. + - job_class_reconsider(): Use job_class_get_registered(). + - job_class_event_block(): New function to increase reference count + for events new JobClass specifies in its 'start on' condition that + old JobClass has also referenced (second part of LP: #1124384). + * init/tests/test_conf.c: + - test_source_reload(): New tests: + - "ensure reload does not destroy a blocked event used by another job" + - "ensure .conf reload causes waiting job to run when 'start on' matches" + * init/tests/test_conf.h: TEST_ENSURE_CLEAN_ENV(): Check + nih_child_watches too. + +2013-03-25 James Hunt + + * extra/man/socket-event.7: Correct section number. + * init/man/init.5: Correct section number. + +2013-03-22 James Hunt + + * scripts/Makefile.am: Added missing entry for + man/upstart-monitor.8. + 2013-03-22 James Hunt * NEWS: Release 1.8 --- upstart-1.8.orig/configure.ac +++ upstart-1.8/configure.ac @@ -1,14 +1,14 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.61) -AC_INIT([upstart], [1.8], [upstart-devel@lists.ubuntu.com]) +AC_INIT([upstart], [1.8-ubuntu-full-serialization], [upstart-devel@lists.ubuntu.com]) NIH_COPYRIGHT([[Copyright © 2013 Scott James Remnant, Canonical Ltd.]]) AC_CONFIG_SRCDIR([init/main.c]) AC_CONFIG_MACRO_DIR([m4]) AC_GNU_SOURCE -AM_INIT_AUTOMAKE([1.10 gnu nostdinc check-news color-tests silent-rules]) +AM_INIT_AUTOMAKE([1.10 gnu nostdinc check-news color-tests silent-rules serial-tests]) AM_SILENT_RULES([yes]) AM_MAINTAINER_MODE([enable]) @@ -52,6 +52,15 @@ AM_CONDITIONAL([HAVE_UDEV], [test "$have_udev" = yes]) +AC_ARG_ENABLE(selinux, + AS_HELP_STRING([--enable-selinux], [enable SELinux support]), + [], [enable_selinux=no]) + +if test "x$enable_selinux" = "xyes" ; then + PKG_CHECK_MODULES(SELINUX, [libselinux]) + AC_DEFINE(HAVE_SELINUX, 1, [Define if we have SELinux]) +fi + # Checks for header files. AC_CHECK_HEADERS([valgrind/valgrind.h, sys/prctl.h]) --- upstart-1.8.orig/extra/man/socket-event.7 +++ upstart-1.8/extra/man/socket-event.7 @@ -1,4 +1,4 @@ -.TH socket\-event 8 2011-03-08 upstart +.TH socket\-event 7 2011-03-08 upstart .\" .SH NAME socket \- event signalling that a socket connection has been made --- upstart-1.8.orig/conf/rc.conf +++ upstart-1.8/conf/rc.conf @@ -6,13 +6,18 @@ description "System V runlevel compatibility" author "Scott James Remnant " +emits deconfiguring-networking +emits unmounted-remote-filesystems + start on runlevel [0123456] stop on runlevel [!$RUNLEVEL] export RUNLEVEL export PREVLEVEL +console output +env INIT_VERBOSE + task -console output exec /etc/init.d/rc $RUNLEVEL --- upstart-1.8.orig/conf/rc-sysinit.conf +++ upstart-1.8/conf/rc-sysinit.conf @@ -6,7 +6,7 @@ description "System V initialisation compatibility" author "Scott James Remnant " -start on startup +start on (filesystem and static-network-up) or failsafe-boot stop on runlevel # Default runlevel, this may be overriden on the kernel command-line @@ -23,9 +23,11 @@ env RUNLEVEL= env PREVLEVEL= +console output +env INIT_VERBOSE + task -console owner script # Check for default runlevel in /etc/inittab if [ -r /etc/inittab ] --- upstart-1.8.orig/init/conf.h +++ upstart-1.8/init/conf.h @@ -1,6 +1,6 @@ /* upstart * - * Copyright © 2010,2011 Canonical Ltd. + * Copyright 2010,2011 Canonical Ltd. * Author: Scott James Remnant . * * This program is free software; you can redistribute it and/or modify @@ -128,6 +128,50 @@ JobClass * conf_select_job (const char *name, const Session *session); +const char * +conf_source_type_enum_to_str (ConfSourceType type) + __attribute__ ((warn_unused_result)); + +ConfSourceType +conf_source_type_str_to_enum (const char *type) + __attribute__ ((warn_unused_result)); + +json_object * +conf_source_serialise (const ConfSource *source) + __attribute__ ((warn_unused_result)); + +json_object * +conf_source_serialise_all (void) + __attribute__ ((warn_unused_result)); + +ConfSource * +conf_source_deserialise (void *parent, json_object *json) + __attribute__ ((warn_unused_result)); + +int +conf_source_deserialise_all (json_object *json) + __attribute__ ((warn_unused_result)); + +json_object * +conf_file_serialise (const ConfFile *file) + __attribute__ ((warn_unused_result)); + +ConfFile * +conf_file_deserialise (ConfSource *source, json_object *json) + __attribute__ ((warn_unused_result)); + +int +conf_file_deserialise_all (ConfSource *source, json_object *json) + __attribute__ ((warn_unused_result)); + +ssize_t +conf_source_get_index (const ConfSource *source) + __attribute__ ((warn_unused_result)); + +ConfFile * +conf_file_find (const char *name, const Session *session) + __attribute__ ((warn_unused_result)); + #ifdef DEBUG /* used for debugging only */ @@ -160,6 +204,10 @@ __attribute__ ((unused)); void +debug_show_events (void) + __attribute__ ((unused)); + +void debug_show_conf_file(const ConfFile *file) __attribute__ ((unused)); @@ -171,6 +219,14 @@ debug_show_conf_sources(void) __attribute__ ((unused)); +void +debug_show_event_operator (EventOperator *oper) + __attribute__ ((unused)); + +void +debug_show_event_operators (EventOperator *root) + __attribute__ ((unused)); + #endif NIH_END_EXTERN --- upstart-1.8.orig/init/state.h +++ upstart-1.8/init/state.h @@ -4,7 +4,7 @@ * * - XXX: Deferred work: * - handling of Upstart-in-initramfs - for this to work, it would be - * necessary to serialise ConfSources along with the following: + * necessary to serialise ConfSources (done) along with the following: * * (1) inode number of source->path * (2) inode number of '/' @@ -27,12 +27,6 @@ * Note too that (2)+(3) are the only reliable method for Upstart to * detect that is *has* changed filesystem context. * - * - Since ConfSources are NOT serialised, it is currently not possible - * to support chroot jobs (because the only ConfSource - * objects created are those at startup (for '/etc/init/'): any - * pre-existing ConfSources with non-NULL Session objects will - * be ignored). - * * - parent/child timeout handling: we won't support down-grading initially. * * - dbus-connections: only be re-exec'ing post-boot so bridges won't @@ -371,7 +365,7 @@ * * Name of file that is written below the job log directory if the * newly re-exec'ed init instance failed to understand the JSON sent to - * it by the old instance. + * it by the old instance (or if requested by STATE_FILE_ENV). * * This could happen for example if the old instance generated invalid * JSON, or JSON in an unexected format. @@ -1226,6 +1220,9 @@ struct rlimit *state_rlimit_deserialise (json_object *json) __attribute__ ((warn_unused_result)); +int state_get_version (void) + __attribute__ ((warn_unused_result)); + extern char **args_copy; extern int restart; --- upstart-1.8.orig/init/job.h +++ upstart-1.8/init/job.h @@ -221,8 +221,8 @@ Job * job_find (const Session *session, JobClass *class, - char *job_class, - const char *job_name) + const char *job_class, + const char *job_name) __attribute__ ((warn_unused_result)); NIH_END_EXTERN --- upstart-1.8.orig/init/main.c +++ upstart-1.8/init/main.c @@ -21,7 +21,6 @@ # include #endif /* HAVE_CONFIG_H */ - #include #include #include @@ -39,6 +38,7 @@ #include #include +#include #include #include #include @@ -46,6 +46,10 @@ #include #include +#ifdef HAVE_SELINUX +#include +#endif + #include #include @@ -126,6 +130,7 @@ extern int disable_job_logging; extern int use_session_bus; extern int default_console; +extern int write_state_file; extern char *log_dir; @@ -173,6 +178,9 @@ { 0, "user", N_("start in user mode (as used for user sessions)"), NULL, NULL, &user_mode, NULL }, + { 0, "write-state-file", N_("attempt to write state file on every re-exec"), + NULL, NULL, &write_state_file, NULL }, + /* Ignore invalid options */ { '-', "--", NULL, NULL, NULL, NULL, NULL }, @@ -187,6 +195,25 @@ char **args = NULL; char **dirs = NULL; int ret; +#ifdef HAVE_SELINUX + int enforce = 0; + + if (getenv ("SELINUX_INIT") == NULL) { + putenv ("SELINUX_INIT=YES"); + if (selinux_init_load_policy (&enforce) == 0 ) { + execv (argv[0], argv); + } else { + if (enforce > 0) { + /* SELinux in enforcing mode but load_policy + * failed. At this point, we probably can't + * open /dev/console, so log() won't work. + */ + fprintf (stderr, "Unable to load SELinux Policy. Machine is in enforcing mode. Halting now.\n"); + exit (1); + } + } + } +#endif /* HAVE_SELINUX */ args_copy = NIH_MUST (nih_str_array_copy (NULL, NULL, argv)); @@ -316,23 +343,16 @@ * resetting it to sane defaults unless we're inheriting from another * init process which we know left it in a sane state. */ - if (system_setup_console (CONSOLE_OUTPUT, (! restart)) < 0) { + if (system_setup_console (CONSOLE_NONE, (! restart)) < 0) { NihError *err; err = nih_error_get (); - nih_warn ("%s: %s", _("Unable to initialize console, will try /dev/null"), - err->message); + nih_fatal ("%s: %s", _("Unable to initialize console as /dev/null"), + err->message); nih_free (err); - if (system_setup_console (CONSOLE_NONE, FALSE) < 0) { - err = nih_error_get (); - nih_fatal ("%s: %s", _("Unable to initialize console as /dev/null"), - err->message); - nih_free (err); - - exit (1); - } + exit (1); } /* Set the PATH environment variable */ @@ -606,6 +626,16 @@ * init daemon that exec'd us */ if (! restart) { + DIR *piddir; + + /* Look in well-known locations for pid files. + * + * Try /run (the newer) location first, but fall back to + * the original location for older systems. + */ + const char * const pid_paths[] = { "/run/initramfs/", "/dev/.initramfs/", NULL }; + const char * const *pid_path; + if (disable_startup_event) { nih_debug ("Startup event disabled"); } else { @@ -614,6 +644,68 @@ ? initial_event : STARTUP_EVENT, NULL)); + } + + for (pid_path = pid_paths; pid_path && *pid_path; pid_path++) { + struct dirent *ent; + + /* Total hack, look for .pid files in known + * locations - if there's a job config for them pretend + * that we started it and it has that pid. + */ + piddir = opendir (*pid_path); + if (! piddir) + continue; + + while ((ent = readdir (piddir)) != NULL) { + char path[PATH_MAX]; + char * ptr; + FILE * pidfile; + pid_t pid; + JobClass *class; + Job * job; + + if (ent->d_name[0] == '.') + continue; + + strcpy (path, *pid_path); + strcat (path, ent->d_name); + + ptr = strrchr (ent->d_name, '.'); + if ((! ptr) || strcmp (ptr, ".pid")) + continue; + + *ptr = '\0'; + pidfile = fopen (path, "r"); + if (! pidfile) + continue; + + pid = -1; + if (fscanf (pidfile, "%d", &pid)) + ; + fclose (pidfile); + + if ((pid < 0) || (kill (pid, 0) < 0)) + continue; + + class = (JobClass *)nih_hash_lookup (job_classes, ent->d_name); + if (! class) + continue; + if (! class->process[PROCESS_MAIN]) + continue; + if (strlen (class->instance)) + continue; + + job = NIH_MUST (job_new (class, "")); + job->goal = JOB_START; + job->state = JOB_RUNNING; + job->pid[PROCESS_MAIN] = pid; + + nih_debug ("%s inherited from initramfs with pid %d", class->name, pid); + } + + closedir (piddir); + break; } } else { --- upstart-1.8.orig/init/paths.h +++ upstart-1.8/init/paths.h @@ -97,6 +97,15 @@ #endif /** + * STATE_FILE_ENV: + * + * If set, write STATE_FILE on any re-exec. + **/ +#ifndef STATE_FILE_ENV +#define STATE_FILE_ENV "UPSTART_WRITE_STATEFILE" +#endif + +/** * INIT_XDG_SUBDIR: * * This is the name of the sub folder we will use when constructing --- upstart-1.8.orig/init/job_class.c +++ upstart-1.8/init/job_class.c @@ -2,7 +2,7 @@ * * job_class.c - job class definition handling * - * Copyright © 2011 Canonical Ltd. + * Copyright 2011 Canonical Ltd. * Author: Scott James Remnant . * * This program is free software; you can redistribute it and/or modify @@ -369,6 +369,35 @@ return NULL; } +/** + * job_class_get_registered: + * + * @name: name of JobClass to search for, + * @session: Session of @class. + * + * Determine the currently registered JobClass with name @name for + * session @session. + * + * Returns: JobClass or NULL if no JobClass with name @name and + * session @session is registered. + **/ +JobClass * +job_class_get_registered (const char *name, const Session *session) +{ + JobClass *registered = NULL; + + nih_assert (name); + + job_class_init (); + + /* If we found an entry, ensure we only consider the appropriate session */ + do { + registered = (JobClass *)nih_hash_search (job_classes, + name, registered ? ®istered->entry : NULL); + } while (registered && registered->session != session); + + return registered; +} /** * job_class_consider: @@ -383,7 +412,8 @@ int job_class_consider (JobClass *class) { - JobClass *registered = NULL, *best = NULL; + JobClass *registered = NULL; + JobClass *best = NULL; nih_assert (class != NULL); @@ -393,16 +423,19 @@ nih_assert (best != NULL); nih_assert (best->session == class->session); - registered = (JobClass *)nih_hash_search (job_classes, class->name, NULL); - - /* If we found an entry, ensure we only consider the appropriate session */ - while (registered && registered->session != class->session) - registered = (JobClass *)nih_hash_search (job_classes, class->name, ®istered->entry); + registered = job_class_get_registered (class->name, class->session); if (registered != best) { - if (registered) - if (! job_class_remove (registered, class->session)) + if (registered) { + job_class_event_block (NULL, registered, best); + + if (! job_class_remove (registered, class->session)) { + /* Couldn't deregister, so undo */ + if (best->start_on) + event_operator_reset (best->start_on); return FALSE; + } + } job_class_add (best); } @@ -426,7 +459,8 @@ int job_class_reconsider (JobClass *class) { - JobClass *registered = NULL, *best = NULL; + JobClass *registered = NULL; + JobClass *best = NULL; nih_assert (class != NULL); @@ -434,11 +468,7 @@ best = conf_select_job (class->name, class->session); - registered = (JobClass *)nih_hash_search (job_classes, class->name, NULL); - - /* If we found an entry, ensure we only consider the appropriate session */ - while (registered && registered->session != class->session) - registered = (JobClass *)nih_hash_search (job_classes, class->name, ®istered->entry); + registered = job_class_get_registered (class->name, class->session); if (registered == class) { if (class != best) { @@ -457,6 +487,80 @@ } /** + * job_class_event_block: + * + * @parent: parent object for list, + * @old: original JobClass currently registered in job_classes, + * @new: new "best" JobClass that is not yet present in job_classes. + * + * Compare @old and @new start on EventOperator trees looking for + * matching events that occur in both (_and_ which implicitly still exist + * in the global events list). Events that satisfy these criteria will have + * their reference count elevated to allow @new to replace @old in job_classes + * without the destruction of @old freeing the events in question. + * + * Note that the reference count never needs to be decremented back + * again since this function effectively passes "ownership" of the event + * block from @old to @new, since @old will be replaced by @new but @new + * should replicate the EventOperator state of @old. + **/ +void +job_class_event_block (void *parent, JobClass *old, JobClass *new) +{ + EventOperator *old_root; + EventOperator *new_root; + + if (! old || ! new) + return; + + old_root = old->start_on; + new_root = new->start_on; + + /* If either @old or @new are NULL, or have no start_on + * condition, there is no need to modify any events. + */ + if (! old_root || ! new_root) + return; + + /* The old JobClass has associated instances meaning it + * will not be possible for job_class_remove() to replace it, so + * we don't need to manipulate any event reference counts. + */ + NIH_HASH_FOREACH (old->instances, iter) + return; + + NIH_TREE_FOREACH_POST (&old_root->node, iter) { + EventOperator *old_oper = (EventOperator *)iter; + Event *event; + + if (old_oper->type != EVENT_MATCH) + continue; + + /* Ignore nodes that are not blocking events */ + if (! old_oper->event) + continue; + + /* Since the JobClass is blocking an event, + * that event must be valid. + */ + event = old_oper->event; + + NIH_TREE_FOREACH_POST (&new_root->node, niter) { + EventOperator *new_oper = (EventOperator *)niter; + + if (new_oper->type != EVENT_MATCH) + continue; + + /* ignore the return - we just want to ensure + * that any events in @new that match those in + * @old have identical nodes. + */ + (void)event_operator_handle (new_oper, event, NULL); + } + } +} + +/** * job_class_add: * @class: new class to select. * @@ -491,24 +595,21 @@ void job_class_add_safe (JobClass *class) { - JobClass *existing = NULL; + JobClass *registered = NULL; nih_assert (class); nih_assert (class->name); control_init (); - /* Ensure no existing class exists for the same session */ - do { - existing = (JobClass *)nih_hash_search (job_classes, - class->name, existing ? &existing->entry : NULL); - } while (existing && existing->session != class->session); + registered = job_class_get_registered (class->name, class->session); - nih_assert (! existing); + nih_assert (! registered); job_class_add (class); } + /** * job_class_remove: * @class: class to remove, @@ -1284,6 +1385,8 @@ nih_assert (name); + job_class_init (); + do { class = (JobClass *)nih_hash_search (job_classes, name, prev); if (! class) @@ -1708,8 +1811,8 @@ json_object *json_normalexit; json_object *json_limits; json_object *json_jobs; - nih_local char *start_on = NULL; - nih_local char *stop_on = NULL; + json_object *json_start_on; + json_object *json_stop_on; int session_index; nih_assert (class); @@ -1719,15 +1822,6 @@ if (! json) return NULL; - /* XXX: chroot jobs are not currently supported - * due to ConfSources not currently being serialised. - */ - if (class->session) { - nih_info ("WARNING: serialisation of chroot " - "sessions not currently supported"); - goto error; - } - session_index = session_get_index (class->session); if (session_index < 0) goto error; @@ -1772,21 +1866,19 @@ json_object_object_add (json, "export", json_export); if (class->start_on) { - start_on = event_operator_collapse (class->start_on); - if (! start_on) + json_start_on = event_operator_serialise_all (class->start_on); + if (! json_start_on) goto error; - if (! state_set_json_string_var (json, "start_on", start_on)) - goto error; + json_object_object_add (json, "start_on", json_start_on); } if (class->stop_on) { - stop_on = event_operator_collapse (class->stop_on); - if (! stop_on) + json_stop_on = event_operator_serialise_all (class->stop_on); + if (! json_stop_on) goto error; - if (! state_set_json_string_var (json, "stop_on", stop_on)) - goto error; + json_object_object_add (json, "stop_on", json_stop_on); } json_emits = class->emits @@ -1883,7 +1975,20 @@ /** * job_class_serialise_all: * - * Convert existing JobClass objects to JSON representation. + * Convert existing JobClass objects in job classes hash to JSON + * representation. + * + * NOTE: despite its name, this function does not _necessarily_ + * serialise all JobClasses - there may be "best" (ie newer) JobClasses + * associated with ConfFiles that have not yet replaced the existing + * entries in the job classes hash if the JobClass has running instances. + * + * However, this is academic since although such data is not serialised, + * after the re-exec conf_reload() is called to recreate these "best" + * JobClasses. This also has the nice side-effect of ensuring that + * should jobs get created in the window when Upstart is statefully + * re-exec'ing, it will always see the newest versions of on-disk files + * (which is what the user expects). * * Returns: JSON object containing array of JobClass objects, * or NULL on error. @@ -1905,17 +2010,17 @@ json_class = job_class_serialise (class); - /* No object returned means the class doesn't need to be - * serialised. Even if this is a real failure, it's always - * better to serialise as much of the state as possible. - */ if (! json_class) - continue; + goto error; json_object_array_add (json, json_class); } return json; + +error: + json_object_put (json); + return NULL; } /** @@ -1932,11 +2037,14 @@ { json_object *json_normalexit; JobClass *class = NULL; + ConfFile *file = NULL; Session *session; int session_index = -1; int ret; nih_local char *name = NULL; nih_local char *path = NULL; + json_object *json_start_on = NULL; + json_object *json_stop_on = NULL; nih_assert (json); nih_assert (job_classes); @@ -1952,11 +2060,9 @@ session = session_from_index (session_index); - /* XXX: chroot jobs are not currently supported - * due to ConfSources not currently being serialised. - */ + /* XXX: chroot and old user session jobs not currently supported */ if (session) { - nih_info ("WARNING: deserialisation of chroot " + nih_info ("WARNING: deserialisation of user/chroot " "sessions not currently supported"); goto error; } @@ -1964,10 +2070,20 @@ if (! state_get_json_string_var_strict (json, "name", NULL, name)) goto error; + /* Create the class and associate it with the ConfFile */ class = job_class_new (NULL, name, session); if (! class) goto error; + /* Lookup the ConfFile associated with this class. + * + * Don't error if this fails since previous serialisation data + * formats did not encode ConfSources and ConfFiles. + */ + file = conf_file_find (name, session); + if (file) + file->job = class; + /* job_class_new() sets path */ if (! state_get_json_string_var_strict (json, "path", NULL, path)) goto error; @@ -1998,52 +2114,77 @@ goto error; /* start and stop conditions are optional */ - if (json_object_object_get (json, "start_on")) { - nih_local char *start_on = NULL; - - if (! state_get_json_string_var_strict (json, "start_on", NULL, start_on)) - goto error; + if (json_object_object_get_ex (json, "start_on", &json_start_on)) { - if (*start_on) { - class->start_on = parse_on_simple (class, "start", start_on); - if (! class->start_on) { - NihError *err; - - err = nih_error_get (); - - nih_error ("%s %s: %s", - _("BUG"), - _("'start on' parse error"), - err->message); + if (state_check_json_type (json_start_on, array)) { - nih_free (err); + class->start_on = event_operator_deserialise_all (class, json_start_on); + if (! class->start_on) + goto error; + } else { + nih_local char *start_on = NULL; + /* Old format (string). + * + * Note that we re-search for the JSON key here + * (json, rather than json_start_on) to allow + * the use of the convenience macro. This is + * of course slower, but its a legacy scenario. + */ + if (! state_get_json_string_var_strict (json, "start_on", NULL, start_on)) goto error; + + if (*start_on) { + class->start_on = parse_on_simple (class, "start", start_on); + if (! class->start_on) { + NihError *err; + + err = nih_error_get (); + + nih_error ("%s %s: %s", + _("BUG"), + _("'start on' parse error"), + err->message); + + nih_free (err); + + goto error; + } } } } - if (json_object_object_get (json, "stop_on")) { - nih_local char *stop_on = NULL; + if (json_object_object_get_ex (json, "stop_on", &json_stop_on)) { - if (! state_get_json_string_var_strict (json, "stop_on", NULL, stop_on)) - goto error; + if (state_check_json_type (json_stop_on, array)) { - if (*stop_on) { - class->stop_on = parse_on_simple (class, "stop", stop_on); - if (! class->stop_on) { - NihError *err; - - err = nih_error_get (); - - nih_error ("%s %s: %s", - _("BUG"), - _("'stop on' parse error"), - err->message); + class->stop_on = event_operator_deserialise_all (class, json_stop_on); + if (! class->stop_on) + goto error; + } else { + nih_local char *stop_on = NULL; - nih_free (err); + /* Old format (string) - re-search as above */ + if (! state_get_json_string_var_strict (json, "stop_on", NULL, stop_on)) goto error; + + if (*stop_on) { + class->stop_on = parse_on_simple (class, "stop", stop_on); + if (! class->stop_on) { + NihError *err; + + err = nih_error_get (); + + nih_error ("%s %s: %s", + _("BUG"), + _("'stop on' parse error"), + err->message); + + nih_free (err); + + goto error; + } } } } @@ -2124,12 +2265,17 @@ if (process_deserialise_all (json, class->process, class->process) < 0) goto error; - /* Force class to be known. - * - * We cannot use job_class_*consider() since the - * JobClasses have no associated ConfFile. - */ - job_class_add_safe (class); + if (file) { + /* Add the class to the job_classes hash if ConfFiles were + * available in the serialisation data. + */ + job_class_consider (class); + } else { + /* No ConfSources and ConfFiles were available in the + * serialisation data, so special-case the insertion. + */ + job_class_add_safe (class); + } /* Any jobs must be added after the class is registered * (since you cannot add a job to a partially-created @@ -2174,7 +2320,7 @@ goto error; for (int i = 0; i < json_object_array_length (json_classes); i++) { - json_object *json_class; + json_object *json_class; json_class = json_object_array_get_idx (json_classes, i); if (! json_class) @@ -2185,11 +2331,23 @@ class = job_class_deserialise (json_class); - /* For parity with the serialisation code, don't treat - * errors as fatal for the entire deserialisation. + /* Either memory is low or -- more likely -- a JobClass + * with a session was encountered, so keep going. */ - if (! class) - continue; + if (! class) { + int session_index = -1; + + if (state_get_json_int_var (json_class, "session", session_index) + && session_index > 0) { + /* Although ConfSources are now serialised, ignore + * JobClasses with associated user/chroot sessions to avoid + * behavioural changes for the time being. + */ + continue; + } else { + goto error; + } + } } return 0; @@ -2345,33 +2503,6 @@ } /** - * job_class_find: - * - * @session: session, - * @name: name of JobClass. - * - * Lookup a JobClass by session and name. - * - * Returns: JobClass associated with @session, or NULL if not found. - */ -JobClass * -job_class_find (const Session *session, - const char *name) -{ - JobClass *class = NULL; - - nih_assert (name); - nih_assert (job_classes); - - do { - class = (JobClass *)nih_hash_search (job_classes, - name, class ? &class->entry : NULL); - } while (class && class->session != session); - - return class; -} - -/** * job_class_max_kill_timeout: * * Determine maximum kill timeout for all running jobs. @@ -2400,3 +2531,29 @@ return kill_timeout; } + +/** + * job_class_get_index: + * @class: JobClass to search for. + * + * Returns: index of @class in the job classes hash, + * or -1 if not found. + **/ +ssize_t +job_class_get_index (const JobClass *class) +{ + ssize_t i = 0; + + nih_assert (class); + + NIH_HASH_FOREACH (job_classes, iter) { + JobClass *c = (JobClass *)iter; + + if (! strcmp (c->name, class->name) + && c->session == class->session) + return i; + i++; + } + + return -1; +} --- upstart-1.8.orig/init/event_operator.h +++ upstart-1.8/init/event_operator.h @@ -108,9 +108,34 @@ void event_operator_reset (EventOperator *root); -char *event_operator_collapse (EventOperator *condition) +const char * +event_operator_type_enum_to_str (EventOperatorType type) + __attribute__ ((warn_unused_result)); + +EventOperatorType +event_operator_type_str_to_enum (const char *type) + __attribute__ ((warn_unused_result)); + +json_object * +event_operator_serialise (const EventOperator *oper) + __attribute__ ((warn_unused_result)); + +json_object * +event_operator_serialise_all (EventOperator *root) __attribute__ ((warn_unused_result)); +EventOperator * +event_operator_deserialise (void *parent, json_object *json) + __attribute__ ((warn_unused_result)); + +EventOperator * +event_operator_deserialise_all (void *parent, json_object *json) + __attribute__ ((warn_unused_result)); + + +char *event_operator_collapse (EventOperator *condition) + __attribute__ ((warn_unused_result, unused)); + NIH_END_EXTERN #endif /* INIT_EVENT_OPERATOR_H */ --- upstart-1.8.orig/init/control.h +++ upstart-1.8/init/control.h @@ -58,31 +58,31 @@ * * Returns: -1 on raised error, or nothing on success. **/ -#define control_get_job(session, job, job_name, instance) \ -{ \ - if (job_name != NULL ) { \ - JobClass *class; \ - \ - class = job_class_find (session, job_name); \ - if (! class) { \ - nih_dbus_error_raise_printf ( \ - DBUS_INTERFACE_UPSTART \ - ".Error.UnknownJob", \ - _("Unknown job: %s"), \ - job_name); \ - return -1; \ - } \ - \ - job = job_find (session, class, NULL, instance); \ - if (job == NULL) { \ - nih_dbus_error_raise_printf ( \ - DBUS_INTERFACE_UPSTART \ - ".Error.UnknownJobInstance", \ - _("Unknown instance: %s of job %s"), \ - instance, job_name); \ - return -1; \ - } \ - } \ +#define control_get_job(session, job, job_name, instance) \ +{ \ + if (job_name != NULL ) { \ + JobClass *class; \ + \ + class = job_class_get_registered (job_name, session); \ + if (! class) { \ + nih_dbus_error_raise_printf ( \ + DBUS_INTERFACE_UPSTART \ + ".Error.UnknownJob", \ + _("Unknown job: %s"), \ + job_name); \ + return -1; \ + } \ + \ + job = job_find (session, class, NULL, instance); \ + if (job == NULL) { \ + nih_dbus_error_raise_printf ( \ + DBUS_INTERFACE_UPSTART \ + ".Error.UnknownJobInstance", \ + _("Unknown instance: %s of job %s"), \ + instance, job_name); \ + return -1; \ + } \ + } \ } NIH_BEGIN_EXTERN --- upstart-1.8.orig/init/job.c +++ upstart-1.8/init/job.c @@ -552,6 +552,7 @@ job->path)); } + /* Destroy the instance */ nih_free (job); } @@ -1546,7 +1547,6 @@ json_object *json_pid; json_object *json_fds; json_object *json_logs; - nih_local char *stop_on = NULL; nih_assert (job); @@ -1580,12 +1580,13 @@ goto error; if (job->stop_on) { - stop_on = event_operator_collapse (job->stop_on); - if (! stop_on) - goto error; + json_object *json_stop_on; - if (! state_set_json_string_var (json, "stop_on", stop_on)) + json_stop_on = event_operator_serialise_all (job->stop_on); + if (! json_stop_on) goto error; + + json_object_object_add (json, "stop_on", json_stop_on); } json_fds = state_serialise_int_array (int, job->fds, job->num_fds); @@ -1708,7 +1709,6 @@ json_object * job_serialise_all (const NihHash *jobs) { - int count = 0; json_object *json; nih_assert (jobs); @@ -1721,7 +1721,6 @@ json_object *json_job; Job *job = (Job *)iter; - count++; json_job = job_serialise (job); if (! json_job) @@ -1730,12 +1729,6 @@ json_object_array_add (json, json_job); } - /* Raise an error to avoid serialising job classes with - * no associated jobs. - */ - if (! count) - goto error; - return json; error: @@ -1763,6 +1756,7 @@ json_object *json_fds; json_object *json_pid; json_object *json_logs; + json_object *json_stop_on = NULL; size_t len; int ret; @@ -1802,37 +1796,53 @@ if (! state_get_json_env_array_to_obj (json, job, stop_env)) goto error; - if (json_object_object_get (json, "stop_on")) { - nih_local char *stop_on = NULL; + if (json_object_object_get_ex (json, "stop_on", &json_stop_on)) { - if (! state_get_json_string_var_strict (json, "stop_on", NULL, stop_on)) - goto error; + if (state_check_json_type (json_stop_on, array)) { + + job->stop_on = event_operator_deserialise_all (job, json_stop_on); + if (! job->stop_on) + goto error; + } else { + nih_local char *stop_on = NULL; - if (*stop_on) { - nih_local JobClass *tmp = NULL; + /* Old format (string) + * + * Note that we re-search for the JSON key here + * (json, rather than json_stop_on) to allow + * the use of the convenience macro. This is + * of course slower, but its a legacy scenario. + */ - tmp = NIH_MUST (job_class_new (NULL, "tmp", NULL)); + if (! state_get_json_string_var_strict (json, "stop_on", NULL, stop_on)) + goto error; - tmp->stop_on = parse_on_simple (tmp, "stop", stop_on); - if (! tmp->stop_on) { - NihError *err; + if (*stop_on) { + nih_local JobClass *tmp = NULL; - err = nih_error_get (); + tmp = NIH_MUST (job_class_new (NULL, "tmp", NULL)); - nih_error ("%s %s: %s", - _("BUG"), - _("instance 'stop on' parse error"), - err->message); + tmp->stop_on = parse_on_simple (tmp, "stop", stop_on); + if (! tmp->stop_on) { + NihError *err; - nih_free (err); + err = nih_error_get (); - goto error; - } + nih_error ("%s %s: %s", + _("BUG"), + _("instance 'stop on' parse error"), + err->message); - nih_free (job->stop_on); - job->stop_on = event_operator_copy (job, tmp->stop_on); - if (! job->stop_on) - goto error; + nih_free (err); + + goto error; + } + + nih_free (job->stop_on); + job->stop_on = event_operator_copy (job, tmp->stop_on); + if (! job->stop_on) + goto error; + } } } @@ -2228,7 +2238,7 @@ Job * job_find (const Session *session, JobClass *class, - char *job_class, + const char *job_class, const char *job_name) { Job *job; @@ -2237,7 +2247,7 @@ nih_assert (job_classes); if (! class) - class = job_class_find (session, job_class); + class = job_class_get_registered (job_class, session); if (! class) goto error; --- upstart-1.8.orig/init/state.c +++ upstart-1.8/init/state.c @@ -47,6 +47,7 @@ json_object *json_sessions = NULL; json_object *json_events = NULL; json_object *json_classes = NULL; +json_object *json_conf_sources = NULL; extern char *log_dir; @@ -67,6 +68,13 @@ **/ int restart = FALSE; +/** + * write_state_file: + * + * If TRUE, write STATE_FILE on every re-exec. + **/ +int write_state_file = FALSE; + /* Prototypes for static functions */ static JobClass * state_index_to_job_class (int job_class_index) @@ -233,6 +241,9 @@ if (state_from_string (buffer->buf) < 0) goto error; + if (write_state_file || getenv (STATE_FILE_ENV)) + state_write_file (buffer); + return 0; error: @@ -327,8 +338,8 @@ int state_to_string (char **json_string, size_t *len) { - json_object *json; - const char *value; + json_object *json; + const char *value; nih_assert (json_string); nih_assert (len); @@ -339,24 +350,39 @@ return -1; json_sessions = session_serialise_all (); - if (! json_sessions) + if (! json_sessions) { + nih_error ("%s Sessions", _("Failed to serialise")); goto error; + } json_object_object_add (json, "sessions", json_sessions); json_events = event_serialise_all (); - if (! json_events) + if (! json_events) { + nih_error ("%s Events", _("Failed to serialise")); goto error; + } json_object_object_add (json, "events", json_events); json_classes = job_class_serialise_all (); - if (! json_classes) + if (! json_classes) { + nih_error ("%s JobClasses", _("Failed to serialise")); goto error; + } json_object_object_add (json, "job_classes", json_classes); + json_conf_sources = conf_source_serialise_all (); + + if (! json_conf_sources) { + nih_error ("%s ConfSources", _("Failed to serialise")); + goto error; + } + + json_object_object_add (json, "conf_sources", json_conf_sources); + /* Note that the returned value is managed by json-c! */ value = json_object_to_json_string (json); if (! value) @@ -410,17 +436,37 @@ if (! state_check_json_type (json, object)) goto out; - if (session_deserialise_all (json) < 0) + if (session_deserialise_all (json) < 0) { + nih_error ("%s Sessions", _("Failed to deserialise")); goto out; + } - if (event_deserialise_all (json) < 0) + if (event_deserialise_all (json) < 0) { + nih_error ("%s Events", _("Failed to deserialise")); goto out; + } - if (job_class_deserialise_all (json) < 0) + /* Again, we cannot error here since older JSON state data did + * not encode ConfSource or ConfFile objects. + */ + if (json_object_object_get (json, "conf_sources")) { + if (conf_source_deserialise_all (json) < 0) { + nih_error ("%s ConfSources", _("Failed to deserialise")); + goto out; + } + } else { + nih_warn ("%s", _("No ConfSources present in state data")); + } + + if (job_class_deserialise_all (json) < 0) { + nih_error ("%s JobClasses", _("Failed to deserialise")); goto out; + } - if (state_deserialise_resolve_deps (json) < 0) + if (state_deserialise_resolve_deps (json) < 0) { + nih_error (_("Failed to resolve deserialisation dependencies")); goto out; + } ret = 0; @@ -1118,7 +1164,6 @@ return json_type_null; } - /** * state_deserialise_resolve_deps: * @@ -1135,8 +1180,9 @@ { nih_assert (json); - /* XXX: Events, JobClasses, Jobs and DBusConnections must have - * previously been deserialised before invoking this function. + /* XXX: Sessions, Events, JobClasses, Jobs and DBusConnections + * must have previously been deserialised before invoking + * this function. */ nih_assert (json_sessions); nih_assert (json_events); @@ -1175,14 +1221,21 @@ /* lookup class associated with JSON class index */ class = state_index_to_job_class (i); - if (! class) - goto error; + if (! class) { + int session_index = -1; - /* XXX: user and chroot jobs are not currently supported - * due to ConfSources not currently being serialised. - */ - if (class->session) - continue; + if (state_get_json_int_var (json_class, "session", session_index) + && session_index > 0) { + + /* Although ConfSources are now serialised, ignore + * JobClasses with associated user/chroot sessions to avoid + * behavioural changes for the time being. + */ + continue; + } else { + goto error; + } + } if (! state_get_json_var_full (json_class, "jobs", array, json_jobs)) goto error; @@ -1526,7 +1579,12 @@ blocked = NIH_MUST (blocked_new (parent, BLOCKED_EVENT, event)); nih_list_add (list, &blocked->entry); - event_block (blocked->event); + + /* Event must already exist and should have + * blockers associated for it to have a blocked + * object pointing at it. + */ + nih_assert (blocked->event->blockers); } break; @@ -1655,7 +1713,6 @@ if (! json_blocked) goto error; - /* Don't error in this scenario to allow for possibility * that version of Upstart that performed the * serialisation did not correctly handle user and @@ -1894,7 +1951,7 @@ void stateful_reexec (void) { - int fds[2] = { -1 }; + int fds[2] = { -1, -1 }; pid_t pid; sigset_t mask, oldmask; nih_local char *state_data = NULL; --- upstart-1.8.orig/init/event.c +++ upstart-1.8/init/event.c @@ -315,8 +315,8 @@ /* We stop first so that if an event is listed both as a * stop and start event, it causes an active running process - * to be killed, the stop script then the start script to be - * run. In any other state, it has no special effect. + * to be killed, and then stop script then the start script + * to be run. In any other state, it has no special effect. * * (The other way around would be just strange, it'd cause * a process's start and stop scripts to be run without the @@ -638,7 +638,7 @@ json_object *json_env; Event *event = NULL; nih_local char *name = NULL; - char **env = NULL; + nih_local char **env = NULL; int session_index = -1; nih_assert (json); @@ -675,9 +675,19 @@ "progress", event->progress)) goto error; - if (! state_set_json_int_var_from_obj (json, event, failed)) + if (! state_get_json_int_var_to_obj (json, event, failed)) goto error; + /* We can only set the blockers count in the scenario that + * EventOperators are serialised (since without this, it is not + * possible to manually reconstruct the state of the + * EventOperators post-re-exec. + */ + if (json_object_object_get (json, "blockers")) { + if (! state_get_json_int_var_to_obj (json, event, blockers)) + goto error; + } + return event; error: --- upstart-1.8.orig/init/event_operator.c +++ upstart-1.8/init/event_operator.c @@ -59,7 +59,7 @@ * array of environment variables in KEY=VALUE form. @env will be referenced * by the new event. After calling this function, you should never use * nih_free() to free @env and instead use nih_unref() or nih_discard() if - * you longer need to use it. + * you no longer need to use it. * * If @parent is not NULL, it should be a pointer to another object which * will be used as a parent for the returned operator. When all parents @@ -782,8 +782,7 @@ env ? env : "")); nih_list_add_after (stack, &expr->entry); break; - } - else { + } else { /* We build the expression from visiting the logical * operators (and their children) only. */ @@ -864,3 +863,312 @@ return NIH_MUST (nih_strdup (NULL, latest->str)); } + +/** + * event_operator_type_enum_to_str: + * + * @type: EventOperatorType. + * + * Convert EventOperatorType to a string representation. + * + * Returns: string representation of @type, or NULL if not known. + **/ +const char * +event_operator_type_enum_to_str (EventOperatorType type) +{ + state_enum_to_str (EVENT_OR, type); + state_enum_to_str (EVENT_AND, type); + state_enum_to_str (EVENT_MATCH, type); + + return NULL; +} + +/** + * event_operator_type_str_to_enum: + * + * @type: string EventOperatorType value. + * + * Convert @expect back into an enum value. + * + * Returns: EventOperatorType representing @type, or -1 if not known. + **/ +EventOperatorType +event_operator_type_str_to_enum (const char *type) +{ + nih_assert (type); + + state_str_to_enum (EVENT_OR, type); + state_str_to_enum (EVENT_AND, type); + state_str_to_enum (EVENT_MATCH, type); + + return -1; +} + +/** + * event_operator_serialise: + * @oper: EventOperator to serialise. + * + * Convert @oper into a JSON representation for serialisation. + * Caller must free returned value using json_object_put(). + * + * Returns: JSON-serialised EventOperator object, or NULL on error. + **/ +json_object * +event_operator_serialise (const EventOperator *oper) +{ + json_object *json; + int event_index; + + nih_assert (oper); + + json = json_object_new_object (); + if (! json) + return NULL; + + if (! state_set_json_enum_var (json, + event_operator_type_enum_to_str, + "type", oper->type)) + goto error; + + if (! state_set_json_int_var_from_obj (json, oper, value)) + goto error; + + if (oper->name) { + if (! state_set_json_string_var_from_obj (json, oper, name)) + goto error; + } + + if (oper->env) { + if (! state_set_json_str_array_from_obj (json, oper, env)) + goto error; + } + + if (oper->event) { + event_index = event_to_index (oper->event); + if (event_index < 0) + goto error; + + if (! state_set_json_int_var (json, "event", event_index)) + goto error; + } + + return json; + +error: + json_object_put (json); + return NULL; + +} + +/** + * event_operator_serialise_all: + * + * @root: operator tree to serialise, + * + * Convert EventOperator tree to JSON representation. + * + * Returns: JSON object containing array of EventOperator nodes in post-order, + * or NULL on error. + */ +json_object * +event_operator_serialise_all (EventOperator *root) +{ + json_object *json; + json_object *json_node; + + nih_assert (root); + + json = json_object_new_array (); + if (! json) + return NULL; + + NIH_TREE_FOREACH_POST (&root->node, iter) { + EventOperator *oper = (EventOperator *)iter; + + json_node = event_operator_serialise (oper); + if (! json_node) + goto error; + + if (json_object_array_add (json, json_node) < 0) + goto error; + } + + return json; + +error: + json_object_put (json); + return NULL; +} + +/** + * event_operator_deserialise: + * @parent: parent, + * @json: JSON-serialised EventOperator object to deserialise. + * + * Create EventOperator from provided JSON. + * + * Returns: EventOperator object, or NULL on error. + **/ +EventOperator * +event_operator_deserialise (void *parent, json_object *json) +{ + EventOperator *oper = NULL; + EventOperatorType type = -1; + nih_local char *name = NULL; + nih_local char **env = NULL; + + nih_assert (json); + + if (! state_check_json_type (json, object)) + goto error; + + if (json_object_object_get (json, "name")) { + if (! state_get_json_string_var_strict (json, "name", NULL, name)) + goto error; + } + + if (! state_get_json_enum_var (json, + event_operator_type_str_to_enum, + "type", type)) + goto error; + + if (json_object_object_get (json, "env")) { + json_object *json_env; + if (! state_get_json_var_full (json, "env", array, json_env)) + goto error; + + /* XXX: note that we have to treat the environment array + * as a plain string array (rather than an environ + * array) at this point since the values are not + * expanded (do not necessarily contain '='), and hence + * would be discarded by the environ-handling routines. + */ + if (! state_deserialise_str_array (NULL, json_env, &env)) + goto error; + } + + oper = event_operator_new (parent, type, name, env); + if (! oper) + goto error; + + if (! state_get_json_int_var_to_obj (json, oper, value)) + goto error; + + if (json_object_object_get (json, "event")) { + int event_index; + + if (! state_get_json_int_var (json, "event", event_index)) + goto error; + + oper->event = event_from_index (event_index); + if (! oper->event) + goto error; + } + + return oper; + +error: + if (oper) + nih_free (oper); + + return NULL; +} + +/** + * event_operator_deserialise_all: + * + * @parent: parent, + * @json: root of JSON-serialised state. + * + * Convert EventOperator tree to JSON representation. + * + * Returns: EventOperator tree root node on success, or NULL on error. + */ +EventOperator * +event_operator_deserialise_all (void *parent, json_object *json) +{ + EventOperator *oper = NULL; + EventOperator *left_oper = NULL; + EventOperator *right_oper = NULL; + nih_local NihList *stack = NULL; + NihListEntry *item; + + nih_assert (json); + + stack = NIH_MUST (nih_list_new (NULL)); + + if (! state_check_json_type (json, array)) + goto error; + + for (int i = 0; i < json_object_array_length (json); i++) { + json_object *json_event_operator; + nih_local NihList *left = NULL; + nih_local NihList *right = NULL; + + json_event_operator = json_object_array_get_idx (json, i); + if (! json_event_operator) + goto error; + + if (! state_check_json_type (json_event_operator, object)) + goto error; + + oper = event_operator_deserialise (parent, json_event_operator); + if (! oper) + goto error; + + item = nih_list_entry_new (stack); + if (! item) + goto error; + + switch (oper->type) { + case EVENT_AND: + case EVENT_OR: + left = NIH_MUST (nih_list_new (NULL)); + right = NIH_MUST (nih_list_new (NULL)); + + /* pop the top two stack elements */ + nih_assert (! NIH_LIST_EMPTY (stack)); + right = nih_list_add (right, stack->next); + + nih_assert (! NIH_LIST_EMPTY (stack)); + left = nih_list_add (left, stack->next); + + left_oper = (EventOperator *)((NihListEntry *)left)->data; + right_oper = (EventOperator *)((NihListEntry *)right)->data; + + nih_assert (left_oper); + nih_assert (right_oper); + + /* Attach them as children of the new operator */ + nih_tree_add (&oper->node, &left_oper->node, NIH_TREE_LEFT); + nih_tree_add (&oper->node, &right_oper->node, NIH_TREE_RIGHT); + + /* FALL THROUGH: + * + * This will re-add the operator to the stack. + */ + + case EVENT_MATCH: + item->data = oper; + nih_list_add_after (stack, &item->entry); + break; + default: + nih_assert_not_reached (); + } + } + + nih_assert (! NIH_LIST_EMPTY (stack)); + + oper = ((NihListEntry *)stack->next)->data; + + nih_list_remove (stack->next); + nih_assert (NIH_LIST_EMPTY (stack)); + + return oper; + +error: + if (oper) + nih_free (oper); + + return NULL; +} --- upstart-1.8.orig/init/Makefile.am +++ upstart-1.8/init/Makefile.am @@ -8,6 +8,7 @@ $(NIH_CFLAGS) \ $(NIH_DBUS_CFLAGS) \ $(DBUS_CFLAGS) \ + $(SELINUX_CFLAGS) \ $(JSON_CFLAGS) AM_CPPFLAGS = \ @@ -69,6 +70,7 @@ $(NIH_LIBS) \ $(NIH_DBUS_LIBS) \ $(DBUS_LIBS) \ + $(SELINUX_LIBS) \ $(JSON_LIBS) \ -lrt @@ -272,7 +274,7 @@ $(JSON_LIBS) \ -lrt -test_event_operator_SOURCES = tests/test_event_operator.c +test_event_operator_SOURCES = tests/test_event_operator.c $(test_util_SOURCES) test_event_operator_LDADD = \ system.o environ.o process.o \ job_class.o job_process.o job.o event.o event_operator.o blocked.o \ --- upstart-1.8.orig/init/conf.c +++ upstart-1.8/init/conf.c @@ -2,7 +2,7 @@ * * conf.c - configuration management * - * Copyright © 2009,2010,2011,2012,2013 Canonical Ltd. + * Copyright 2009,2010,2011,2012,2013 Canonical Ltd. * Author: Scott James Remnant . * * This program is free software; you can redistribute it and/or modify @@ -49,6 +49,7 @@ #include "conf.h" #include "errors.h" #include "paths.h" +#include "environ.h" /* Prototypes for static functions */ static int conf_source_reload_file (ConfSource *source) @@ -103,6 +104,7 @@ **/ NihList *conf_sources = NULL; +extern json_object *json_conf_sources; /** * is_conf_file_std: @@ -447,12 +449,24 @@ /** * conf_reload: * - * Reloads all configuration sources. + * Reloads configuration sources. * * Watches on new configuration sources are established so that future * changes will be automatically detected with inotify. Then for both * new and existing sources, the current state is parsed. * + * All ConfFiles are recreated as part of the reload. If the JobClass + * associated with a ConfSource has no Job instances, the JobClass is + * recreated and added to the job_classes hash. + * + * However, if a JobClass has running instances at reload time, although + * a new ConfSource *and* a new JobClass are created, the new JobClass + * (called the "best") will *NOT* be added to the job_classes hash until + * the last running instance has finished. At this point, the "registered" + * JobClass will be removed from the hash (when job_class_reconsider() + * is called by job_change_state()) and replaced by the "best" (newest) + * JobClass. + * * Any errors are logged through the usual mechanism, and not returned, * since some configuration may have been parsed; and it's possible to * parse no configuration without error. @@ -1039,6 +1053,7 @@ const char *override_path) { ConfFile *file = NULL; + ConfFile *orig = NULL; nih_local char *buf = NULL; nih_local char *name = NULL; size_t len, pos, lineno; @@ -1051,25 +1066,67 @@ path_to_load = (override_path ? override_path : path); /* If there is no corresponding override file, look up the old - * conf file in memory, and then free it. In cases of failure, + * conf file in memory, and then free it. In cases of failure, * we discard it anyway, so there's no particular reason * to keep it around anymore. * - * Note: if @override_path has been specified, do not - * free the file if found, since we want to _update_ the - * existing entry. + * Notes: + * + * - If @override_path has been specified, do not free the file + * if found, since we want to _update_ the existing entry. + * - Freeing a ConfFile does _not_ necessarily free its associated + * JobClass. */ - file = (ConfFile *)nih_hash_lookup (source->files, path); - if (! override_path && file) - nih_unref (file, source); + orig = (ConfFile *)nih_hash_lookup (source->files, path); + if (! override_path && orig) { + /* Found an existing ConfFile. We will free this, but + * just not yet since iff that ConfFiles associated JobClass + * does not have any running instances, freeing the + * ConfFile will cause the original JobClass associated + * with this ConfFile to be destroyed. But if the JobClass + * had referenced any events via it's 'start on' EventOperator tree, + * the JobClasses destruction could lead to the Events + * being destroyed _before_ the about-to-be-created + * replacement JobClass gets a chance to reference those + * same events (assuming its 'start on' EventOperator tree + * contains nodes specifying the same event names as + * those in the original JobClasses). + * + * As such, we simply remove the ConfFile from its + * parent ConfSources hash, create the new ConfFile and + * JobClass, give the new JobClass a chance to be the + * registered JobClass, and finally allow the original + * ConfFile to be destroyed. + * + * If this is not done, reloading a configuration + * mid-way through the boot sequence could lead to a + * hung system as the new JobClasses will wait forever + * for events to be emitted that have already been + * destroyed. + */ + nih_list_remove (&orig->entry); + } /* Read the file into memory for parsing, if this fails we don't * bother creating a new ConfFile structure for it and bail out * now. */ buf = nih_file_read (NULL, path_to_load, &len); - if (! buf) + if (! buf) { + if (! override_path && orig) { + /* Failed to reload the file from disk in all + * likelihood because the configuration file was + * deleted. + * + * Allow the ConfFile to be cleaned up taking + * its JobClass (and possibly events that + * JobClass was referencing) with it. + */ + nih_unref (orig, source); + } + return -1; + } /* Create a new ConfFile structure (if no @override_path specified) */ file = (ConfFile *)nih_hash_lookup (source->files, path); @@ -1112,6 +1169,10 @@ file->job = parse_job (NULL, source->session, file->job, name, buf, len, &pos, &lineno); + /* Allow the original ConfFile which has now been replaced to be + * destroyed which will also cause the original JobClass to be + * freed. + */ if (file->job) { job_class_consider (file->job); } else { @@ -1123,6 +1184,12 @@ nih_assert_not_reached (); } + /* Finally, allow the original ConfFile to be destroyed without + * affecting the new JobClass. + */ + if (! override_path && orig) + nih_unref (orig, source); + /* Deal with any parsing errors that occurred; we don't consider * these to be hard failures, which means we can warn about them * here and give the path and line number along with the warning. @@ -1253,8 +1320,568 @@ return NULL; } +/** + * conf_source_serialise: + * @source: ConfSource to serialise. + * + * Convert @source into a JSON representation for serialisation. + * Caller must free returned value using json_object_put(). + * + * Returns: JSON-serialised ConfSource object, or NULL on error. + **/ +json_object * +conf_source_serialise (const ConfSource *source) +{ + json_object *json; + json_object *json_files; + int session_index; + + nih_assert (source); + nih_assert (conf_sources); + + json = json_object_new_object (); + if (! json) + return NULL; + + json_files = json_object_new_array (); + if (! json_files) + goto error; + + session_index = session_get_index (source->session); + if (session_index < 0) + goto error; + + if (! state_set_json_int_var (json, "session", session_index)) + goto error; + + if (! state_set_json_string_var_from_obj (json, source, path)) + goto error; + + if (! state_set_json_enum_var (json, + conf_source_type_enum_to_str, + "type", source->type)) + goto error; + + /* 'watch' does not need to be serialised - it gets recreated + * when conf_source_new() is called on deserialisation. + */ + + if (! state_set_json_int_var_from_obj (json, source, flag)) + goto error; + + /* Add array of ConfFile names to represent the files hash */ + NIH_HASH_FOREACH (source->files, file_iter) { + ConfFile *file = (ConfFile *)file_iter; + json_object *json_conf_file; + + json_conf_file = conf_file_serialise (file); + if (! json_conf_file) + goto error; + + json_object_array_add (json_files, json_conf_file); + } + + json_object_object_add (json, "conf_files", json_files); + + return json; + +error: + json_object_put (json); + return NULL; +} + +/** + * conf_source_serialise_all: + * + * Convert existing ConfSource objects to JSON representation. + * + * Returns: JSON object containing array of ConfSource objects, + * or NULL on error. + **/ +json_object * +conf_source_serialise_all (void) +{ + json_object *json; + + conf_init (); + + json = json_object_new_array (); + if (! json) + return NULL; + + NIH_LIST_FOREACH (conf_sources, iter) { + json_object *json_source; + ConfSource *source = (ConfSource *)iter; + + json_source = conf_source_serialise (source); + + if (! json_source) + goto error; + + json_object_array_add (json, json_source); + } + + return json; + +error: + json_object_put (json); + return NULL; +} + +/** + * conf_source_deserialise: + * @parent: parent, + * @json: JSON-serialised ConfSource object to deserialise. + * + * Create ConfSource from provided JSON and add to the + * conf sources list. + * + * Returns: ConfSource object, or NULL on error. + **/ +ConfSource * +conf_source_deserialise (void *parent, json_object *json) +{ + ConfSource *source = NULL; + ConfSourceType type = -1; + Session *session; + int session_index = -1; + nih_local char *path = NULL; + + nih_assert (json); + + if (! state_check_json_type (json, object)) + goto error; + + if (! state_get_json_int_var (json, "session", session_index)) + goto error; + + if (session_index < 0) + goto error; + + session = session_from_index (session_index); + + if (! state_get_json_string_var_strict (json, "path", NULL, path)) + goto error; + + if (! state_get_json_enum_var (json, + conf_source_type_str_to_enum, + "type", type)) + goto error; + + source = conf_source_new (parent, path, type); + if (! source) + goto error; + + source->session = session; + + if (! state_get_json_int_var_to_obj (json, source, flag)) + goto error; + + if (conf_file_deserialise_all (source, json) < 0) + goto error; + + return source; + +error: + if (source) + nih_free (source); + + return NULL; +} + +/** + * conf_source_deserialise_all: + * + * @json: root of JSON-serialised state. + * + * Convert JSON representation of ConfSources back into ConfSource objects. + * + * Returns: 0 on success, -1 on error. + **/ +int +conf_source_deserialise_all (json_object *json) +{ + ConfSource *source = NULL; + + nih_assert (json); + + conf_init (); + + nih_assert (NIH_LIST_EMPTY (conf_sources)); + + json_conf_sources = json_object_object_get (json, "conf_sources"); + + if (! json_conf_sources) + goto error; + + if (! state_check_json_type (json_conf_sources, array)) + goto error; + + for (int i = 0; i < json_object_array_length (json_conf_sources); i++) { + json_object *json_source; + + json_source = json_object_array_get_idx (json_conf_sources, i); + if (! json_source) + goto error; + + if (! state_check_json_type (json_source, object)) + goto error; + + source = conf_source_deserialise (NULL, json_source); + + if (! source) + continue; + } + + return 0; + +error: + if (source) + nih_free (source); + + return -1; +} + +/** + * conf_source_type_enum_to_str: + * + * @type: ConfSourceType. + * + * Convert ConfSourceType to a string representation. + * + * Returns: string representation of @type, or NULL if not known. + **/ +const char * +conf_source_type_enum_to_str (ConfSourceType type) +{ + state_enum_to_str (CONF_FILE, type); + state_enum_to_str (CONF_DIR, type); + state_enum_to_str (CONF_JOB_DIR, type); + + return NULL; +} + +/** + * conf_source_type_str_to_enum: + * + * @type: string ConfSourceType value. + * + * Convert @expect back into an enum value. + * + * Returns: ConfSourceType representing @type, or -1 if not known. + **/ +ConfSourceType +conf_source_type_str_to_enum (const char *type) +{ + nih_assert (type); + + state_str_to_enum (CONF_FILE, type); + state_str_to_enum (CONF_DIR, type); + state_str_to_enum (CONF_JOB_DIR, type); + + return -1; +} + +/** + * conf_file_serialise: + * @file: ConfFile to serialise. + * + * Convert @file into a JSON representation for serialisation. + * Caller must free returned value using json_object_put(). + * + * Returns: JSON-serialised ConfFile object, or NULL on error. + **/ +json_object * +conf_file_serialise (const ConfFile *file) +{ + json_object *json; + json_object *json_job_class; + JobClass *registered; + int session_index; + ssize_t conf_source_index; + + nih_assert (file); + + json = json_object_new_object (); + if (! json) + return NULL; + + if (! state_set_json_string_var_from_obj (json, file, path)) + goto error; + + conf_source_index = conf_source_get_index (file->source); + if (conf_source_index < 0) + goto error; + + if (! state_set_json_int_var (json, "conf_source", conf_source_index)) + goto error; + + if (! state_set_json_int_var_from_obj (json, file, flag)) + goto error; + + /* + * Ignore the "best" JobClass associated with this ConfFile + * (file->job) since it won't be serialised. + * + * Instead look up the currently registered JobClass and + * reference that. This ensures that best == registered for the + * re-exec. This may change though immediately after re-exec + * when conf_reload() gets called. + * + * See job_class_serialise_all() for further details. + */ + registered = job_class_get_registered (file->job->name, + file->job->session); + + if (! registered) + goto error; + + /* Create a reference to the registered job class in the JSON by + * encoding the name and session index. We do this rather than + * simply encoding an index number for the JobClass since + * job_classes is a hash and it is safer should a re-exec + * result from an upgrade to NIH, say, where its hashing + * algorithm changed meaning the index may be unreliable once + * the job_classes hash was created post-re-exec. + */ + json_job_class = json_object_new_object (); + if (! json_job_class) + goto error; + + if (! state_set_json_string_var (json_job_class, + "name", + registered->name)) + goto error; + + session_index = session_get_index (registered->session); + if (session_index < 0) + goto error; + + if (! state_set_json_int_var (json_job_class, + "session", + session_index)) + goto error; + + json_object_object_add (json, "job_class", json_job_class); + + return json; + +error: + json_object_put (json); + return NULL; +} + +/** + * conf_file_deserialise: + * @source: ConfSource, + * @json: JSON-serialised ConfFile object to deserialise. + * + * Create ConfFile from provided JSON and add to the + * conf sources list. + * + * Returns: ConfFile object, or NULL on error. + **/ +ConfFile * +conf_file_deserialise (ConfSource *source, json_object *json) +{ + ConfFile *file = NULL; + nih_local char *path = NULL; + + nih_assert (json); + + if (! state_check_json_type (json, object)) + goto error; + + if (! state_get_json_string_var_strict (json, "path", NULL, path)) + goto error; + + file = conf_file_new (source, path); + if (! file) + goto error; + + /* Note that the associated JobClass is not handled at this + * stage: it can't be the JobClasses haven't been deserialised + * yet. As such, the ConfFile->JobClass link is dealt with by + * job_class_deserialise_all(). + */ + file->job = NULL; + + if (! state_get_json_int_var_to_obj (json, file, flag)) + goto error; + + return file; + +error: + if (file) + nih_free (file); + + return NULL; +} + +/** + * conf_file_deserialise_all: + * + * @source: ConfSource, + * @json: root of JSON-serialised state. + * + * Convert JSON representation of ConfFiles back into ConfFile objects. + * + * Returns: 0 on success, -1 on error. + **/ +int +conf_file_deserialise_all (ConfSource *source, json_object *json) +{ + json_object *json_conf_files; + ConfFile *file = NULL; + + nih_assert (source); + nih_assert (json); + + conf_init (); + + json_conf_files = json_object_object_get (json, "conf_files"); + + if (! json_conf_files) + goto error; + + if (! state_check_json_type (json_conf_files, array)) + goto error; + + for (int i = 0; i < json_object_array_length (json_conf_files); i++) { + json_object *json_file; + + json_file = json_object_array_get_idx (json_conf_files, i); + if (! json_file) + goto error; + + if (! state_check_json_type (json_file, object)) + goto error; + + file = conf_file_deserialise (source, json_file); + + if (! file) + goto error; + } + + return 0; + +error: + if (file) + nih_free (file); + + return -1; +} + +/** + * conf_source_get_index: + * + * @source: ConfSource to search for. + * + * Returns: index of @source in the conf sources list, + * or -1 if not found. + **/ +ssize_t +conf_source_get_index (const ConfSource *source) +{ + ssize_t i = 0; + + nih_assert (source); + + conf_init (); + + NIH_LIST_FOREACH (conf_sources, iter) { + ConfSource *s = (ConfSource *)iter; + + if (! strcmp (source->path, s->path) + && source->session == s->session) + return i; + i++; + } + + return -1; +} + +/** + * conf_file_find: + * + * @name: name of ConfFile (without dirname and extension), + * @session: session ConfFile belongs to. + * + * Find the ConfFile with name @name in session @session. + * + * Returns: ConfFile or NULL if not found. + **/ +ConfFile * +conf_file_find (const char *name, const Session *session) +{ + nih_local char *basename = NULL; + + nih_assert (name); + + conf_init (); + + /* There can only be one ConfFile per session with the same + * basename. + */ + basename = NIH_MUST (nih_sprintf (NULL, "/%s%s", + name, CONF_EXT_STD)); + + NIH_LIST_FOREACH (conf_sources, iter) { + ConfSource *source = (ConfSource *)iter; + + if (source->session != session) + continue; + + NIH_HASH_FOREACH (source->files, file_iter) { + ConfFile *file = (ConfFile *)file_iter; + char *match; + char *slash; + + match = strstr (file->path, basename); + slash = strrchr (file->path, '/'); + + if (match && match == slash) + return file; + } + } + + return NULL; +} + #ifdef DEBUG +void +debug_show_event_operator (EventOperator *oper) +{ + nih_local char *env = NULL; + + nih_assert (oper); + + if (oper->env) env = state_collapse_env ((const char **)oper->env); + + nih_debug ("EventOperator %p: type='%s', value=%d, name='%s', event='%s', env='%s'", + oper, + oper->type == EVENT_MATCH ? "EVENT_MATCH" + : oper->type == EVENT_AND ? "EVENT_AND" + : "EVENT_OR", + oper->value, + oper->name, + oper->event ? oper->event->name : "", + env ? env : ""); +} + +void +debug_show_event_operators (EventOperator *root) +{ + nih_assert (root); + + NIH_TREE_FOREACH_POST (&root->node, iter) { + EventOperator *oper = (EventOperator *)iter; + + debug_show_event_operator (oper); + } +} + size_t debug_count_list_entries (const NihList *list) { @@ -1383,7 +2010,8 @@ void debug_show_jobs (const NihHash *instances) { - nih_assert (instances); + if (! instances) + return; nih_debug ("jobs:"); @@ -1405,6 +2033,18 @@ } void +debug_show_events (void) +{ + nih_assert (events); + + NIH_LIST_FOREACH (events, iter) { + Event *event = (Event *)iter; + + debug_show_event (event); + } +} + +void debug_show_conf_file (const ConfFile *file) { nih_assert (file); --- upstart-1.8.orig/init/job_class.h +++ upstart-1.8/init/job_class.h @@ -356,10 +356,16 @@ void job_class_prepare_reexec (void); -JobClass * job_class_find (const Session *session, const char *name) +time_t job_class_max_kill_timeout (void) __attribute__ ((warn_unused_result)); -time_t job_class_max_kill_timeout (void) +JobClass *job_class_get_registered (const char *name, const Session *session) + __attribute__ ((warn_unused_result)); + +void job_class_event_block (void *parent, JobClass *old, JobClass *new); + +ssize_t +job_class_get_index (const JobClass *class) __attribute__ ((warn_unused_result)); NIH_END_EXTERN --- upstart-1.8.orig/init/man/init.8 +++ upstart-1.8/init/man/init.8 @@ -48,6 +48,10 @@ and .BR stopped (7) events emitted as jobs change state. + +See +.BR upstart-events (7) +for a summary of well-known events. .\" .SS System V compatibility The Upstart @@ -224,3 +228,4 @@ .BR stopping (7) .BR stopped (7) .BR telinit (8) +.BR upstart-events (7) --- upstart-1.8.orig/init/man/init.5 +++ upstart-1.8/init/man/init.5 @@ -1,4 +1,4 @@ -.TH init 7 2013-01-25 "Upstart" +.TH init 5 2013-01-25 "Upstart" .\" .SH NAME init \- Upstart init daemon job configuration @@ -1073,3 +1073,4 @@ .BR prctl (2) .BR pty (7) .BR sh (1) +.BR upstart-events (7) --- upstart-1.8.orig/init/tests/test_util.c +++ upstart-1.8/init/tests/test_util.c @@ -1,4 +1,6 @@ #include "test_util.h" +#include +#include /** * string_check: @@ -25,3 +27,86 @@ return 0; } +/** + * event_operator_diff: + * @a: first Blocked, + * @b: second Blocked, + * @seen: object type that has already been seen. + * + * Compare two Blocked objects for equivalence. + * + * Returns: 0 if @a and @b are identical, else 1. + **/ +int +event_operator_diff (EventOperator *a, EventOperator *b) +{ + if (! a && ! b) + return 0; + + if ((! a && b) || (a && ! b)) + return 1; + + TEST_TWO_TREES_FOREACH (&a->node, &b->node, iter_a, iter_b) { + EventOperator *opera = (EventOperator *)iter_a; + EventOperator *operb = (EventOperator *)iter_b; + nih_local char *env_a = NULL; + nih_local char *env_b = NULL; + + if ((! opera && operb) || (! operb && opera)) + return 1; + + TEST_NE_P (opera, NULL); + TEST_NE_P (operb, NULL); + + if (opera->type != operb->type) + return 1; + + if (opera->value != operb->value) + return 1; + + if (opera->type == EVENT_MATCH && opera->env) { + env_a = state_collapse_env ((const char **)opera->env); + if (! env_a) + return 1; + } + + if (operb->type == EVENT_MATCH && operb->env) { + env_b = state_collapse_env ((const char **)operb->env); + if (! env_b) + return 1; + } + + if (string_check (env_a, env_b)) + return 1; + + if (opera->event != operb->event) + return 1; + } + + return 0; +} + +/** + * session_from_chroot: + * @chroot: full path to chroot. + * + * Obtain the session relating to the specified chroot. + * + * Returns: Session, or NULL if no session found. + **/ +Session * +session_from_chroot (const char *chroot) +{ + nih_assert (chroot); + + session_init (); + + NIH_LIST_FOREACH (sessions, iter) { + Session *session = (Session *)iter; + + if (! strcmp (session->chroot, chroot)) + return session; + } + + return NULL; +} --- upstart-1.8.orig/init/tests/test_job.c +++ upstart-1.8/init/tests/test_job.c @@ -7232,42 +7232,62 @@ } } - void test_deserialise_ptrace (void) { - JobClass *class = NULL; - Job *job = NULL; - pid_t parent_pid, pid; - siginfo_t info; - char *child_wait_fd_str; + ConfSource *source = NULL; + ConfFile *file = NULL; + JobClass *class = NULL; + Job *job = NULL; + pid_t parent_pid, pid; + siginfo_t info; + char *child_wait_fd_str; TEST_FUNCTION_FEATURE ("job_deserialise", "ptrace handling"); nih_error_init (); job_class_init (); TEST_HASH_EMPTY (job_classes); + TEST_LIST_EMPTY (conf_sources); TEST_CHILD_WAIT (parent_pid, child_wait_fd) { - class = job_class_new (NULL, "test", NULL); + /* Manually construct a job and all required associated + * objects. + */ + + /* First, create ConfSource, ConfFile and JobClass */ + source = conf_source_new (NULL, "/tmp", CONF_JOB_DIR); + TEST_NE_P (source, NULL); + file = conf_file_new (source, "/tmp/test.conf"); + class = file->job = job_class_new (NULL, "test", NULL); TEST_NE_P (class, NULL); class->console = CONSOLE_OUTPUT; class->expect = EXPECT_FORK; class->chdir = NIH_MUST (nih_strdup (class, ".")); class->process[PROCESS_MAIN] = process_new (class); TEST_NE_P (class->process[PROCESS_MAIN], NULL); - job_class_add_safe (class); + job_class_consider (class); + /* Fork a process then immediately stop it */ TEST_CHILD (pid) { + pid_t pid2; assert0 (ptrace (PTRACE_TRACEME, 0, NULL, 0)); raise (SIGSTOP); - fork (); + pid2 = fork (); + if (pid2) + waitpid (pid2, NULL, 0); exit (0); } + /* Wait for child to be stopped */ assert0 (waitid (P_PID, pid, &info, WSTOPPED | WNOWAIT)); + + /* Set up a fork+exec trace on the child in the parent. + */ assert0 (ptrace (PTRACE_SETOPTIONS, pid, NULL, PTRACE_O_TRACEFORK | PTRACE_O_TRACEEXEC)); + + /* Allow the child to continue */ assert0 (ptrace (PTRACE_CONT, pid, NULL, 0)); job = job_new (class, ""); @@ -7289,7 +7309,6 @@ child_wait_fd_str)); NIH_MUST (nih_str_array_add (&args_copy, NULL, NULL, "--deserialise-ptrace")); - stateful_reexec (); /* Continue in deserialise_ptrace_next */ @@ -7334,6 +7353,8 @@ TEST_EQ (job->trace_forks, 0); assert0 (waitid (P_PID, pid, &info, WSTOPPED | WNOWAIT)); + + /* wait for grand-child */ nih_child_poll (); TEST_NE (job->pid[PROCESS_MAIN], 0); --- upstart-1.8.orig/init/tests/test_util.h +++ upstart-1.8/init/tests/test_util.h @@ -2,6 +2,7 @@ #define TEST_UTIL_H #include +#include "event_operator.h" /* TEST_ENSURE_CLEAN_ENV: * @@ -28,6 +29,10 @@ TEST_LIST_EMPTY (nih_timers); \ } \ \ + if (nih_child_watches) { \ + TEST_LIST_EMPTY (nih_child_watches); \ + } \ + \ if (events) { \ TEST_LIST_EMPTY (events); \ } \ @@ -299,6 +304,13 @@ (sizeof (array) / sizeof (array[0])) /* Prototypes */ -extern int string_check (const char *a, const char *b); +int string_check (const char *a, const char *b) + __attribute__ ((warn_unused_result)); + +int event_operator_diff (EventOperator *a, EventOperator *b) + __attribute__ ((warn_unused_result)); + +Session * session_from_chroot (const char *chroot) + __attribute__ ((warn_unused_result)); #endif /* TEST_UTIL_H */ --- upstart-1.8.orig/init/tests/test_job_process.c +++ upstart-1.8/init/tests/test_job_process.c @@ -8047,6 +8047,7 @@ class->expect = EXPECT_STOP; TEST_ALLOC_FAIL { + pid_t tmp_pid; TEST_ALLOC_SAFE { job = job_new (class, ""); @@ -8060,7 +8061,10 @@ exit (0); } - assert0 (waitid (P_PID, pid, &info, WSTOPPED | WNOWAIT)); + tmp_pid = waitid (P_PID, pid, &info, WSTOPPED | WNOWAIT); + if (tmp_pid < 0) + printf("waitid failed: %m"); + assert0 (tmp_pid); job->goal = JOB_START; job->state = JOB_SPAWNED; --- upstart-1.8.orig/init/tests/test_event_operator.c +++ upstart-1.8/init/tests/test_event_operator.c @@ -1327,7 +1327,9 @@ { JobClass *job = NULL; EventOperator *oper1, *oper2; - char *oper1_string; + nih_local char *oper1_string = NULL; + nih_local char *oper2_string = NULL; + int ret; struct test_operator { char *description; @@ -1375,19 +1377,37 @@ for (test = test_operators; test && test->value; test++) { + json_object *json; + TEST_FEATURE (test->description); oper1 = parse_on_simple (job, "start", test->value); TEST_NE_P (oper1, NULL); - /* Ideally we would exercise allocation here, - * but NIH_MUST is being used. + json = event_operator_serialise_all (oper1); + TEST_NE_P (json, NULL); + + oper2 = event_operator_deserialise_all (job, json); + TEST_NE_P (oper2, NULL); + + /* Test the new, full serialisation format */ + ret = event_operator_diff (oper1, oper2); + assert0 (ret); + + /* Test the original string-based serialisation + * format. */ oper1_string = event_operator_collapse (oper1); TEST_NE_P (oper1_string, NULL); - oper2 = parse_on_simple (job, "start", oper1_string); - TEST_NE_P (oper2, NULL); + + oper2_string = event_operator_collapse (oper2); + TEST_NE_P (oper2_string, NULL); + + TEST_EQ_STR (oper1_string, oper2_string); + + + json_object_put (json); TEST_EQ (oper1->value, oper2->value); TEST_EQ (oper1->type, oper2->type); --- upstart-1.8.orig/init/tests/test_conf.c +++ upstart-1.8/init/tests/test_conf.c @@ -45,8 +45,18 @@ #include "job_class.h" #include "job.h" #include "conf.h" +#include "event.h" +#include "job_process.h" +#include "blocked.h" #include "test_util.h" +/** + * JOB_STOP_SECONDS: + * + * Number of attempts to make to check that job has stopped. + **/ +#define JOB_STOP_ATTEMPTS 10 + void test_source_new (void) { @@ -4537,9 +4547,22 @@ void test_source_reload (void) { - FILE *f; - ConfSource *source1, *source2, *source3; - char dirname[PATH_MAX], filename[PATH_MAX]; + FILE *f; + ConfSource *source1, *source2, *source3; + char dirname[PATH_MAX], filename[PATH_MAX], filename2[PATH_MAX]; + Event *event1; + Event *event2; + NihChildWatch *watch; + JobClass *class1; + JobClass *class2; + JobClass *registered; + JobClass *best; + Job *job; + int attempts; + int got = 0; + int result[3] = {FALSE, FALSE, FALSE}; + unsigned int types[3] = {EVENT_MATCH, EVENT_MATCH, EVENT_AND}; + int i=0; /* Check that we can reload all sources, and that errors are warned * about and not returned. @@ -4607,6 +4630,286 @@ rmdir (dirname); nih_log_set_priority (NIH_LOG_MESSAGE); + + /************************************************************/ + /* - Create 2 jobs. + * - Emit an event causing one jobs start on condition to match + * such that it runs. + * - Ensure that when the job that has runs parent JobClass is destroyed + * that does not also result in the destruction of the event needed + * by the other job. + */ + TEST_FUNCTION ("ensure reload does not destroy a blocked event used by another job"); + + conf_init (); + event_init (); + job_class_environment_init (); + + TEST_ENSURE_CLEAN_ENV (); + + TEST_FILENAME (dirname); + mkdir (dirname, 0755); + + strcpy (filename, dirname); + source1 = conf_source_new (NULL, filename, CONF_JOB_DIR); + + strcpy (filename, dirname); + strcat (filename, "/rc-sysinit.conf"); + + f = fopen (filename, "w"); + fprintf (f, "start on filesystem and static-network-up\n"); + fprintf (f, "exec true\n"); + fclose (f); + + strcpy (filename2, dirname); + strcat (filename2, "/foo.conf"); + + f = fopen (filename2, "w"); + fprintf (f, "start on filesystem\n"); + fprintf (f, "exec true\n"); + fclose (f); + + watch = NIH_MUST (nih_child_add_watch (NULL, -1, NIH_CHILD_ALL, + job_process_handler, NULL)); + + /* initial load */ + conf_reload (); + + class1 = job_class_get_registered ("rc-sysinit", NULL); + TEST_NE_P (class1, NULL); + + class2 = job_class_get_registered ("foo", NULL); + TEST_NE_P (class2, NULL); + + TEST_LIST_EMPTY (events); + event1 = event_new (NULL, "filesystem", NULL); + TEST_NE_P (event1, NULL); + TEST_LIST_NOT_EMPTY (events); + + /* cause foo to run */ + event_poll (); + + /* wait for a reasonable time for the job to stop */ + attempts = 0; + got = 0; + while (TRUE) { + nih_child_poll (); + NIH_HASH_FOREACH (class2->instances, iter) { + Job *job = (Job *)iter; + if (job->goal == JOB_STOP) { + got = 1; + break; + } + } + + if (got || attempts == JOB_STOP_ATTEMPTS) + break; + + sleep (1); + attempts++; + } + + TEST_EQ (got, 1); + + TEST_LIST_EMPTY (&event1->blocking); + + job = (Job *)nih_hash_lookup (class2->instances, ""); + TEST_NE_P (job, NULL); + + TEST_LIST_NOT_EMPTY (events); + event_poll (); + + TEST_LIST_NOT_EMPTY (events); + + /* actual reload */ + conf_reload (); + event_poll (); + + /* XXX: this is the point where older versions of upstart + * would fail since the destruction of the 'foo' job would have + * incorrectly destroyed the 'filesystem' event. + */ + TEST_LIST_NOT_EMPTY (events); + + /* XXX: This will only free the associated *job* + * if it is not running. + */ + nih_free (source1); + + assert0 (unlink (filename)); + assert0 (unlink (filename2)); + assert0 (rmdir (dirname)); + nih_free (event1); + nih_free (watch); + + TEST_ENSURE_CLEAN_ENV (); + + /************************************************************/ + /* + * - Create job with 'start on bar and baz' condition. + * - emit bar. + * - reload. + * - emit baz. + * - expect job to run. + */ + TEST_FUNCTION ("ensure .conf reload causes waiting job to run when 'start on' matches"); + + TEST_ENSURE_CLEAN_ENV (); + + TEST_FILENAME (dirname); + mkdir (dirname, 0755); + + strcpy (filename, dirname); + source1 = conf_source_new (NULL, filename, CONF_JOB_DIR); + + strcpy (filename, dirname); + strcat (filename, "/foo.conf"); + + f = fopen (filename, "w"); + fprintf (f, "start on bar and baz\n"); + fprintf (f, "exec true\n"); + fclose (f); + + watch = NIH_MUST (nih_child_add_watch (NULL, -1, NIH_CHILD_ALL, + job_process_handler, NULL)); + + /* initial load */ + conf_reload (); + + registered = job_class_get_registered ("foo", NULL); + TEST_NE_P (registered, NULL); + + best = conf_select_job (registered->name, registered->session); + TEST_NE_P (best, NULL); + + /* give job a chance to run - we don't expect it to though */ + event_poll (); + + /* there should only be a single JobClass */ + TEST_EQ_P (registered, best); + + TEST_LIST_EMPTY (events); + + NIH_TREE_FOREACH_POST (&best->start_on->node, iter) { + EventOperator *oper = (EventOperator *)iter; + TEST_EQ(oper->value, result[i]); + TEST_EQ(oper->type, types[i]); + i++; + } + i = 0; + + event1 = event_new (NULL, "bar", NULL); + TEST_NE_P (event1, NULL); + TEST_LIST_NOT_EMPTY (events); + + event_poll (); + + result[0] = TRUE; + NIH_TREE_FOREACH_POST (&best->start_on->node, iter) { + EventOperator *oper = (EventOperator *)iter; + TEST_EQ(oper->value, result[i]); + TEST_EQ(oper->type, types[i]); + i++; + } + i = 0; + + /* actual reload */ + conf_reload (); + event_poll (); + + TEST_EQ (event1->blockers, 1); + + /* JobClass should have been destroyed and recreated */ + class1 = job_class_get_registered ("foo", NULL); + TEST_NE_P (class1, registered); + + registered = class1; + + best = conf_select_job (registered->name, registered->session); + TEST_NE_P (best, NULL); + + TEST_EQ_P (registered, best); + + NIH_TREE_FOREACH_POST (&best->start_on->node, iter) { + EventOperator *oper = (EventOperator *)iter; + TEST_EQ(oper->value, result[i]); + TEST_EQ(oper->type, types[i]); + i++; + } + result[0] = FALSE; + i = 0; + + f = fopen (filename, "w"); + fprintf (f, "start on baz and bar\n"); + fprintf (f, "exec true\n"); + fclose (f); + + /* reload again */ + conf_reload (); + event_poll (); + + TEST_EQ (event1->blockers, 1); + + /* JobClass should have been destroyed and recreated */ + class1 = job_class_get_registered ("foo", NULL); + TEST_NE_P (class1, registered); + + registered = class1; + + best = conf_select_job (registered->name, registered->session); + TEST_NE_P (best, NULL); + + TEST_EQ_P (registered, best); + + result[1] = TRUE; + NIH_TREE_FOREACH_POST (&best->start_on->node, iter) { + EventOperator *oper = (EventOperator *)iter; + TEST_EQ(oper->value, result[i]); + TEST_EQ(oper->type, types[i]); + i++; + } + + event2 = event_new (NULL, "baz", NULL); + TEST_NE_P (event2, NULL); + TEST_LIST_NOT_EMPTY (events); + + /* cause foo to run */ + event_poll (); + + /* wait for a reasonable time for the job to stop */ + attempts = 0; + got = 0; + while (TRUE) { + nih_child_poll (); + + NIH_HASH_FOREACH (class1->instances, iter) { + Job *job = (Job *)iter; + if (job->goal == JOB_STOP) { + got = 1; + break; + } + } + + if (got || attempts == JOB_STOP_ATTEMPTS) + break; + + sleep (1); + attempts++; + } + + TEST_EQ (got, 1); + + /* force the events to be freed via event_finished() */ + event_poll (); + + TEST_LIST_EMPTY (events); + + nih_free (source1); + nih_free (watch); + + TEST_ENSURE_CLEAN_ENV (); + + /************************************************************/ } --- upstart-1.8.orig/init/tests/test_state.c +++ upstart-1.8/init/tests/test_state.c @@ -3,7 +3,7 @@ * test_state.c - test suite for init/state.c and other * associated serialisation and deserialisation routines. * - * Copyright © 2012 Canonical Ltd. + * Copyright © 2012-2013 Canonical Ltd. * Author: James Hunt * * This program is free software; you can redistribute it and/or modify @@ -40,6 +40,7 @@ #include "session.h" #include "process.h" #include "event.h" +#include "event_operator.h" #include "environ.h" #include "conf.h" #include "job_class.h" @@ -82,11 +83,14 @@ * If ALREADY_SEEN_SET is specified, the first function that understands * this type will _change_ the value to one of the other values based on * the action the function performs (for example, job_diff() changes - * ALREADY_SEEN_SET to ALREADY_SEEN_JOB). + * ALREADY_SEEN_SET to ALREADY_SEEN_JOB and conf_source_diff() changes + * ALREADY_SEEN_SET to ALREADY_SEEN_SOURCE). **/ typedef enum { ALREADY_SEEN_SET, ALREADY_SEEN_EVENT, + ALREADY_SEEN_SOURCE, + ALREADY_SEEN_FILE, ALREADY_SEEN_BLOCKED, ALREADY_SEEN_JOB, ALREADY_SEEN_LAST @@ -142,13 +146,24 @@ int blocked_diff (const Blocked *a, const Blocked *b, AlreadySeen seen) __attribute__ ((warn_unused_result)); -void test_upstart1_6_upgrade (const char *conf_file, const char *path); +void test_upstart1_6_upgrade (const char *path); +void test_upstart1_8_upgrade (const char *path); +void test_upstart_full_serialise_without_apparmor_upgrade (const char *path); + +ConfSource * conf_source_from_path (const char *path, + ConfSourceType type, + const Session *session) + __attribute__ ((warn_unused_result)); + +int conf_source_diff (const ConfSource *a, const ConfSource *b, AlreadySeen seen) + __attribute__ ((warn_unused_result)); + +int conf_file_diff (const ConfFile *a, const ConfFile *b, AlreadySeen seen) + __attribute__ ((warn_unused_result)); /** * TestDataFile: * - * @conf_file: Name of ConfFile that must be created prior to - * deserialising JSON data in @filename. * @filename: basename of data file, * @func: function to run to test @filename. * @@ -156,16 +171,11 @@ * version of Upstart is able to deserialise all previous JSON data file * format versions. * - * @conf_file is required since we do not currently serialise ConfFile - * and ConfSource objects so these entities must be created immediately - * prior to attempting deserialisation. - * * @func returns nothing so is expected to assert on any error. **/ typedef struct test_data_file { - char *conf_file; - char *filename; - void (*func) (const char *conf_file, const char *path); + char *filename; + void (*func) (const char *path); } TestDataFile; /** @@ -174,9 +184,11 @@ * Array of data files to test. **/ TestDataFile test_data_files[] = { - { "bar", "upstart-1.6.json", test_upstart1_6_upgrade }, + { "upstart-1.6.json", test_upstart1_6_upgrade }, + { "upstart-1.8.json", test_upstart1_8_upgrade }, + { "upstart-1.8+full_serialisation-apparmor.json", test_upstart_full_serialise_without_apparmor_upgrade }, - { NULL, NULL, NULL } + { NULL, NULL } }; /* Data with some embedded nulls */ @@ -513,6 +525,10 @@ if (string_check (export_a, export_b)) goto fail; + if (event_operator_diff (a->start_on, b->start_on)) + goto fail; + + /* Check string values too for complete overkill :) */ if (a->start_on) condition_a = event_operator_collapse (a->start_on); @@ -757,7 +773,7 @@ } /** - * blocking_diff + * blocking_diff: * @a: first list of Blocked objects, * @b: second list of Blocked objects, * @seen: object type that has already been seen. @@ -791,7 +807,7 @@ } /** - * blocked_diff + * blocked_diff: * @a: first Blocked, * @b: second Blocked, * @seen: object type that has already been seen. @@ -847,6 +863,100 @@ return 1; } +/** + * conf_source_diff: + * @a: first ConfSource, + * @b: second ConfSource, + * @seen: object type that has already been seen. + * + * Compare two ConfSource objects for equivalence. + * + * Returns: 0 if @a and @b are identical, else 1. + **/ +int +conf_source_diff (const ConfSource *a, const ConfSource *b, AlreadySeen seen) +{ + if (seen == ALREADY_SEEN_SOURCE) + return 0; + + if (seen == ALREADY_SEEN_SET) + seen = ALREADY_SEEN_SOURCE; + + if (! a && ! b) + return 0; + + if ((! a && b) || (a && ! b)) + goto fail; + + if (session_diff (a->session, b->session)) + goto fail; + + if (obj_string_check (a, b, path)) + goto fail; + + if (obj_num_check (a, b, type)) + goto fail; + + if (obj_num_check (a, b, flag)) + goto fail; + + TEST_TWO_HASHES_FOREACH (a->files, b->files, iter1, iter2) { + ConfFile *file1 = (ConfFile *)iter1; + ConfFile *file2 = (ConfFile *)iter2; + + if (conf_file_diff (file1, file2, seen)) + goto fail; + } + + return 0; + +fail: + return 1; +} + +/** + * conf_file_diff: + * @a: first ConfFile, + * @b: second ConfFile, + * @seen: object type that has already been seen. + * + * Compare two ConfFile objects for equivalence. + * + * Returns: 0 if @a and @b are identical, else 1. + **/ +int +conf_file_diff (const ConfFile *a, const ConfFile *b, AlreadySeen seen) +{ + if (seen == ALREADY_SEEN_FILE) + return 0; + + if (seen == ALREADY_SEEN_SET) + seen = ALREADY_SEEN_FILE; + + if (! a && ! b) + return 0; + + if ((! a && b) || (a && ! b)) + goto fail; + + if (obj_string_check (a, b, path)) + goto fail; + + if (conf_source_diff (a->source, b->source, seen)) + goto fail; + + if (obj_num_check (a, b, flag)) + goto fail; + + if (job_class_diff (a->job, b->job, seen, TRUE)) + goto fail; + + return 0; + +fail: + return 1; +} + void test_session_serialise (void) { @@ -1045,7 +1155,9 @@ nih_local char *json_string = NULL; nih_local char *parent_str = NULL; ConfSource *source = NULL; + ConfSource *new_source = NULL; ConfFile *file; + ConfFile *new_file; JobClass *class; JobClass *new_class; Job *job; @@ -1074,10 +1186,12 @@ nih_list_init (&blocked_list); TEST_LIST_EMPTY (&blocked_list); + TEST_LIST_EMPTY (conf_sources); source = conf_source_new (NULL, "/tmp/foo", CONF_JOB_DIR); TEST_NE_P (source, NULL); + TEST_LIST_NOT_EMPTY (conf_sources); - file = conf_file_new (source, "/tmp/foo/bar"); + file = conf_file_new (source, "/tmp/foo/bar.conf"); TEST_NE_P (file, NULL); class = file->job = job_class_new (file, "bar", NULL); @@ -1116,10 +1230,12 @@ nih_list_init (&blocked_list); + TEST_LIST_EMPTY (conf_sources); source = conf_source_new (NULL, "/tmp/foo", CONF_JOB_DIR); TEST_NE_P (source, NULL); + TEST_LIST_NOT_EMPTY (conf_sources); - file = conf_file_new (source, "/tmp/foo/bar"); + file = conf_file_new (source, "/tmp/foo/bar.conf"); TEST_NE_P (file, NULL); class = file->job = job_class_new (file, "bar", NULL); @@ -1181,10 +1297,12 @@ TEST_NE_P (event, NULL); TEST_LIST_EMPTY (&event->blocking); + TEST_LIST_EMPTY (conf_sources); source = conf_source_new (NULL, "/tmp/foo", CONF_JOB_DIR); TEST_NE_P (source, NULL); + TEST_LIST_NOT_EMPTY (conf_sources); - file = conf_file_new (source, "/tmp/foo/bar"); + file = conf_file_new (source, "/tmp/foo/bar.conf"); TEST_NE_P (file, NULL); /* Create class with NULL session */ class = file->job = job_class_new (NULL, "bar", NULL); @@ -1209,14 +1327,22 @@ assert0 (state_to_string (&json_string, &len)); TEST_GT (len, 0); - /* XXX: We don't remove the source as these are not - * recreated on re-exec, so we'll re-use the existing one. + /* ConfSources are now recreated on re-exec, so remove the + * original. */ + nih_free (source); + TEST_LIST_EMPTY (conf_sources); + nih_list_remove (&class->entry); nih_list_remove (&event->entry); + /* destroying the ConfSource will mark the JobClass as deleted, + * so undo that to allow comparison. + */ + nih_assert (class->deleted); + class->deleted = FALSE; + TEST_LIST_EMPTY (events); - TEST_LIST_NOT_EMPTY (conf_sources); TEST_HASH_EMPTY (job_classes); assert0 (state_from_string (json_string)); @@ -1240,8 +1366,21 @@ nih_free (event); nih_free (new_event); + + /* Check ConfSource got recreated, and then destroy it */ + source = NULL; + NIH_LIST_FOREACH (conf_sources, iter) { + source = (ConfSource *)iter; + if (! strcmp (source->path, "/tmp/foo") && source->type == CONF_JOB_DIR) + break; + } + TEST_NE_P (source, NULL); + + TEST_FREE_TAG (new_class); + /* This will remove new_class too */ nih_free (source); - nih_free (new_class); + + TEST_FREE (new_class); TEST_HASH_EMPTY (job_classes); @@ -1251,16 +1390,9 @@ TEST_HASH_EMPTY (job_classes); /*******************************/ - /* We don't currently handle user+chroot jobs, so let's assert - * that behaviour. - */ TEST_FEATURE ("ensure BLOCKED_JOB with non-NULL session is ignored"); TEST_LIST_EMPTY (sessions); - TEST_LIST_EMPTY (events); - TEST_LIST_EMPTY (conf_sources); - TEST_HASH_EMPTY (job_classes); - session = session_new (NULL, "/my/session"); TEST_NE_P (session, NULL); session->conf_path = NIH_MUST (nih_strdup (session, "/lives/here")); @@ -1269,15 +1401,18 @@ /* We simulate a user job being blocked by a system event, hence * the session is not associated with the event. */ + TEST_LIST_EMPTY (events); event = event_new (NULL, "Christmas", NULL); TEST_NE_P (event, NULL); TEST_LIST_EMPTY (&event->blocking); + TEST_LIST_EMPTY (conf_sources); source = conf_source_new (NULL, "/tmp/foo", CONF_JOB_DIR); source->session = session; TEST_NE_P (source, NULL); + TEST_LIST_NOT_EMPTY (conf_sources); - file = conf_file_new (source, "/tmp/foo/bar"); + file = conf_file_new (source, "/tmp/foo/bar.conf"); TEST_NE_P (file, NULL); /* Create class with non-NULL session, simulating a user job */ @@ -1303,15 +1438,19 @@ assert0 (state_to_string (&json_string, &len)); TEST_GT (len, 0); - /* XXX: We don't remove the source as these are not - * recreated on re-exec, so we'll re-use the existing one. + /* ConfSources are now recreated on re-exec, so remove the + * original from the list. */ + nih_list_remove (&source->entry); + TEST_LIST_EMPTY (conf_sources); + nih_list_remove (&class->entry); nih_free (event); + nih_list_remove (&session->entry); + TEST_LIST_EMPTY (sessions); TEST_LIST_EMPTY (events); - TEST_LIST_NOT_EMPTY (conf_sources); TEST_HASH_EMPTY (job_classes); assert0 (state_from_string (json_string)); @@ -1319,21 +1458,44 @@ TEST_LIST_NOT_EMPTY (conf_sources); TEST_LIST_NOT_EMPTY (events); + TEST_LIST_NOT_EMPTY (sessions); + new_session = session_from_chroot ("/my/session"); + TEST_NE_P (new_session, NULL); + assert0 (session_diff (session, new_session)); + /* We don't expect any job_classes since the serialised one * related to a user session. */ TEST_HASH_EMPTY (job_classes); - /* However, the session itself will exist */ - TEST_LIST_NOT_EMPTY (sessions); + new_source = conf_source_from_path ("/tmp/foo", CONF_JOB_DIR, new_session); + TEST_NE_P (new_source, NULL); + + new_file = (ConfFile *)nih_hash_lookup (new_source->files, "/tmp/foo/bar.conf"); + TEST_NE_P (new_file, NULL); + + /* We don't expect the original JobClass to have been + * deserialised since it has a non-NULL session. + */ + TEST_EQ_P (new_file->job, NULL); + + /* Disassociate the old JobClass from its ConfFile to allow a + * diff. + */ + file->job = NULL; + + assert0 (conf_source_diff (source, new_source, ALREADY_SEEN_SET)); new_session = (Session *)nih_list_remove (sessions->next); nih_free (session); nih_free (new_session); + nih_free (source); + nih_free (new_source); + nih_free (class); + event = (Event *)nih_list_remove (events->next); nih_free (event); - nih_free (source); TEST_LIST_EMPTY (sessions); TEST_LIST_EMPTY (events); @@ -1354,10 +1516,12 @@ TEST_LIST_NOT_EMPTY (events); + TEST_LIST_EMPTY (conf_sources); source = conf_source_new (NULL, "/tmp/foo", CONF_JOB_DIR); TEST_NE_P (source, NULL); + TEST_LIST_NOT_EMPTY (conf_sources); - file = conf_file_new (source, "/tmp/foo/bar"); + file = conf_file_new (source, "/tmp/foo/bar.conf"); TEST_NE_P (file, NULL); class = file->job = job_class_new (NULL, "bar", NULL); @@ -1379,16 +1543,15 @@ assert0 (state_to_string (&json_string, &len)); TEST_GT (len, 0); - /* XXX: We don't remove the source as these are not - * recreated on re-exec, so we'll re-use the existing one. - */ + /* remove the source as these are now recreated on re-exec */ + nih_list_remove (&source->entry); nih_list_remove (&event->entry); nih_list_remove (&class->entry); TEST_HASH_EMPTY (job_classes); TEST_LIST_EMPTY (events); TEST_LIST_EMPTY (sessions); - TEST_LIST_NOT_EMPTY (conf_sources); + TEST_LIST_EMPTY (conf_sources); assert0 (state_from_string (json_string)); @@ -1407,12 +1570,15 @@ assert0 (event_diff (event, new_event, ALREADY_SEEN_SET)); - nih_free (event); + new_source = conf_source_from_path ("/tmp/foo", CONF_JOB_DIR, NULL); + TEST_NE_P (new_source, NULL); + + assert0 (conf_source_diff (source, new_source, ALREADY_SEEN_SET)); - /* free the event created "on re-exec" */ + nih_free (event); nih_free (new_event); nih_free (source); - nih_free (new_class); + nih_free (new_source); TEST_LIST_EMPTY (sessions); TEST_LIST_EMPTY (events); @@ -1431,10 +1597,12 @@ TEST_NE_P (event, NULL); TEST_LIST_EMPTY (&event->blocking); + TEST_LIST_EMPTY (conf_sources); source = conf_source_new (NULL, "/tmp/foo", CONF_JOB_DIR); TEST_NE_P (source, NULL); + TEST_LIST_NOT_EMPTY (conf_sources); - file = conf_file_new (source, "/tmp/foo/bar"); + file = conf_file_new (source, "/tmp/foo/bar.conf"); TEST_NE_P (file, NULL); class = file->job = job_class_new (NULL, "bar", NULL); @@ -1447,6 +1615,7 @@ TEST_NE_P (job, NULL); TEST_HASH_NOT_EMPTY (class->instances); + /* Simulate event_operator_events() */ blocked = blocked_new (NULL, BLOCKED_EVENT, event); TEST_NE_P (blocked, NULL); @@ -1459,11 +1628,12 @@ nih_list_remove (&event->entry); nih_list_remove (&class->entry); + nih_list_remove (&source->entry); TEST_HASH_EMPTY (job_classes); TEST_LIST_EMPTY (events); TEST_LIST_EMPTY (sessions); - TEST_LIST_NOT_EMPTY (conf_sources); + TEST_LIST_EMPTY (conf_sources); assert0 (state_from_string (json_string)); @@ -1472,6 +1642,9 @@ TEST_HASH_NOT_EMPTY (job_classes); TEST_LIST_EMPTY (sessions); + new_source = conf_source_from_path ("/tmp/foo", CONF_JOB_DIR, NULL); + TEST_NE_P (new_source, NULL); + new_class = (JobClass *)nih_hash_lookup (job_classes, "bar"); TEST_NE_P (new_class, NULL); nih_list_remove (&new_class->entry); @@ -1482,13 +1655,16 @@ new_job = (Job *)nih_hash_lookup (new_class->instances, ""); TEST_NE_P (new_job, NULL); + TEST_EQ (event->blockers, 1); + TEST_EQ (new_event->blockers, 1); + assert0 (job_diff (job, new_job, ALREADY_SEEN_SET, TRUE)); assert0 (job_class_diff (class, new_class, ALREADY_SEEN_SET, TRUE)); nih_free (event); nih_free (new_event); nih_free (source); - nih_free (new_class); + nih_free (new_source); TEST_LIST_EMPTY (sessions); TEST_LIST_EMPTY (events); @@ -1512,6 +1688,7 @@ event_init (); session_init (); + job_class_init (); TEST_GROUP ("Event serialisation and deserialisation"); @@ -1696,6 +1873,42 @@ TEST_LIST_EMPTY (events); /*******************************/ + + TEST_FEATURE ("with failed"); + + TEST_LIST_EMPTY (events); + TEST_HASH_EMPTY (job_classes); + TEST_LIST_EMPTY (sessions); + + event = event_new (NULL, "foo", NULL); + TEST_NE_P (event, NULL); + TEST_LIST_NOT_EMPTY (events); + + /* Force failed */ + event->failed = TRUE; + + json = event_serialise (event); + TEST_NE_P (json, NULL); + + nih_list_remove (&event->entry); + + new_event = event_deserialise (json); + TEST_NE_P (json, NULL); + + assert0 (event_diff (event, new_event, ALREADY_SEEN_SET)); + TEST_EQ (new_event->failed, TRUE); + + nih_free (event); + nih_free (new_event); + + /*******************************/ + + TEST_LIST_EMPTY (sessions); + TEST_LIST_EMPTY (events); + TEST_HASH_EMPTY (job_classes); + TEST_LIST_EMPTY (sessions); + + /*******************************/ } void @@ -1717,6 +1930,12 @@ mode_t old_perms; int status; + conf_init (); + log_unflushed_init (); + + TEST_TRUE (NIH_LIST_EMPTY (conf_sources)); + TEST_TRUE (NIH_LIST_EMPTY (log_unflushed_files)); + TEST_GROUP ("Log serialisation and deserialisation"); /*******************************/ @@ -1871,7 +2090,7 @@ source = conf_source_new (NULL, "/tmp/foo", CONF_JOB_DIR); TEST_NE_P (source, NULL); - file = conf_file_new (source, "/tmp/foo/bar"); + file = conf_file_new (source, "/tmp/foo/bar.conf"); TEST_NE_P (file, NULL); class = file->job = job_class_new (NULL, "bar", NULL); @@ -1880,11 +2099,22 @@ TEST_TRUE (job_class_consider (class)); TEST_HASH_NOT_EMPTY (job_classes); - /* JobClass with no associated Jobs does not need to be - * serialised. + /* BEHAVIOURAL CHANGE: + * + * Previously, a JobClass with no associated Jobs would + * not be serialised (since, as there were no "running" jobs + * associated with it, it was considered unnecessary). + * + * However, we now serialise *all* JobClasses regardless since + * in the case of a stateful re-exec, we need as much state as + * possible, particularly since Events have always been fully + * serialised, and if Event->blockers is non-zero, it is + * necessary to manipulate the 'start on' EventOperator tree for + * non-running jobs post-reexec to correspond to the + * Event->blockers value. */ json = job_class_serialise (class); - TEST_EQ_P (json, NULL); + TEST_NE_P (json, NULL); nih_free (source); @@ -1896,7 +2126,7 @@ source = conf_source_new (NULL, "/tmp/foo", CONF_JOB_DIR); TEST_NE_P (source, NULL); - file = conf_file_new (source, "/tmp/foo/bar"); + file = conf_file_new (source, "/tmp/foo/bar.conf"); TEST_NE_P (file, NULL); class = file->job = job_class_new (NULL, "bar", NULL); @@ -1945,7 +2175,7 @@ source = conf_source_new (NULL, "/tmp/foo", CONF_JOB_DIR); TEST_NE_P (source, NULL); - file = conf_file_new (source, "/tmp/foo/bar"); + file = conf_file_new (source, "/tmp/foo/bar.conf"); TEST_NE_P (file, NULL); class = file->job = job_class_new (NULL, "bar", NULL); @@ -2958,17 +3188,32 @@ datafile->filename)); TEST_FEATURE (name); + /* Potentially recreate the lists and hashes here which + * allows individual tests to free them and assign to + * NULL. + */ + conf_init (); + session_init (); + event_init (); + control_init (); + job_class_init (); + path = NIH_MUST (nih_sprintf (NULL, "%s/%s", TEST_DATA_DIR, datafile->filename)); - datafile->func (datafile->conf_file, path); + /* Ensure environment is clean before test is run */ + TEST_LIST_EMPTY (sessions); + TEST_LIST_EMPTY (events); + TEST_LIST_EMPTY (conf_sources); + TEST_HASH_EMPTY (job_classes); + + datafile->func (path); } } /** * test_upstart1_6_upgrade: * - * @conf_file: name of ConfFile to create prior to running test, * @path: full path to JSON data file to deserialise. * * Test for original Upstart 1.6 serialisation data format containing @@ -2980,17 +3225,13 @@ * is handled correctly. **/ void -test_upstart1_6_upgrade (const char *conf_file, const char *path) +test_upstart1_6_upgrade (const char *path) { nih_local char *json_string = NULL; Event *event; - ConfSource *source; - ConfFile *file; - nih_local char *conf_file_path = NULL; struct stat statbuf; size_t len; - nih_assert (conf_file); nih_assert (path); conf_init (); @@ -3010,23 +3251,14 @@ json_string = nih_file_read (NULL, path, &len); TEST_NE_P (json_string, NULL); - /* Create the ConfSource and ConfFile objects to simulate - * Upstart reading /etc/init on startup. Required since we - * don't currently serialise these objects. - */ - source = conf_source_new (NULL, "/tmp/foo", CONF_JOB_DIR); - TEST_NE_P (source, NULL); - - conf_file_path = NIH_MUST (nih_sprintf (NULL, "%s/%s", - "/tmp/foo", conf_file)); - - file = conf_file_new (source, conf_file_path); - TEST_NE_P (file, NULL); - /* Recreate state from JSON data file */ assert0 (state_from_string (json_string)); - TEST_LIST_NOT_EMPTY (conf_sources); + /* ConfSource and ConfFile objects not serialised in this + * version. + */ + TEST_LIST_EMPTY (conf_sources); + TEST_LIST_NOT_EMPTY (events); TEST_HASH_NOT_EMPTY (job_classes); TEST_LIST_EMPTY (sessions); @@ -3068,8 +3300,226 @@ nih_free (event); nih_free (conf_sources); + nih_free (job_classes); + + events = NULL; + conf_sources = NULL; + job_classes = NULL; + + event_init (); + conf_init (); + job_class_init (); +} + +/** + * test_upstart1_8_upgrade: + * + * @path: full path to JSON data file to deserialise. + * + * Test for Upstart 1.8 serialisation data format where start_on and + * stop_on conditions were encoded as strings, not EventOperators. + **/ +void +test_upstart1_8_upgrade (const char *path) +{ + nih_local char *json_string = NULL; + struct stat statbuf; + size_t len; + + nih_assert (path); + + conf_init (); + session_init (); + event_init (); + control_init (); + job_class_init (); + + TEST_LIST_EMPTY (sessions); + TEST_LIST_EMPTY (events); + TEST_LIST_EMPTY (conf_sources); + TEST_HASH_EMPTY (job_classes); + + /* Check data file exists */ + TEST_EQ (stat (path, &statbuf), 0); + + json_string = nih_file_read (NULL, path, &len); + TEST_NE_P (json_string, NULL); + + /* Recreate state from JSON data file */ + assert0 (state_from_string (json_string)); + + /* ConfSource and ConfFile objects not serialised in this + * version. + */ + TEST_LIST_EMPTY (conf_sources); + + TEST_LIST_NOT_EMPTY (events); + TEST_HASH_NOT_EMPTY (job_classes); + TEST_LIST_EMPTY (sessions); + + nih_free (events); + nih_free (conf_sources); + nih_free (job_classes); + + events = NULL; + conf_sources = NULL; + job_classes = NULL; + + event_init (); + conf_init (); + job_class_init (); +} + + +/** + * test_upstart_full_serialise_without_apparmor_upgrade: + * + * @path: full path to JSON data file to deserialise. + * + * Test that Upstart is able to deserialise the 1.8-format JSON with the + * addition of the full serialisation (including complete EventOperator + * data for JobClass->[start|stop]_on objects) but _without_ the apparmor + * meta-data. + **/ +void +test_upstart_full_serialise_without_apparmor_upgrade (const char *path) +{ + nih_local char *json_string = NULL; + struct stat statbuf; + size_t len; + json_object *json = NULL; + json_object *json_job_classes = NULL; + json_object *json_job_class = NULL; + json_object *json_job_class_stop_on = NULL; + json_object *json_job_class_process = NULL; + json_object *json_job_class_stop_on_node = NULL; + json_object *json_jobs = NULL; + json_object *json_job = NULL; + json_object *json_job_pids = NULL; + json_object *json_job_logs = NULL; + size_t count; + + /* + PROCESS_MAIN, + PROCESS_PRE_START, + PROCESS_POST_START, + PROCESS_PRE_STOP, + PROCESS_POST_STOP, + */ + size_t expected_count = 5; + + nih_assert (path); + + conf_init (); + session_init (); + event_init (); + control_init (); + job_class_init (); + + TEST_LIST_EMPTY (sessions); + TEST_LIST_EMPTY (events); + TEST_LIST_EMPTY (conf_sources); + TEST_HASH_EMPTY (job_classes); + + /* Check data file exists */ + TEST_EQ (stat (path, &statbuf), 0); + + json_string = nih_file_read (NULL, path, &len); + TEST_NE_P (json_string, NULL); + + /* Recreate state from JSON data file */ + assert0 (state_from_string (json_string)); + + TEST_LIST_EMPTY (sessions); + TEST_LIST_NOT_EMPTY (events); + TEST_HASH_NOT_EMPTY (job_classes); + + /* Full serialisation, so we expect some ConfSource objects */ + TEST_LIST_NOT_EMPTY (conf_sources); + + /* Re-read the json, checking for expected content */ + json = json_object_from_file (path); + TEST_NE_P (json, NULL); + + TEST_TRUE (json_object_object_get_ex (json, "job_classes", &json_job_classes)); + TEST_NE_P (json_job_classes, NULL); + + TEST_TRUE (state_check_json_type (json_job_classes, array)); + + /* Look at 2nd JobClass */ + TEST_GE (json_object_array_length (json_job_classes), 2); + json_job_class = json_object_array_get_idx (json_job_classes, 1); + TEST_NE_P (json_job_class, NULL); + TEST_TRUE (state_check_json_type (json_job_class, object)); + + /* Check to ensure we are dealing with the new serialisation + * format where the 'stop on' condition is encoded as a + * full EventOperator object. + */ + TEST_TRUE (json_object_object_get_ex (json_job_class, "stop_on", &json_job_class_stop_on)); + TEST_NE_P (json_job_class_stop_on, NULL); + /* EventOperators are serialised as an array of objects + * representing the tree. + */ + TEST_TRUE (state_check_json_type (json_job_class_stop_on, array)); + + /* Look at the first element */ + json_job_class_stop_on_node = json_object_array_get_idx (json_job_class_stop_on, 0); + TEST_NE_P (json_job_class_stop_on_node, NULL); + TEST_TRUE (state_check_json_type (json_job_class_stop_on_node, object)); + + /* Look for expected EventOperator elements */ + TEST_TRUE (json_object_object_get_ex (json_job_class_stop_on_node, "name", NULL)); + TEST_TRUE (json_object_object_get_ex (json_job_class_stop_on_node, "value", NULL)); + TEST_TRUE (json_object_object_get_ex (json_job_class_stop_on_node, "type", NULL)); + + /* Check to ensure the JobClass does NOT contain the apparmor field */ + TEST_FALSE (json_object_object_get_ex (json_job_class, "apparmor_switch", NULL)); + + TEST_TRUE (json_object_object_get_ex (json_job_class, "process", &json_job_class_process)); + TEST_NE_P (json_job_class_process, NULL); + TEST_TRUE (state_check_json_type (json_job_class_process, array)); + + count = json_object_array_length (json_job_class_process); + TEST_EQ (count, expected_count); + + TEST_TRUE (json_object_object_get_ex (json_job_class, "jobs", &json_jobs)); + TEST_NE_P (json_jobs, NULL); + + TEST_TRUE (state_check_json_type (json_jobs, array)); + + /* Look at first Job */ + json_job = json_object_array_get_idx (json_jobs, 0); + TEST_NE_P (json_job, NULL); + TEST_TRUE (state_check_json_type (json_job, object)); + + /* Check size of Job->pid array is as expected */ + TEST_TRUE (json_object_object_get_ex (json_job, "pid", &json_job_pids)); + TEST_NE_P (json_job_pids, NULL); + TEST_TRUE (state_check_json_type (json_job_pids, array)); + + count = json_object_array_length (json_job_pids); + TEST_EQ (count, expected_count); + + /* Check size of Job->log array is as expected */ + TEST_TRUE (json_object_object_get_ex (json_job, "log", &json_job_logs)); + TEST_NE_P (json_job_logs, NULL); + TEST_TRUE (state_check_json_type (json_job_logs, array)); + + count = json_object_array_length (json_job_logs); + TEST_EQ (count, expected_count); + + nih_free (conf_sources); + conf_sources = NULL; + + nih_free (job_classes); + job_classes = NULL; + + nih_free (events); + events = NULL; } + int main (int argc, char *argv[]) @@ -3098,3 +3548,30 @@ return 0; } + +/** + * conf_source_from_path: + * + * @path: path to consider, + * @type: tyoe of ConfSource to check for, + * @session: session. + * + * Look for a ConfSource with path @path, type @type and session + * @session. + * + * Returns: Matching ConfSource or NULL if not found. + */ +ConfSource * +conf_source_from_path (const char *path, ConfSourceType type, const Session *session) +{ + nih_assert (path); + + NIH_LIST_FOREACH (conf_sources, iter) { + ConfSource *source = (ConfSource *)iter; + if (! strcmp (source->path, path) + && source->type == type && source->session == session) + return source; + } + + return NULL; +} --- upstart-1.8.orig/init/tests/data/upstart-1.8+full_serialisation-apparmor.json +++ upstart-1.8/init/tests/data/upstart-1.8+full_serialisation-apparmor.json @@ -0,0 +1,18201 @@ +{ + "sessions" : [], + "conf_sources" : [ + { + "conf_files" : [], + "session" : 0, + "flag" : 1, + "type" : "CONF_FILE", + "path" : "//etc/init.conf" + }, + { + "conf_files" : [ + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mounted-debugfs" + }, + "flag" : 1, + "path" : "//etc/init/mounted-debugfs.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mountnfs.sh" + }, + "flag" : 1, + "path" : "//etc/init/mountnfs.sh.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "pulseaudio" + }, + "flag" : 1, + "path" : "//etc/init/pulseaudio.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "rc-sysinit" + }, + "flag" : 1, + "path" : "//etc/init/rc-sysinit.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "setvtrgb" + }, + "flag" : 1, + "path" : "//etc/init/setvtrgb.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "lightdm" + }, + "flag" : 1, + "path" : "//etc/init/lightdm.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mountdevsubfs.sh" + }, + "flag" : 1, + "path" : "//etc/init/mountdevsubfs.sh.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mounted-proc" + }, + "flag" : 1, + "path" : "//etc/init/mounted-proc.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "network-interface" + }, + "flag" : 1, + "path" : "//etc/init/network-interface.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "plymouth-log" + }, + "flag" : 1, + "path" : "//etc/init/plymouth-log.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "atd" + }, + "flag" : 1, + "path" : "//etc/init/atd.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "control-alt-delete" + }, + "flag" : 1, + "path" : "//etc/init/control-alt-delete.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "failsafe" + }, + "flag" : 1, + "path" : "//etc/init/failsafe.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "hwclock-save" + }, + "flag" : 1, + "path" : "//etc/init/hwclock-save.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "irqbalance" + }, + "flag" : 1, + "path" : "//etc/init/irqbalance.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "networking" + }, + "flag" : 1, + "path" : "//etc/init/networking.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "ufw" + }, + "flag" : 1, + "path" : "//etc/init/ufw.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "avahi-cups-reload" + }, + "flag" : 1, + "path" : "//etc/init/avahi-cups-reload.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "console-font" + }, + "flag" : 1, + "path" : "//etc/init/console-font.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "modemmanager" + }, + "flag" : 1, + "path" : "//etc/init/modemmanager.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mounted-run" + }, + "flag" : 1, + "path" : "//etc/init/mounted-run.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mounted-tmp" + }, + "flag" : 1, + "path" : "//etc/init/mounted-tmp.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "rc" + }, + "flag" : 1, + "path" : "//etc/init/rc.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "rsyslog" + }, + "flag" : 1, + "path" : "//etc/init/rsyslog.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "shutdown" + }, + "flag" : 1, + "path" : "//etc/init/shutdown.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "jamespage" + }, + "flag" : 1, + "path" : "//etc/init/jamespage.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "plymouth" + }, + "flag" : 1, + "path" : "//etc/init/plymouth.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "anacron" + }, + "flag" : 1, + "path" : "//etc/init/anacron.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mountall-shell" + }, + "flag" : 1, + "path" : "//etc/init/mountall-shell.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mounted-var" + }, + "flag" : 1, + "path" : "//etc/init/mounted-var.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "plymouth-upstart-bridge" + }, + "flag" : 1, + "path" : "//etc/init/plymouth-upstart-bridge.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "tty1" + }, + "flag" : 1, + "path" : "//etc/init/tty1.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "udev-fallback-graphics" + }, + "flag" : 1, + "path" : "//etc/init/udev-fallback-graphics.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "udev-finish" + }, + "flag" : 1, + "path" : "//etc/init/udev-finish.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "wait-for-state" + }, + "flag" : 1, + "path" : "//etc/init/wait-for-state.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "acpid" + }, + "flag" : 1, + "path" : "//etc/init/acpid.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "alsa-restore" + }, + "flag" : 1, + "path" : "//etc/init/alsa-restore.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "alsa-store" + }, + "flag" : 1, + "path" : "//etc/init/alsa-store.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "apport" + }, + "flag" : 1, + "path" : "//etc/init/apport.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "cron" + }, + "flag" : 1, + "path" : "//etc/init/cron.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mountall-bootclean.sh" + }, + "flag" : 1, + "path" : "//etc/init/mountall-bootclean.sh.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "plymouth-stop" + }, + "flag" : 1, + "path" : "//etc/init/plymouth-stop.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "procps" + }, + "flag" : 1, + "path" : "//etc/init/procps.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "hwclock" + }, + "flag" : 1, + "path" : "//etc/init/hwclock.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "james" + }, + "flag" : 1, + "path" : "//etc/init/james.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "james_daemon" + }, + "flag" : 1, + "path" : "//etc/init/james_daemon.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "container-detect" + }, + "flag" : 1, + "path" : "//etc/init/container-detect.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "cups-browsed" + }, + "flag" : 1, + "path" : "//etc/init/cups-browsed.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mountall" + }, + "flag" : 1, + "path" : "//etc/init/mountall.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mtab.sh" + }, + "flag" : 1, + "path" : "//etc/init/mtab.sh.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "rcS" + }, + "flag" : 1, + "path" : "//etc/init/rcS.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "whoopsie" + }, + "flag" : 1, + "path" : "//etc/init/whoopsie.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mountall.sh" + }, + "flag" : 1, + "path" : "//etc/init/mountall.sh.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "network-interface-security" + }, + "flag" : 1, + "path" : "//etc/init/network-interface-security.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "tty5" + }, + "flag" : 1, + "path" : "//etc/init/tty5.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "friendly-recovery" + }, + "flag" : 1, + "path" : "//etc/init/friendly-recovery.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mountall-reboot" + }, + "flag" : 1, + "path" : "//etc/init/mountall-reboot.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mounted-dev" + }, + "flag" : 1, + "path" : "//etc/init/mounted-dev.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "tty4" + }, + "flag" : 1, + "path" : "//etc/init/tty4.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "ureadahead-other" + }, + "flag" : 1, + "path" : "//etc/init/ureadahead-other.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "avahi-daemon" + }, + "flag" : 1, + "path" : "//etc/init/avahi-daemon.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "failsafe-x" + }, + "flag" : 1, + "path" : "//etc/init/failsafe-x.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mountkernfs.sh" + }, + "flag" : 1, + "path" : "//etc/init/mountkernfs.sh.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "rfkill-restore" + }, + "flag" : 1, + "path" : "//etc/init/rfkill-restore.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "rfkill-store" + }, + "flag" : 1, + "path" : "//etc/init/rfkill-store.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "systemd-logind" + }, + "flag" : 1, + "path" : "//etc/init/systemd-logind.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "udevtrigger" + }, + "flag" : 1, + "path" : "//etc/init/udevtrigger.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "upstart-socket-bridge" + }, + "flag" : 1, + "path" : "//etc/init/upstart-socket-bridge.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "ureadahead" + }, + "flag" : 1, + "path" : "//etc/init/ureadahead.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "false" + }, + "flag" : 1, + "path" : "//etc/init/false.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "j" + }, + "flag" : 1, + "path" : "//etc/init/j.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "passwd" + }, + "flag" : 1, + "path" : "//etc/init/passwd.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "startpar-bridge" + }, + "flag" : 1, + "path" : "//etc/init/startpar-bridge.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mountall-net" + }, + "flag" : 1, + "path" : "//etc/init/mountall-net.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "mountnfs-bootclean.sh" + }, + "flag" : 1, + "path" : "//etc/init/mountnfs-bootclean.sh.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "network-manager" + }, + "flag" : 1, + "path" : "//etc/init/network-manager.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "resolvconf" + }, + "flag" : 1, + "path" : "//etc/init/resolvconf.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "tty3" + }, + "flag" : 1, + "path" : "//etc/init/tty3.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "checkfs.sh" + }, + "flag" : 1, + "path" : "//etc/init/checkfs.sh.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "dbus" + }, + "flag" : 1, + "path" : "//etc/init/dbus.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "flush-early-job-log" + }, + "flag" : 1, + "path" : "//etc/init/flush-early-job-log.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "network-interface-container" + }, + "flag" : 1, + "path" : "//etc/init/network-interface-container.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "plymouth-ready" + }, + "flag" : 1, + "path" : "//etc/init/plymouth-ready.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "plymouth-splash" + }, + "flag" : 1, + "path" : "//etc/init/plymouth-splash.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "checkroot-bootclean.sh" + }, + "flag" : 1, + "path" : "//etc/init/checkroot-bootclean.sh.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "checkroot.sh" + }, + "flag" : 1, + "path" : "//etc/init/checkroot.sh.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "console-setup" + }, + "flag" : 1, + "path" : "//etc/init/console-setup.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "console" + }, + "flag" : 1, + "path" : "//etc/init/console.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "cups" + }, + "flag" : 1, + "path" : "//etc/init/cups.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "dmesg" + }, + "flag" : 1, + "path" : "//etc/init/dmesg.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "tty2" + }, + "flag" : 1, + "path" : "//etc/init/tty2.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "udev" + }, + "flag" : 1, + "path" : "//etc/init/udev.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "bluetooth" + }, + "flag" : 1, + "path" : "//etc/init/bluetooth.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "bootmisc.sh" + }, + "flag" : 1, + "path" : "//etc/init/bootmisc.sh.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "hostname" + }, + "flag" : 1, + "path" : "//etc/init/hostname.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "hybrid-gfx" + }, + "flag" : 1, + "path" : "//etc/init/hybrid-gfx.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "kmod" + }, + "flag" : 1, + "path" : "//etc/init/kmod.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "tty6" + }, + "flag" : 1, + "path" : "//etc/init/tty6.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "udevmonitor" + }, + "flag" : 1, + "path" : "//etc/init/udevmonitor.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "upstart-file-bridge" + }, + "flag" : 1, + "path" : "//etc/init/upstart-file-bridge.conf" + }, + { + "conf_source" : 1, + "job_class" : { + "session" : 0, + "name" : "upstart-udev-bridge" + }, + "flag" : 1, + "path" : "//etc/init/upstart-udev-bridge.conf" + } + ], + "session" : 0, + "flag" : 1, + "type" : "CONF_JOB_DIR", + "path" : "//etc/init" + } + ], + "job_classes" : [ + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "avahi-cups-reload", + "instance" : "", + "description" : "Reload cups, upon starting avahi-daemon to make sure remote queues are populated", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "reload cups" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Dmitrijs Ledkovs ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/avahi_2dcups_2dreload", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "avahi-daemon" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 681, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 2, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "stopping", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=dbus", + "INSTANCE=", + "UPSTART_EVENTS=filesystem started" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/avahi_2ddaemon/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "stop_on" : [ + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "stopping", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "avahi-daemon", + "instance" : "", + "description" : "mDNS/DNS-SD daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "opts=\"-D\"\n[ -e \"/etc/eucalyptus/avahi-daemon.conf\" ] && opts=\"${opts} -f /etc/eucalyptus/avahi-daemon.conf\"\nexec avahi-daemon ${opts}\n" + }, + { + "script" : 1, + "command" : "/lib/init/apparmor-profile-load usr.sbin.avahi-daemon\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/avahi_2ddaemon", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "filesystem", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountall-net", + "instance" : "", + "description" : "Mount network filesystems", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "PID=$(status mountall 2>/dev/null | sed -e '/start\\/running,/{s/.*,[^0-9]*//;q};d')\n[ -n \"$PID\" ] && kill -USR1 $PID || true\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/mountall_2dnet", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "net-device-up", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountnfs_2dbootclean_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountnfs-bootclean.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountnfs_2dbootclean_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "virtual-filesystems", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "passwd", + "instance" : "", + "description" : "Clear passwd locks", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "rm -f /etc/gshadow.lock /etc/shadow.lock /etc/passwd.lock /etc/group.lock" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/passwd", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "filesystem", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [ + "deconfiguring-networking", + "unmounted-remote-filesystems" + ], + "session" : 0, + "debug" : 0, + "export" : [ + "RUNLEVEL", + "PREVLEVEL" + ], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[!$RUNLEVEL]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_OUTPUT", + "kill_signal" : 15, + "name" : "rc", + "instance" : "", + "description" : "System V runlevel compatibility", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "/etc/init.d/rc $RUNLEVEL" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Scott James Remnant ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "INIT_VERBOSE" + ], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/rc", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[0123456]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 673, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[06]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=filesystem" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/rsyslog/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "env" : [ + "[06]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "rsyslog", + "instance" : "", + "description" : "system logging daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : ". /etc/default/rsyslog\nexec rsyslogd $RSYSLOGD_OPTIONS\n" + }, + { + "script" : 1, + "command" : "/lib/init/apparmor-profile-load usr.sbin.rsyslogd\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/rsyslog", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "filesystem", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "startpar-bridge", + "instance" : "$JOB-$INSTANCE-$UPSTART_EVENTS", + "description" : "startpar bridge for notification of upstart job start/stop", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "startpar-upstart-inject \"$JOB\" \"$INSTANCE\" \"$UPSTART_EVENTS\"" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Steve Langasek ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/startpar_2dbridge", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "JOB!=startpar-bridge" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "JOB!=startpar-bridge" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1039, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty4/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[!23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty4", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty4" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty4", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "name" : "not-container", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "CONTAINER=lxc" + ], + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "CONTAINER=lxc-libvirt" + ], + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 574, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[06]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/udev/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "env" : [ + "[06]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "udev", + "instance" : "", + "description" : "device node and kernel event manager", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/lib/systemd/systemd-udevd --daemon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/udev", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "virtual-filesystems", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 557, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 2, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "udev" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=udev", + "INSTANCE=", + "UPSTART_EVENTS=starting" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dudev_2dbridge/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "*-device-added", + "*-device-removed", + "*-device-changed", + "*-device-online", + "*-device-offline" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "stop_on" : [ + { + "env" : [ + "udev" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "upstart-udev-bridge", + "instance" : "", + "description" : "Bridge udev events into upstart", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "upstart-udev-bridge --daemon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dudev_2dbridge", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "udev" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "ureadahead-other", + "instance" : "", + "description" : "Read required files in advance (for other mountpoints)", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/ureadahead --daemon $MOUNTPOINT" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [ + 0, + 4 + ], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/ureadahead_2dother", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "DEVICE=[/UL]*", + "MOUNTPOINT=/?*" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1158, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "CRASH_DB_URL=https://daisy.ubuntu.com", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/whoopsie/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "whoopsie", + "instance" : "", + "description" : "crash report submission daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "whoopsie" + }, + { + "script" : 1, + "command" : " [ -x /usr/bin/ubiquity-dm ] && { stop; exit 0; }\n\n if ! grep report_crashes=true /etc/default/whoopsie -sqi; then\n stop; exit 0\n fi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "CRASH_DB_URL=https://daisy.ubuntu.com" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/whoopsie", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "enabled=1", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/apport/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "apport", + "instance" : "", + "description" : "automatic crash report generation", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : " . /etc/default/apport\n [ \"$enabled\" = \"1\" ] || [ \"$force_start\" = \"1\" ] || exit 0\n\n mkdir -p -m 1777 /var/crash\n\n # check for kernel crash dump, convert it to apport report\n if [ -e /var/crash/vmcore ] || [ -n \"`ls /var/crash | egrep ^[0-9]{12}$`\" ]\n then\n\t/usr/share/apport/kernel_crashdump || true\n fi\n\n # check for incomplete suspend/resume or hibernate\n if [ -e /var/lib/pm-utils/status ]\n then\n /usr/share/apport/apportcheckresume || true\n rm -f /var/lib/pm-utils/status\n rm -f /var/lib/pm-utils/resume-hang.log\n fi\n\n echo \"|/usr/share/apport/apport %p %s %c\" > /proc/sys/kernel/core_pattern\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : " # Check for a hung resume. If we find one try and grab everything\n # we can to aid in its discovery\n if [ -e /var/lib/pm-utils/status ]\n then\n\tps -wwef > /var/lib/pm-utils/resume-hang.log\n fi\n\n if [ \"`dd if=/proc/sys/kernel/core_pattern count=1 bs=1 2>/dev/null`\" != \"|\" ]\n then\n\texit 1\n else\n\techo \"core\" > /proc/sys/kernel/core_pattern\n fi\n" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "enabled=1" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/apport", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "console-setup", + "instance" : "", + "description" : "set console keymap", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "loadkeys /etc/console-setup/cached.kmap.gz" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/console_2dsetup", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "virtual-filesystems", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "rcS" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "mountall-shell" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "hwclock-save", + "instance" : "", + "description" : "save system clock to hardware clock", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : ". /etc/default/rcS\n[ \"$UTC\" = \"yes\" ] && tz=\"--utc\" || tz=\"--localtime\"\n[ \"$BADYEAR\" = \"yes\" ] && badyear=\"--badyear\"\nexec hwclock --rtc=/dev/rtc0 --systohc $tz --noadjfile $badyear\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/hwclock_2dsave", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[06]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "irqbalance", + "instance" : "", + "description" : "CPU interrupts balancing daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "\ttest -f /etc/default/irqbalance && . /etc/default/irqbalance\n\n\ttest \"$ENABLED\" != \"0\" || exit 0\n\n\tif test \"$ONESHOT\" != \"0\"; then\n\t\tDOPTIONS=\"--oneshot\"\n\tfi\n\n\texec /usr/sbin/irqbalance $DOPTIONS\n\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Chuck Short ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/irqbalance", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "plymouth-log", + "instance" : "", + "description" : "Flush boot log to disk", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/bin/plymouth update-root-fs --read-write" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/plymouth_2dlog", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "filesystem", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 640, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "remote_closed" : 0, + "detached" : 0, + "uid" : 0, + "open_errno" : 9, + "path" : "/var/log/upstart/systemd-logind.log", + "io_watch_fd" : 16, + "fd" : 15 + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "stopping", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "SYSTEMD_LOG_TARGET=syslog", + "JOB=dbus", + "INSTANCE=", + "UPSTART_EVENTS=started" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/systemd_2dlogind/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "stopping", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "systemd-logind", + "instance" : "", + "description" : "SystemD login management service", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/lib/systemd/systemd-logind" + }, + { + "script" : 1, + "command" : " # only start if PAM module is actually available, not if libpam-systemd is\n # removed but not purged\n [ -e /lib/*/security/pam_systemd.so ] || { stop; exit 0; }\n\n # this is being done by systemd or mountall usually, but not during\n # upgrades from earlier distro releases\n if ! mountpoint -q /sys/fs/cgroup; then\n mount -t tmpfs -o uid=0,gid=0,mode=0755,size=1024 none /sys/fs/cgroup\n fi\n mkdir -p /run/systemd\n if ! mountpoint -q /sys/fs/cgroup/systemd; then\n mkdir -p /sys/fs/cgroup/systemd\n mount -t cgroup -o nosuid,noexec,nodev,none,name=systemd systemd /sys/fs/cgroup/systemd\n fi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 16384, + "rlim_max" : 16384 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "SYSTEMD_LOG_TARGET=syslog" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/systemd_2dlogind", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1048, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty5/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[!23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty5", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty5" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty5", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "name" : "not-container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [ + "failsafe-boot" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "value" : 0, + "name" : "static-network-up", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "rc-sysinit" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "chroot" : null, + "console" : "CONSOLE_OUTPUT", + "kill_signal" : 15, + "name" : "failsafe", + "instance" : "", + "description" : "Failsafe Boot Delay", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "\t# Determine if plymouth is available\n\tif [ -x /bin/plymouth ] && /bin/plymouth --ping ; then\n\t\tPLYMOUTH=/bin/plymouth\n\telse\n\t\tPLYMOUTH=\":\"\n\tfi\n\n # The point here is to wait for 2 minutes before forcibly booting \n # the system. Anything that is in an \"or\" condition with 'started \n # failsafe' in rc-sysinit deserves consideration for mentioning in\n # these messages. currently only static-network-up counts for that.\n\n\tsleep 20\n\n # Plymouth errors should not stop the script because we *must* reach\n # the end of this script to avoid letting the system spin forever\n # waiting on it to start.\n\t$PLYMOUTH message --text=\"Waiting for network configuration...\" || :\n\tsleep 40\n\n\t$PLYMOUTH message --text=\"Waiting up to 60 more seconds for network configuration...\" || :\n\tsleep 59\n\t$PLYMOUTH message --text=\"Booting system without full network configuration...\" || :\n\n # give user 1 second to see this message since plymouth will go\n # away as soon as failsafe starts.\n\tsleep 1\n exec initctl emit --no-wait failsafe-boot\n" + }, + { + "script" : 1, + "command" : "logger -t 'failsafe' -p daemon.warning \"Failsafe of 120 seconds reached.\"" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Clint Byrum ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/failsafe", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "filesystem", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "IFACE=lo" + ], + "value" : 0, + "name" : "net-device-up", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "hybrid-gfx", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "hybrid-detect" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/hybrid_2dgfx", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "lightdm" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "kdm" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "xdm" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "lxdm" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 828, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "remote_closed" : 0, + "detached" : 0, + "uid" : 0, + "open_errno" : 9, + "path" : "/var/log/upstart/modemmanager.log", + "io_watch_fd" : 19, + "fd" : 17 + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "network-manager" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=network-manager", + "INSTANCE=", + "UPSTART_EVENTS=starting" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/modemmanager/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "network-manager" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "modemmanager", + "instance" : "", + "description" : "modem connection manager", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/usr/sbin/modem-manager" + }, + { + "script" : 1, + "command" : "[ -x /usr/sbin/modem-manager ] || stop\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/modemmanager", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "network-manager" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=local-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountall_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountall.sh", + "instance" : "", + "description" : "Signal sysvinit that local filesystems are mounted", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountall_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "local-filesystems", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "rfkill-store", + "instance" : "", + "description" : "store software rfkill state", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " if [ ! -d /sys/class/rfkill ]; then\n exit 0\n fi\n\n mkdir -p /var/lib/rfkill\n > /var/lib/rfkill/saved-state\n\n for device in /sys/class/rfkill/*; do\n [ ! -d $device ] && continue\n\n entry=\"$(cat $device/name) $(cat $device/soft)\"\n echo $entry >> /var/lib/rfkill/saved-state\n done\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/rfkill_2dstore", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[016]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1153, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/atd/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "atd", + "instance" : "", + "description" : "deferred execution scheduler", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "atd" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/atd", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 575, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "value" : 0, + "name" : "deconfiguring-networking", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=local-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/dbus/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "value" : 0, + "name" : "deconfiguring-networking", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "dbus", + "instance" : "", + "description" : "D-Bus system message bus", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "dbus-daemon --system --fork" + }, + { + "script" : 1, + "command" : " mkdir -p /var/run/dbus\n chown messagebus:messagebus /var/run/dbus\n\n exec dbus-uuidgen --ensure\n" + }, + { + "script" : 0, + "command" : "kill -USR1 1" + }, + { + "script" : 0, + "command" : "rm -f /var/run/dbus/pid" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/dbus", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "local-filesystems", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[06]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "failsafe-x", + "instance" : "", + "description" : "Recovery options if display manager fails to start", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/usr/share/xdiagnose/failsafeXServer \"$JOB\"" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/failsafe_2dx", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "lightdm", + "EXIT_STATUS=[!0]" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "gdm", + "EXIT_STATUS=[!0]" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mounted-var", + "instance" : "", + "description" : "Populate /var filesystem", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " # Duplicated from mounted-run to handle the case of a separate /var.\n\n run_migrate () {\n\tOLD=\"$1\"\n\tRUN=\"$2\"\n\n\tif [ -L \"$OLD\" ]; then\n\t if [ \"$(readlink \"$OLD\")\" != \"$RUN\" ]; then\n\t\t# Remove any old (relative?) symlinks.\n\t\trm -f \"$OLD\"\n\t fi\n\telif [ -d \"$OLD\" ]; then\n\t # Remove old directories. This is safe because they are\n\t # explicitly ephemeral, and nothing is allowed to use them yet\n\t # at this point in the boot.\n\t rm -rf \"$OLD\" 2>/dev/null || true\n\tfi\n\n\tif [ ! -L \"$OLD\" ]; then\n\t ln -fs \"$RUN\" \"$OLD\"\n\t [ -x /sbin/restorecon ] && /sbin/restorecon \"$OLD\"\n\tfi\n\n\treturn 0\n }\n\n run_migrate /var/run /run\n run_migrate /var/lock /run/lock\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/mounted_2dvar", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "MOUNTPOINT=/var" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "plymouth", + "instance" : "", + "description" : "userspace bootsplash utility", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "if [ \"$RUNLEVEL\" = \"0\" -o \"$RUNLEVEL\" = \"1\" -o \"$RUNLEVEL\" = \"6\" ]; then\n exec /sbin/plymouthd --mode=shutdown\nelse\n exec /sbin/plymouthd --mode=boot --attach-to-session\nfi\n" + }, + { + "script" : 1, + "command" : " if [ \"$RUNLEVEL\" = \"0\" -o \"$RUNLEVEL\" = \"1\" -o \"$RUNLEVEL\" = \"6\" ]; then\n\texec /bin/plymouth show-splash\n fi\n" + }, + { + "script" : 0, + "command" : "/bin/plymouth quit" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 60, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/plymouth", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "mountall" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "[016]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "name" : "desktop-shutdown", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "xdm" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "uxlaunch" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[06]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "DEVICE=tmpfs", + "MOUNTPOINT=/run", + "TYPE=tmpfs", + "OPTIONS=noexec,nosuid,size=10%,mode=0755", + "UPSTART_EVENTS=mounted" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/resolvconf/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[06]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "resolvconf", + "instance" : "", + "description" : "Initialize or finalize resolvconf", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "mkdir -p /run/resolvconf/interface\n# Request a postponed update (needed in case the base file has content).\ntouch /run/resolvconf/postponed-update\n# Enable updates and perform the postponed update.\nresolvconf --enable-updates\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "resolvconf --disable-updates\n" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/resolvconf", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "MOUNTPOINT=/run" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "udev-fallback-graphics", + "instance" : "", + "description" : "load fallback graphics devices", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "if [ \"$PRIMARY_DEVICE_FOR_DISPLAY\" = \"\" ]; then\n modprobe -q -b vesafb\nfi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/udev_2dfallback_2dgraphics", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "startup", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "PRIMARY_DEVICE_FOR_DISPLAY=1" + ], + "value" : 1, + "name" : "graphics-device-added", + "type" : "EVENT_MATCH", + "event" : 0 + }, + { + "env" : [ + "PRIMARY_DEVICE_FOR_DISPLAY=1" + ], + "value" : 0, + "name" : "drm-device-added", + "type" : "EVENT_MATCH" + }, + { + "value" : 1, + "type" : "EVENT_OR" + }, + { + "env" : [ + "udevtrigger" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 1, + "type" : "EVENT_OR" + }, + { + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + }, + { + "value" : 1, + "type" : "EVENT_OR" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "DEVICE=/dev/disk/by-uuid/a981fe0c-d7c7-483f-9777-1b50286a99ce", + "MOUNTPOINT=/", + "TYPE=ext4", + "OPTIONS=errors=remount-ro", + "UPSTART_EVENTS=mounted" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/checkroot_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "checkroot.sh", + "instance" : "", + "description" : "Signal sysvinit that the rootfs is mounted", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/checkroot_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "MOUNTPOINT=/" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "control-alt-delete", + "instance" : "", + "description" : "emergency keypress handling", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "shutdown -r now \"Control-Alt-Delete pressed\"" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Scott James Remnant ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/control_2dalt_2ddelete", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "control-alt-delete", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "hwclock", + "instance" : "", + "description" : "adjust system clock and timezone", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : ". /etc/default/rcS\n[ \"$UTC\" = \"yes\" ] && tz=\"--utc\" || tz=\"--localtime\"\n[ \"$BADYEAR\" = \"yes\" ] && badyear=\"--badyear\"\nexec hwclock --systz $tz --noadjfile $badyear\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/hwclock", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "mountall" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mounted-proc", + "instance" : "", + "description" : "Fix-up sensitive /proc filesystem entries", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "chmod 0400 \"${MOUNTPOINT}\"/slabinfo\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "MOUNTPOINT=/proc" + ], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/mounted_2dproc", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "MOUNTPOINT=/proc", + "TYPE=proc" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 866, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "stopping", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=dbus", + "INSTANCE=", + "UPSTART_EVENTS=local-filesystems started static-network-up" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/network_2dmanager/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "stopping", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "network-manager", + "instance" : "", + "description" : "network connection manager", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "\t# set $LANG so that messages appearing on the GUI will be translated. See LP: 875017\n\tif [ -r /etc/default/locale ]; then\n\t\t. /etc/default/locale\n\t\texport LANG LANGUAGE LC_MESSAGES LC_ALL\n\tfi\n\n\texec NetworkManager\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/network_2dmanager", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "local-filesystems", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "value" : 0, + "name" : "static-network-up", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "alsa-store", + "instance" : "", + "description" : "save sound card(s') mixer state(s)", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/usr/sbin/alsactl store" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/alsa_2dstore", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 847, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "remote_closed" : 0, + "detached" : 0, + "uid" : 0, + "open_errno" : 0, + "path" : "/var/log/upstart/cups-browsed.log", + "io_watch_fd" : 21, + "fd" : -1 + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[016]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=cups", + "INSTANCE=", + "UPSTART_EVENTS=filesystem started started" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/cups_2dbrowsed/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[016]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "cups-browsed", + "instance" : "", + "description" : "cups-browsed - Bonjour remote printer browsing daemon", + "respawn_interval" : 12, + "process" : [ + { + "script" : 0, + "command" : "/usr/sbin/cups-browsed" + }, + { + "script" : 1, + "command" : "[ -x /usr/sbin/cups-browsed ]\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 3, + "author" : "Till Kamppeter ", + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/cups_2dbrowsed", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "filesystem", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "avahi-daemon" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "env" : [ + "cups" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "[2345]" + ], + "value" : 1, + "name" : "runlevel", + "type" : "EVENT_MATCH", + "event" : 2 + }, + { + "value" : 1, + "type" : "EVENT_OR" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "setvtrgb", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "setvtrgb /etc/vtrgb" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Dustin Kirkland ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/setvtrgb", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "plymouth-splash" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "tty1" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "shutdown", + "instance" : "", + "description" : "Trigger an immediate shutdown on SIGPWR", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "shutdown -h now \"SIGPWR received\"" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/shutdown", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "power-status-changed", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "alsa-restore", + "instance" : "", + "description" : "restore sound card(s') mixer state(s)", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/usr/sbin/alsactl restore" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/alsa_2drestore", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1150, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/cron/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "cron", + "instance" : "", + "description" : "regular background program processing daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "cron" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/cron", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "chroot" : null, + "console" : "CONSOLE_LOG", + "name" : "j", + "kill_signal" : 15, + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/tmp/james_daemon -c" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/j", + "deleted" : 0, + "chdir" : null, + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1188, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "remote_closed" : 0, + "detached" : 0, + "uid" : 0, + "open_errno" : 0, + "path" : "/var/log/upstart/lightdm.log", + "io_watch_fd" : 44, + "fd" : -1 + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[016]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "JOB=dbus", + "INSTANCE=", + "UPSTART_EVENTS=filesystem runlevel started plymouth-ready" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/lightdm/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "login-session-start", + "desktop-session-start", + "desktop-shutdown" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[016]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "lightdm", + "instance" : "", + "description" : "LightDM Display Manager", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " if [ -n \"$UPSTART_EVENTS\" ]\n then\n # Check kernel command-line for inhibitors, unless we are being called\n # manually\n for ARG in $(cat /proc/cmdline); do\n if [ \"$ARG\" = \"text\" ]; then\n\t\tplymouth quit || : \n stop\n\t\texit 0\n fi\n done\n\n\t[ ! -f /etc/X11/default-display-manager -o \"$(cat /etc/X11/default-display-manager 2>/dev/null)\" = \"/usr/bin/lightdm\" -o \"$(cat /etc/X11/default-display-manager 2>/dev/null)\" = \"/usr/sbin/lightdm\" ] || { stop; exit 0; }\n\n\tif [ \"$RUNLEVEL\" = S -o \"$RUNLEVEL\" = 1 ]\n\tthen\n\t # Single-user mode\n\t plymouth quit || :\n\t exit 0\n\tfi\n fi\n\n exec lightdm\n" + }, + { + "script" : 1, + "command" : "sleep 5\nclear > /dev/tty7\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "if [ \"$UPSTART_STOP_EVENTS\" = runlevel ]; then\n\tinitctl emit desktop-shutdown\nfi\n" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Robert Ancell ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/lightdm", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "filesystem", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "[!06]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "value" : 0, + "name" : "plymouth-ready", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "env" : [ + "PREVLEVEL=S" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [ + "virtual-filesystems", + "local-filesystems", + "remote-filesystems", + "all-swaps", + "filesystem", + "mounting", + "mounted" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "stop_on" : [ + { + "env" : [ + "rcS" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_OUTPUT", + "kill_signal" : 15, + "name" : "mountall", + "instance" : "", + "description" : "Mount filesystems on boot", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " . /etc/default/rcS\n [ -f /forcefsck ] && force_fsck=\"--force-fsck\"\n [ \"$FSCKFIX\" = \"yes\" ] && fsck_fix=\"--fsck-fix\"\n\n # set $LANG so that messages appearing in plymouth are translated\n if [ -r /etc/default/locale ]; then\n . /etc/default/locale\n export LANG LANGUAGE LC_MESSAGES LC_ALL\n fi\n\n exec mountall --daemon $force_fsck $fsck_fix\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "rm -f /forcefsck 2>dev/null || true\n" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/mountall", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "startup", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mounted-debugfs", + "instance" : "", + "description" : "Fix-up /sys/kernel/debug filesystem", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "chmod 0700 \"${MOUNTPOINT}\" || true\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "MOUNTPOINT=/sys/kernel/debug" + ], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/mounted_2ddebugfs", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "MOUNTPOINT=/sys/kernel/debug", + "TYPE=debugfs" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountkernfs_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountkernfs.sh", + "instance" : "", + "description" : "Signal sysvinit that virtual filesystems are mounted", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountkernfs_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "virtual-filesystems", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "console", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 console" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/console", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "rc", + "RUNLEVEL=[2345]" + ], + "value" : 1, + "name" : "stopped", + "type" : "EVENT_MATCH", + "event" : 3 + }, + { + "env" : [ + "CONTAINER=lxc" + ], + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mounted-run", + "instance" : "", + "description" : "Populate and link to /run filesystem", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " : > \"/run/utmp\"\n chmod 664 \"/run/utmp\"\n chgrp utmp \"/run/utmp\"\n\n # compatibility; should go away soon\n [ -d /dev/.initramfs/varrun ] && cp -a /dev/.initramfs/varrun/* /run/ || true\n\n mkdir -p /run/sendsigs.omit.d\n\n # Background the initial motd seeding\n [ -d \"/etc/update-motd.d\" ] && run-parts --lsbsysinit /etc/update-motd.d > /run/motd &\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/mounted_2drun", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "MOUNTPOINT=/run", + "TYPE=tmpfs" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1148, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/acpid/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "acpid", + "instance" : "", + "description" : "ACPI daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "acpid -c /etc/acpi/events -s /var/run/acpid.socket" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/acpid", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 641, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "stopping", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UART_CONF=/etc/bluetooth/uart", + "RFCOMM_CONF=/etc/bluetooth/rfcomm.conf", + "JOB=dbus", + "INSTANCE=", + "UPSTART_EVENTS=started" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/bluetooth/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "stopping", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "bluetooth", + "instance" : "", + "description" : "bluetooth daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/usr/sbin/bluetoothd" + }, + { + "script" : 1, + "command" : "\t[ \"$VERBOSE\" = no ] && redirect='>/dev/null 2>&1' || redirect=\n\n\t# start_uarts()\n\tif [ -x /usr/sbin/hciattach ] && [ -f $UART_CONF ];\n\tthen\n\t\tgrep -v '^#' $UART_CONF | while read i; do\n\t\t eval \"/usr/sbin/hciattach $i $redirect\" || :\n\t\tdone\n\tfi\n\n\t# start_rfcomm()\n\tif [ -x /usr/bin/rfcomm ] && [ -f $RFCOMM_CONF ] ;\n\tthen\n\t\t# rfcomm must always succeed for now: users\n\t\t# may not yet have an rfcomm-enabled kernel\n\t\teval \"/usr/bin/rfcomm -f $RFCOMM_CONF bind all $redirect\" || :\n\tfi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "\t# stop_uarts()\n\tlogger -t bluez \"Stopping uarts\"\n\tkillall hciattach >/dev/null 2>&1 || :\n\n\t# stop_rfcomm()\n\tlogger -t bluez \"Stopping rfcomm\"\n\tif [ -x /usr/bin/rfcomm ];\n\tthen\n\t\teval \"/usr/bin/rfcomm unbind all $redirect\" || :\n\tfi\n" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "UART_CONF=/etc/bluetooth/uart", + "RFCOMM_CONF=/etc/bluetooth/rfcomm.conf" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/bluetooth", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "DEVICE=/dev/disk/by-uuid/a981fe0c-d7c7-483f-9777-1b50286a99ce", + "MOUNTPOINT=/", + "TYPE=ext4", + "OPTIONS=errors=remount-ro", + "UPSTART_EVENTS=mounted" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/checkfs_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "checkfs.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/checkfs_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "MOUNTPOINT=/" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "DEVICE=/dev/disk/by-uuid/a981fe0c-d7c7-483f-9777-1b50286a99ce", + "MOUNTPOINT=/", + "TYPE=ext4", + "OPTIONS=errors=remount-ro", + "UPSTART_EVENTS=mounted" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/checkroot_2dbootclean_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "checkroot-bootclean.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/checkroot_2dbootclean_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "MOUNTPOINT=/" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "kmod", + "instance" : "", + "description" : "load modules from /etc/modules", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " [ -f /etc/modules ] || exit 0\n hash=\"#\"\n while read module args; do\n\t[ -n \"$module\" ] && [ \"${module#${hash}}\" = \"${module}\" ] || continue\n\tmodprobe $module $args || :\n done < /etc/modules\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/kmod", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "startup", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "udev" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=remote-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountnfs_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountnfs.sh", + "instance" : "", + "description" : "Signal sysvinit that remote filesystems are mounted", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountnfs_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "remote-filesystems", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "plymouth" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "plymouth-stop", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " case \"$JOB\" in\n gdm|kdm|lightdm|ubiquity|oem-config)\n\texit 0\n\t;;\n *)\n\texec /bin/plymouth quit\n\t;;\n esac\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/plymouth_2dstop", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "gdm" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "kdm" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "xdm" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "lxdm" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "lightdm" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "uxlaunch" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "ubiquity" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "oem-config" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "rc", + "RUNLEVEL=[2345]" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "rcS" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "mountall-shell" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[!S]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_OWNER", + "kill_signal" : 15, + "name" : "rcS", + "instance" : "", + "description" : "System V single-user mode compatibility", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : " # Don't switch runlevels if we were stopped by an event, since that\n # means we're already switching runlevels\n if [ -n \"${UPSTART_STOP_EVENTS}\" ]\n then\n\texit 0\n fi\n\n # Switch, passing a magic flag\n start --no-wait rc-sysinit FROM_SINGLE_USER_MODE=y\n" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Scott James Remnant ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/rcS", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "S" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!023456]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=network-interface", + "INSTANCE=eth0", + "INTERFACE=eth0", + "UPSTART_EVENTS=starting" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/ufw/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[!023456]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_OUTPUT", + "kill_signal" : 15, + "name" : "ufw", + "instance" : "", + "description" : "Uncomplicated firewall", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/lib/ufw/ufw-init start quiet" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : "/lib/ufw/ufw-init stop" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/ufw", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "network-interface" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "network-manager" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "networking" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "$WAIT_FOR" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "$WAIT_FOR" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "wait-for-state", + "instance" : "$WAITER$WAIT_FOR", + "description" : "Waiting for state", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " test -n \"$WAIT_FOR\" || exit 1\n test -n \"$WAITER\" || exit 1\n\n # We don't want to override the manual stanza\n # XXX: initctl show-config should share manual w/ us too\n case $MANUAL_OVERRIDE in\n N|n|0)\n if grep -q \"^\\s*manual\\s*$\" /etc/init/$WAIT_FOR.conf ; then\n exit 0\n fi\n ;;\n esac\n\n if [ \"$WAIT_STATE\" = \"stopped\" ] ; then\n TARGET_GOAL=\"stop\"\n fi\n\n # Already running/stopped?\n status $WAIT_FOR | grep -q \"$TARGET_GOAL/$WAIT_STATE\" && exit 0\n\n # Give it a push\n $TARGET_GOAL $WAIT_FOR || :\n\n # upstart will kill this shell on started/stopped $WAIT_FOR\n while sleep $TIMEOUT ; do\n case $WAIT_FOREVER in\n N|n|0)\n exit 100\n ;;\n Y|y|1)\n ;;\n *)\n exit 1\n ;;\n esac\n done\n # Very strange, sleep returned non-zero?\n exit 1\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Clint Byrum ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [ + 2 + ], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "TIMEOUT=30", + "MANUAL_OVERRIDE=N", + "WAIT_FOREVER=N", + "WAIT_STATE=started", + "TARGET_GOAL=start" + ], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/wait_2dfor_2dstate", + "deleted" : 0, + "chdir" : null, + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/bootmisc_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "bootmisc.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/bootmisc_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "virtual-filesystems", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "flush-early-job-log", + "instance" : "", + "description" : "flush early job output to logs", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "initctl notify-disk-writeable" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/flush_2dearly_2djob_2dlog", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "filesystem", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [ + "recovery", + "startup", + "mounted" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_OWNER", + "kill_signal" : 15, + "name" : "friendly-recovery", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " # Only start friendly-recovery when booting in recovery mode\n if ! grep -q \"recovery\" /proc/cmdline; then\n exit 0\n fi\n\n if [ -x /lib/recovery-mode/recovery-menu ]; then\n exec /lib/recovery-mode/recovery-menu\n else\n exec /sbin/sulogin\n fi\n" + }, + { + "script" : 1, + "command" : " if plymouth --ping; then\n plymouth hide-splash || true\n fi\n\n # Try to set the hostname and initialize the console\n start hostname || true\n start console-setup || true\n start setvtrgb || true\n\n # Make sure /run contains the required directories for the\n # recovery menu options\n mkdir -p /run/lock /run/shm || true\n\n # Emit the mounted event to trigger resolvconf and mounted-run\n initctl emit mounted MOUNTPOINT=/run || true\n\n # Finally start udev\n start udev || true\n udevadm trigger --action=add || true\n udevadm settle || true\n\n # And turn off kernel messages (to avoid corrupting the menu)\n dmesg --console-off || true\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "if plymouth --ping; then\n plymouth show-splash\nfi\ninitctl emit startup\n" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/friendly_2drecovery", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "recovery", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "jamespage", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "echo hello\nifconfig -a\nprocenv\nset\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/jamespage", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "networking" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "network-manager" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "env" : [ + "network-interface" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [ + "runlevel" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_OUTPUT", + "kill_signal" : 15, + "name" : "rc-sysinit", + "instance" : "", + "description" : "System V initialisation compatibility", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " # Check for default runlevel in /etc/inittab\n if [ -r /etc/inittab ]\n then\n\teval \"$(sed -nre 's/^[^#][^:]*:([0-6sS]):initdefault:.*/DEFAULT_RUNLEVEL=\"\\1\";/p' /etc/inittab || true)\"\n fi\n\n # Check kernel command-line for typical arguments\n for ARG in $(cat /proc/cmdline)\n do\n\tcase \"${ARG}\" in\n\t-b|emergency)\n\t # Emergency shell\n\t [ -n \"${FROM_SINGLE_USER_MODE}\" ] || sulogin\n\t ;;\n\t[0123456sS])\n\t # Override runlevel\n\t DEFAULT_RUNLEVEL=\"${ARG}\"\n\t ;;\n\t-s|single)\n\t # Single user mode\n\t [ -n \"${FROM_SINGLE_USER_MODE}\" ] || DEFAULT_RUNLEVEL=S\n\t ;;\n\tesac\n done\n\n # Run the system initialisation scripts\n [ -n \"${FROM_SINGLE_USER_MODE}\" ] || /etc/init.d/rcS\n\n # Switch into the default runlevel\n telinit \"${DEFAULT_RUNLEVEL}\"\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Scott James Remnant ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "DEFAULT_RUNLEVEL=2", + "RUNLEVEL=", + "PREVLEVEL=", + "INIT_VERBOSE" + ], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/rc_2dsysinit", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "filesystem", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "name" : "static-network-up", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "value" : 0, + "name" : "failsafe-boot", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 716, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[016]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=dbus", + "INSTANCE=", + "UPSTART_EVENTS=filesystem started started" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/cups/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[016]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "cups", + "instance" : "", + "description" : "CUPS printing spooler/server", + "respawn_interval" : 12, + "process" : [ + { + "script" : 0, + "command" : "/usr/sbin/cupsd -F" + }, + { + "script" : 1, + "command" : " [ -x /usr/sbin/cupsd ]\n \n # load modules for parallel port support\n if [ -r /etc/default/cups ]; then\n\t. /etc/default/cups\n fi\n if [ \"$LOAD_LP_MODULE\" = \"yes\" -a -f /usr/lib/cups/backend/parallel \\\n\t -a -f /proc/modules -a -x /sbin/modprobe ]; then\n\tmodprobe -q -b lp || true\n\tmodprobe -q -b ppdev || true\n\tmodprobe -q -b parport_pc || true\n fi\n \n mkdir -p /var/run/cups/certs\n if [ -x /lib/init/apparmor-profile-load ]; then\n\t/lib/init/apparmor-profile-load usr.sbin.cupsd\n fi\n" + }, + { + "script" : 1, + "command" : " # wait until daemon is ready\n timeout=6\n while [ ! -e /var/run/cups/cups.sock ]; do \n sleep 0.5\n\ttimeout=$((timeout-1))\n\tif [ \"$timeout\" -eq 0 ]; then\n\t echo \"cupsd failed to create /var/run/cups/cups.sock, skipping automatic printer configuration\" >&2\n\t exit 0\n\tfi\n done\n \n # coldplug USB printers\n if ! /lib/udev/udev-configure-printer enumerate 2>/dev/null; then\n if type udevadm > /dev/null 2>&1 && [ -x /lib/udev/udev-configure-printer ]; then\n for printer in `udevadm trigger --verbose --dry-run --subsystem-match=usb \\\n --attr-match=bInterfaceClass=07 --attr-match=bInterfaceSubClass=01 2>/dev/null || true; \\\n udevadm trigger --verbose --dry-run --subsystem-match=usb \\\n --sysname-match='lp[0-9]*' 2>/dev/null || true`; do\n /lib/udev/udev-configure-printer add \"${printer#/sys}\"\n done\n fi\n fi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 3, + "author" : "Michael Sweet ", + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/cups", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "filesystem", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "avahi-daemon" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "[2345]" + ], + "value" : 1, + "name" : "runlevel", + "type" : "EVENT_MATCH", + "event" : 2 + }, + { + "value" : 1, + "type" : "EVENT_OR" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "stop_on" : [ + { + "env" : [ + "[016]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "pulseaudio", + "instance" : "", + "description" : "System PulseAudio sound server", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/usr/bin/pulseaudio --system --daemonize --high-priority --log-target=syslog --disallow-exit --disallow-module-loading=$DISALLOW_MODULE_LOADING $PULSEAUDIO_ARGS" + }, + { + "script" : 0, + "command" : "install -d -m755 -o pulse -g pulse /run/pulse" + }, + { + "script" : 1, + "command" : "if [ -e /var/run/pulse/.esd_auth ]; then\n\tchown pulse:pulse-access /var/run/pulse/.esd_auth\n\tchmod 640 /var/run/pulse/.esd_auth\nfi\nif [ -e /var/run/pulse/.pulse-cookie ]; then\n\tchown pulse:pulse-access /var/run/pulse/.pulse-cookie\n\tchmod 640 /var/run/pulse/.pulse-cookie\nfi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Pali Rohár ", + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "DISALLOW_MODULE_LOADING=1", + "PULSEAUDIO_ARGS=" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/pulseaudio", + "deleted" : 0, + "chdir" : null, + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1013, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 2, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "IFACE=lo", + "LOGICAL=lo", + "ADDRFAM=inet", + "METHOD=loopback", + "UPSTART_EVENTS=net-device-up" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dsocket_2dbridge/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "socket" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "upstart-socket-bridge", + "instance" : "", + "description" : "Bridge socket events into upstart", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "upstart-socket-bridge --daemon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dsocket_2dbridge", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "IFACE=lo" + ], + "value" : 0, + "name" : "net-device-up", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "anacron", + "instance" : "", + "description" : "anac(h)ronistic cron", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "anacron -s" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [ + 0 + ], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/anacron", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountdevsubfs_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountdevsubfs.sh", + "instance" : "", + "description" : "Signal sysvinit that virtual filesystems are mounted", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountdevsubfs_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "virtual-filesystems", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1069, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty2/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[!23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty2", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty2" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty2", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "name" : "not-container", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "CONTAINER=lxc" + ], + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "CONTAINER=lxc-libvirt" + ], + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "udevtrigger", + "instance" : "", + "description" : "cold plug devices", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "udevadm trigger --action=add" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : "udevadm settle" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/udevtrigger", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "startup", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "udev" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "value" : 0, + "name" : "not-container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 530, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 2, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "DEVICE=proc", + "MOUNTPOINT=/proc", + "TYPE=proc", + "OPTIONS=nodev,noexec,nosuid", + "UPSTART_EVENTS=mounted" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dfile_2dbridge/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "file" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "upstart-file-bridge", + "instance" : "", + "description" : "Bridge file events into upstart", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "upstart-file-bridge --daemon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dfile_2dbridge", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [ + "container", + "not-container" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "container-detect", + "instance" : "", + "description" : "Track if upstart is running in a container", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : " # The \"standard\" way of telling if we are in a container\n # is to check for \"container\" in init's environment.\n # The code below is for cases where it's not set.\n\n # Detect old-style libvirt\n if [ -z \"$container\" ]; then\n [ -n \"$LIBVIRT_LXC_UUID\" ] && container=lxc-libvirt\n fi\n\n # Detect OpenVZ containers\n if [ -z \"$container\" ]; then\n [ -d /proc/vz ] && [ ! -d /proc/bc ] && container=openvz\n fi\n\n # Detect Vserver containers\n if [ -z \"$container\" ]; then\n VXID=\"$(cat /proc/self/status | grep ^VxID | cut -f2)\" || true\n [ \"${VXID:-0}\" -gt 1 ] && container=vserver\n fi\n\n if [ -n \"$container\" ]; then\n echo \"$container\" > /run/container_type || true\n initctl emit --no-wait container CONTAINER=$container\n exit 0\n fi\n\n # If not a container, stop there\n rm -f /run/container_type\n initctl emit --no-wait not-container\n stop\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "container", + "LIBVIRT_LXC_UUID" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/container_2ddetect", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "MOUNTPOINT=/run" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mounted-dev", + "instance" : "", + "description" : "Populate /dev filesystem", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " # With the /run transition, shm lives there now, but eglibc still looks in\n # /dev/shm. So create a symlink there\n [ -e /dev/shm ] || ln -s /run/shm /dev/shm\n \n if [ \"${TYPE}\" != \"devtmpfs\" ]\n then\n\tcd \"${MOUNTPOINT}\"\n\t/sbin/MAKEDEV std fd ppp tun\n\t# lxc and libvirt containers have set up their own console and ttys\n\tif [ -z \"$container\" -a -z \"$LIBVIRT_LXC_UUID\" ]; then\n\t\t/sbin/MAKEDEV console\n\tfi\n fi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "MOUNTPOINT=/dev", + "container", + "LIBVIRT_LXC_UUID" + ], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/mounted_2ddev", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "MOUNTPOINT=/dev" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mtab_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mtab.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mtab_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "virtual-filesystems", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1073, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty3/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[!23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty3", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty3" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty3", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "name" : "not-container", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "CONTAINER=lxc" + ], + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "CONTAINER=lxc-libvirt" + ], + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "udev-finish", + "instance" : "", + "description" : "save udev log and update rules", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " # Save udev log in /var/log/udev\n if [ -e /dev/.udev.log ]\n then\n\tmv -f /dev/.udev.log /var/log/udev || :\n fi\n\n # Copy any rules generated while the root filesystem was read-only\n for file in /run/udev/tmp-rules--*\n do\n\t[ -e \"$file\" ] || continue\n\tcat \"$file\" >> \"/etc/udev/rules.d/${file##*tmp-rules--}\"\n\trm -f \"$file\"\n done\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/udev_2dfinish", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "startup", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "name" : "filesystem", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "env" : [ + "udev" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "env" : [ + "udevtrigger" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "env" : [ + "udevmonitor" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "hostname", + "instance" : "", + "description" : "set system hostname", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "hostname -b -F /etc/hostname" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/hostname", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "startup", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountall-reboot", + "instance" : "", + "description" : "Reboot after filesystems are changed", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "reboot -f" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/mountall_2dreboot", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "mountall", + "EXIT_STATUS=4" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[06]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_OWNER", + "kill_signal" : 15, + "name" : "mountall-shell", + "instance" : "", + "description" : "Recovery shell for filesystem failure", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " case \"$EXIT_STATUS\" in\n \"\"|1)\n\techo \"General error mounting filesystems.\"\n\techo \"A maintenance shell will now be started.\"\n\techo \"CONTROL-D will terminate this shell and reboot the system.\"\n\t;;\n 2)\n\techo \"Filesystem check or mount failed.\"\n\techo \"A maintenance shell will now be started.\"\n\techo \"CONTROL-D will terminate this shell and continue booting after re-trying\"\n\techo \"filesystems. Any further errors will be ignored\"\n\t;;\n 3)\n\techo \"Root filesystem check failed.\"\n\techo \"A maintenance shell will now be started.\"\n\techo \"CONTROL-D will terminate this shell and reboot the system.\"\n\t;;\n esac\n\n /sbin/sulogin\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : " if [ -z \"$UPSTART_STOP_EVENTS\" ]\n then\n\tif [ \"$EXIT_STATUS\" = \"2\" ]\n\tthen\n\t exec start --no-wait mountall\n\telse\n\t umount -a || :\n\t exec reboot -f\n\tfi\n fi\n" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/mountall_2dshell", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "mountall", + "EXIT_STATUS=[!4]" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "mountall", + "EXIT_SIGNAL=?*" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mounted-tmp", + "instance" : "", + "description" : "Clean /tmp directory", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " if [ x$MOUNTPOINT = x/tmp ] && [ ! -x /usr/bin/find ] ; then\n touch /tmp/.delayed_mounted_tmp_clean\n exit 0\n elif [ x$MOUNTPOINT = x/usr ] ; then\n [ -f /tmp/.delayed_mounted_tmp_clean ] || exit 0\n rm /tmp/.delayed_mounted_tmp_clean\n MOUNTPOINT=/tmp\n fi\n\n . /etc/default/rcS\n\n cd \"${MOUNTPOINT}\" || exit 1\n rm -f .X*-lock\n\n case \"${TMPTIME}\" in\n -*|infinite|infinity)\n\t exit 0\n\t ;;\n esac\n\n if [ \"${TMPTIME}\" = \"0\" -o -z \"${TMPTIME}\" ]\n then\n\tTEXPR=\"\"\n\tDEXPR=\"\"\n else\n\tTEXPR=\"-mtime +${TMPTIME} -ctime +${TMPTIME} -atime +${TMPTIME}\"\n\tDEXPR=\"-mtime +${TMPTIME} -ctime +${TMPTIME}\"\n fi\n\n EXCEPT='! -name .\n ! ( -path ./lost+found -uid 0 )\n ! ( -path ./quota.user -uid 0 )\n ! ( -path ./aquota.user -uid 0 )\n ! ( -path ./quota.group -uid 0 )\n ! ( -path ./aquota.group -uid 0 )\n ! ( -path ./.journal -uid 0 )\n ! ( -path ./.clean -uid 0 )\n ! ( -path \"./...security*\" -uid 0 )'\n\n # Remove all old files, then all empty directories\n find . -depth -xdev $TEXPR $EXCEPT ! -type d -delete\n find . -depth -xdev $DEXPR $EXCEPT -type d -empty -delete\n\n # Check if we have enough space in /tmp, and if not, mount a tmpfs there\n avail=`df -kP /tmp | awk 'NR==2 { print $4 }'`\n if [ \"$avail\" -lt 1000 ]; then\n\tmount -t tmpfs -o size=1048576,mode=1777 overflow /tmp\n fi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "MOUNTPOINT=/tmp" + ], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/mounted_2dtmp", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "MOUNTPOINT=/tmp" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "MOUNTPOINT=/usr" + ], + "value" : 0, + "name" : "mounted", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "INTERFACE=$INTERFACE" + ], + "value" : 0, + "name" : "net-device-removed", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "KERNEL=lo", + "DEVPATH=/devices/virtual/net/lo", + "SUBSYSTEM=net", + "ACTION=add", + "ID_MM_CANDIDATE=1", + "IFINDEX=1", + "INTERFACE=lo", + "SEQNUM=1400", + "USEC_INITIALIZED=4437", + "UPSTART_EVENTS=net-device-added" + ], + "name" : "lo", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface/lo", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + }, + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "INTERFACE=$INTERFACE" + ], + "value" : 0, + "name" : "net-device-removed", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "KERNEL=eth0", + "DEVPATH=/devices/pci0000:00/0000:00:03.0/net/eth0", + "SUBSYSTEM=net", + "ACTION=add", + "ID_BUS=pci", + "ID_MM_CANDIDATE=1", + "ID_MODEL_ID=0x100e", + "ID_NET_NAME_MAC=enx525400123456", + "ID_NET_NAME_PATH=enp0s3", + "ID_NET_NAME_SLOT=ens3", + "ID_VENDOR_ID=0x8086", + "IFINDEX=2", + "INTERFACE=eth0", + "MATCHDEVID=0x0", + "MATCHIFTYPE=1", + "SEQNUM=1254", + "USEC_INITIALIZED=6439", + "UPSTART_EVENTS=net-device-added" + ], + "name" : "eth0", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface/eth0", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "net-device-up", + "net-device-down", + "static-network-up" + ], + "session" : 0, + "debug" : 0, + "export" : [ + "INTERFACE" + ], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "INTERFACE=$INTERFACE" + ], + "value" : 0, + "name" : "net-device-removed", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "network-interface", + "instance" : "$INTERFACE", + "description" : "configure network device", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " if [ \"$INTERFACE\" = lo ]; then\n\t# bring this up even if /etc/network/interfaces is broken\n\tifconfig lo 127.0.0.1 up || true\n\tinitctl emit -n net-device-up \\\n\t IFACE=lo LOGICAL=lo ADDRFAM=inet METHOD=loopback || true\n fi\n mkdir -p /run/network\n exec ifup --allow auto $INTERFACE\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : "ifdown --allow auto $INTERFACE" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "net-device-added", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [ + "plymouth-ready" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "plymouth-ready", + "instance" : "$UPSTART_EVENTS", + "description" : "Send an event to indicate plymouth is up", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "if [ \"$UPSTART_EVENTS\" = started ] || \\\n status plymouth-splash | grep -q \"start/started\" || \\\n plymouth --ping\nthen\n initctl emit plymouth-ready\nfi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/plymouth_2dready", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "startup", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "plymouth-splash" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "plymouth-splash", + "instance" : "", + "description" : "userspace bootsplash", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/bin/plymouth show-splash" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/plymouth_2dsplash", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "plymouth" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "PRIMARY_DEVICE_FOR_DISPLAY=1" + ], + "value" : 0, + "name" : "graphics-device-added", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "PRIMARY_DEVICE_FOR_DISPLAY=1" + ], + "value" : 0, + "name" : "drm-device-added", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "udev-fallback-graphics" + ], + "value" : 1, + "name" : "stopped", + "type" : "EVENT_MATCH", + "event" : 1 + }, + { + "value" : 1, + "type" : "EVENT_OR" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "plymouth" + ], + "value" : 0, + "name" : "stopping", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_OUTPUT", + "kill_signal" : 15, + "name" : "plymouth-upstart-bridge", + "instance" : "", + "description" : "bridge from Upstart state changes to Plymouth", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/data/testing/bin/plymouth-upstart-bridge" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/plymouth_2dupstart_2dbridge", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "dbus" + ], + "value" : 0, + "name" : "started", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "[06]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1180, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=rc", + "INSTANCE=", + "RESULT=ok", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=stopped not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty1/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[!2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty1", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty1" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty1", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "rc", + "RUNLEVEL=[2345]" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "name" : "not-container", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "CONTAINER=lxc" + ], + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "CONTAINER=lxc-libvirt" + ], + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "udevtrigger" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "udevmonitor", + "instance" : "", + "description" : "log initial device creation", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "/bin/udevadm monitor -e >/dev/.udev.log" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/udevmonitor", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "startup", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "udevtrigger" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "dmesg", + "instance" : "", + "description" : "save kernel messages", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "savelog -q -p -c 5 /var/log/dmesg\ndmesg -s 524288 > /var/log/dmesg\nchgrp adm /var/log/dmesg\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/dmesg", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "name" : "james", + "kill_signal" : 15, + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "sleep 999" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/james", + "deleted" : 0, + "chdir" : null, + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountall_2dbootclean_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountall-bootclean.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountall_2dbootclean_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "virtual-filesystems", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "network-interface", + "JOB=$JOB", + "INTERFACE=$INTERFACE" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "network-manager", + "JOB=$JOB" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "networking", + "JOB=$JOB" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=network-manager", + "INSTANCE=", + "UPSTART_EVENTS=starting" + ], + "name" : "network-manager", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dsecurity/network_2dmanager", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + }, + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "network-interface", + "JOB=$JOB", + "INTERFACE=$INTERFACE" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "network-manager", + "JOB=$JOB" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "networking", + "JOB=$JOB" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=network-interface", + "INSTANCE=eth0", + "INTERFACE=eth0", + "UPSTART_EVENTS=starting" + ], + "name" : "network-interface/eth0", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dsecurity/network_2dinterface_2feth0", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + }, + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "network-interface", + "JOB=$JOB", + "INTERFACE=$INTERFACE" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "network-manager", + "JOB=$JOB" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "networking", + "JOB=$JOB" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=network-interface", + "INSTANCE=lo", + "INTERFACE=lo", + "UPSTART_EVENTS=starting" + ], + "name" : "network-interface/lo", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dsecurity/network_2dinterface_2flo", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + }, + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "network-interface", + "JOB=$JOB", + "INTERFACE=$INTERFACE" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "network-manager", + "JOB=$JOB" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "networking", + "JOB=$JOB" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=networking", + "INSTANCE=", + "UPSTART_EVENTS=starting" + ], + "name" : "networking", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dsecurity/networking", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "network-interface", + "JOB=$JOB", + "INTERFACE=$INTERFACE" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "network-manager", + "JOB=$JOB" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "networking", + "JOB=$JOB" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "network-interface-security", + "instance" : "$JOB${INTERFACE:+/}${INTERFACE:-}", + "description" : "configure network device security", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "[ -f /run/network-interface-security ] && exit 0 # already ran\n[ -d /rofs/etc/apparmor.d ] && exit 0 # do not load on liveCD\n[ -d /sys/module/apparmor ] || exit 0 # do not load without AppArmor\n[ -x /sbin/apparmor_parser ] || exit 0 # do not load without parser\nfor link in /etc/apparmor/init/network-interface-security/* ; do\n [ -L $link ] && /sbin/apparmor_parser -r -W $link || true\ndone\n> /run/network-interface-security\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dsecurity", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "network-interface" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "network-manager" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "env" : [ + "networking" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "value" : 0, + "name" : "unmounted-remote-filesystems", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=udevtrigger", + "INSTANCE=", + "RESULT=ok", + "UPSTART_EVENTS=local-filesystems stopped" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/networking/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "static-network-up", + "net-device-up", + "deconfiguring-networking" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "value" : 0, + "name" : "unmounted-remote-filesystems", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "networking", + "instance" : "", + "description" : "configure virtual network devices", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "mkdir -p /run/network\nifup -a\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : " log_warning_msg() {\n echo $*\n }\n\n # These checks were taken from the Debian ifupdown.networking.init script\n check_network_file_systems() {\n [ -e /proc/mounts ] || return 0\n\n if [ -e /etc/iscsi/iscsi.initramfs ]; then\n log_warning_msg \"not deconfiguring network interfaces: iSCSI root is mounted.\"\n exit 0\n fi\n\n while read DEV MTPT FSTYPE REST; do\n case $DEV in\n /dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)\n log_warning_msg \"not deconfiguring network interfaces: network devices still mounted.\"\n exit 0\n ;;\n esac\n case $FSTYPE in\n nfs|nfs4|smbfs|ncp|ncpfs|cifs|coda|ocfs2|gfs|pvfs|pvfs2|fuse.httpfs|fuse.curlftpfs)\n log_warning_msg \"not deconfiguring network interfaces: network file systems still mounted.\"\n exit 0\n ;;\n esac\n done < /proc/mounts\n }\n\n check_network_swap() {\n [ -e /proc/swaps ] || return 0\n\n while read DEV MTPT FSTYPE REST; do\n case $DEV in\n /dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)\n log_warning_msg \"not deconfiguring network interfaces: network swap still mounted.\"\n exit 0\n ;;\n esac\n done < /proc/swaps\n }\n\n check_network_file_systems\n check_network_swap\n\n # Anything that manages network interfaces *MUST* wait for this event\n initctl emit deconfiguring-networking\n ifdown -a --exclude=lo\n" + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/networking", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "local-filesystems", + "type" : "EVENT_MATCH" + }, + { + "env" : [ + "udevtrigger" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + }, + { + "value" : 0, + "type" : "EVENT_AND" + }, + { + "env" : [ + "[2345]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "procps", + "instance" : "$UPSTART_EVENTS", + "description" : "set sysctls from /etc/sysctl.conf", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "cat /etc/sysctl.d/*.conf /etc/sysctl.conf | sysctl -e -p -\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "UPSTART_EVENTS=" + ], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/procps", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "virtual-filesystems", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "name" : "static-network-up", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_OR" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "rfkill-restore", + "instance" : "", + "description" : "restore software rfkill state", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " if [ ! -f /var/lib/rfkill/saved-state ] ||\n [ ! -d /sys/class/rfkill ]; then\n exit 0\n fi\n\n while read line; do\n set -- $line\n\n for device in /sys/class/rfkill/*; do\n [ ! -d $device ] && continue\n\n if [ -f $device/soft ] &&\n [ \"$(cat $device/name)\" = \"$1\" ]; then\n echo $2 > $device/soft\n fi\n done\n done < /var/lib/rfkill/saved-state\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/rfkill_2drestore", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "local-filesystems", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1080, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : [ + { + "env" : [ + "[!23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty6/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : [ + { + "env" : [ + "[!23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty6", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty6" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty6", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "[23]" + ], + "value" : 0, + "name" : "runlevel", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "name" : "not-container", + "type" : "EVENT_MATCH" + }, + { + "value" : 0, + "type" : "EVENT_AND" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "console-font", + "instance" : "", + "description" : "set console font", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/lib/udev/console-setup-tty fbcon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/console_2dfont", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "plymouth-splash" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "chroot" : null, + "console" : "CONSOLE_LOG", + "name" : "false", + "kill_signal" : 15, + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/bin/false" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/false", + "deleted" : 0, + "chdir" : null, + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "chroot" : null, + "console" : "CONSOLE_LOG", + "name" : "james_daemon", + "kill_signal" : 15, + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/tmp/james_daemon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/james_5fdaemon", + "deleted" : 0, + "chdir" : null, + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [ + "net-device-added" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "network-interface-container", + "instance" : "", + "description" : "workaround for missing events in container", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "case \"$CONTAINER\" in\n lxc|lxc-libvirt)\n initctl emit --no-wait net-device-added INTERFACE=lo || true\n ;;\nesac\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 1, + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dcontainer", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "value" : 0, + "name" : "container", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : [ + { + "env" : [ + "rc" + ], + "value" : 0, + "name" : "stopped", + "type" : "EVENT_MATCH" + } + ], + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "ureadahead", + "instance" : "", + "description" : "Read required files in advance", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/ureadahead --daemon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : "sleep 45" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [ + 0 + ], + "kill_timeout" : 180, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/ureadahead", + "deleted" : 0, + "chdir" : null, + "start_on" : [ + { + "env" : [ + "mountall" + ], + "value" : 0, + "name" : "starting", + "type" : "EVENT_MATCH" + } + ], + "umask" : 18, + "setgid" : null + } + ], + "events" : [ + { + "progress" : "EVENT_HANDLING", + "env" : [ + "KERNEL=fb0", + "DEVPATH=/devices/pci0000:00/0000:00:02.0/graphics/fb0", + "DEVNAME=/dev/fb0", + "SUBSYSTEM=graphics", + "ACTION=add", + "ID_FOR_SEAT=graphics-pci-0000_00_02_0", + "ID_PATH=pci-0000:00:02.0", + "ID_PATH_TAG=pci-0000_00_02_0", + "MAJOR=29", + "MINOR=0", + "PRIMARY_DEVICE_FOR_DISPLAY=1", + "SEQNUM=1533", + "TAGS=:master-of-seat:seat:", + "USEC_INITIALIZED=7747" + ], + "session" : 0, + "name" : "graphics-device-added", + "blockers" : 1, + "failed" : 0, + "fd" : -1 + }, + { + "progress" : "EVENT_HANDLING", + "env" : [ + "JOB=udev-fallback-graphics", + "INSTANCE=", + "RESULT=failed", + "PROCESS=main", + "EXIT_STATUS=1" + ], + "session" : 0, + "name" : "stopped", + "blockers" : 1, + "failed" : 0, + "fd" : -1 + }, + { + "progress" : "EVENT_HANDLING", + "env" : [ + "RUNLEVEL=2", + "PREVLEVEL=N" + ], + "session" : 0, + "name" : "runlevel", + "blockers" : 2, + "failed" : 0, + "fd" : -1 + }, + { + "progress" : "EVENT_HANDLING", + "env" : [ + "JOB=rc", + "INSTANCE=", + "RESULT=ok", + "RUNLEVEL=2", + "PREVLEVEL=N" + ], + "session" : 0, + "name" : "stopped", + "blockers" : 1, + "failed" : 0, + "fd" : -1 + } + ] +} --- upstart-1.8.orig/init/tests/data/upstart-1.8.json +++ upstart-1.8/init/tests/data/upstart-1.8.json @@ -0,0 +1,8651 @@ +{ + "sessions" : [], + "job_classes" : [ + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 925, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 2, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "stopping dbus", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=dbus", + "INSTANCE=", + "UPSTART_EVENTS=filesystem started" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/avahi_2ddaemon/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "stop_on" : "stopping dbus", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "avahi-daemon", + "instance" : "", + "description" : "mDNS/DNS-SD daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "opts=\"-D\"\n[ -e \"/etc/eucalyptus/avahi-daemon.conf\" ] && opts=\"${opts} -f /etc/eucalyptus/avahi-daemon.conf\"\nexec avahi-daemon ${opts}\n" + }, + { + "script" : 1, + "command" : "/lib/init/apparmor-profile-load usr.sbin.avahi-daemon\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/avahi_2ddaemon", + "deleted" : 0, + "chdir" : null, + "start_on" : "(filesystem and started dbus)", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountnfs_2dbootclean_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountnfs-bootclean.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountnfs_2dbootclean_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : "virtual-filesystems", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1242, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!23]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty4/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [!23]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty4", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty4" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty4", + "deleted" : 0, + "chdir" : null, + "start_on" : "(runlevel [23] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1456, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!2345]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "CRASH_DB_URL=https://daisy.ubuntu.com", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/whoopsie/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "runlevel [!2345]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "whoopsie", + "instance" : "", + "description" : "crash report submission daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "whoopsie" + }, + { + "script" : 1, + "command" : " [ -x /usr/bin/ubiquity-dm ] && { stop; exit 0; }\n\n if ! grep report_crashes=true /etc/default/whoopsie -sqi; then\n stop; exit 0\n fi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "CRASH_DB_URL=https://daisy.ubuntu.com" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/whoopsie", + "deleted" : 0, + "chdir" : null, + "start_on" : "runlevel [2345]", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 28649, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [06]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/udev/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "runlevel [06]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "udev", + "instance" : "", + "description" : "device node and kernel event manager", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/udevd --daemon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/udev", + "deleted" : 0, + "chdir" : null, + "start_on" : "virtual-filesystems", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 28647, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 2, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "stopped udev", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=udev", + "INSTANCE=", + "UPSTART_EVENTS=starting" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dudev_2dbridge/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "*-device-added", + "*-device-removed", + "*-device-changed", + "*-device-online", + "*-device-offline" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "stop_on" : "stopped udev", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "upstart-udev-bridge", + "instance" : "", + "description" : "Bridge udev events into upstart", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "upstart-udev-bridge --daemon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dudev_2dbridge", + "deleted" : 0, + "chdir" : null, + "start_on" : "starting udev", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 3475, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [06]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/rsyslog/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "runlevel [06]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "rsyslog", + "instance" : "", + "description" : "system logging daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : ". /etc/default/rsyslog\nexec rsyslogd $RSYSLOGD_OPTIONS\n" + }, + { + "script" : 1, + "command" : "/lib/init/apparmor-profile-load usr.sbin.rsyslogd\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/rsyslog", + "deleted" : 0, + "chdir" : null, + "start_on" : "filesystem", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1247, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!23]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty5/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [!23]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty5", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty5" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty5", + "deleted" : 0, + "chdir" : null, + "start_on" : "(runlevel [23] and not-container)", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!2345]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "enabled=1" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/apport/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [!2345]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "apport", + "instance" : "", + "description" : "automatic crash report generation", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : " . /etc/default/apport\n [ \"$enabled\" = \"1\" ] || [ \"$force_start\" = \"1\" ] || exit 0\n\n mkdir -p -m 1777 /var/crash\n\n # check for kernel crash dump, convert it to apport report\n if [ -e /var/crash/vmcore ] || [ -n \"`ls /var/crash | egrep ^[0-9]{12}$`\" ]\n then\n\t/usr/share/apport/kernel_crashdump || true\n fi\n\n # check for incomplete suspend/resume or hibernate\n if [ -e /var/lib/pm-utils/status ]\n then\n /usr/share/apport/apportcheckresume || true\n rm -f /var/lib/pm-utils/status\n rm -f /var/lib/pm-utils/resume-hang.log\n fi\n\n echo \"|/usr/share/apport/apport %p %s %c\" > /proc/sys/kernel/core_pattern\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : " # Check for a hung resume. If we find one try and grab everything\n # we can to aid in its discovery\n if [ -e /var/lib/pm-utils/status ]\n then\n\tps -wwef > /var/lib/pm-utils/resume-hang.log\n fi\n\n if [ \"`dd if=/proc/sys/kernel/core_pattern count=1 bs=1 2>/dev/null`\" != \"|\" ]\n then\n\texit 1\n else\n\techo \"core\" > /proc/sys/kernel/core_pattern\n fi\n" + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "enabled=1" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/apport", + "deleted" : 0, + "chdir" : null, + "start_on" : "runlevel [2345]", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=local-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountall_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountall.sh", + "instance" : "", + "description" : "Signal sysvinit that local filesystems are mounted", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountall_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : "local-filesystems", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1161, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "stopping portmap", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "DEFAULTFILE=/etc/default/nfs-common", + "JOB=portmap", + "INSTANCE=", + "ON_BOOT=y", + "UPSTART_EVENTS=local-filesystems started" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/statd/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "stopping portmap", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "statd", + "instance" : "", + "description" : "NSM status monitor", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "\tif [ -f \"$DEFAULTFILE\" ]; then\n\t . \"$DEFAULTFILE\"\n\tfi\n\n\tif [ \"x$NEED_STATD\" != xno ]; then\n\t\texec rpc.statd -L $STATDOPTS\n\tfi\n" + }, + { + "script" : 1, + "command" : "\tif [ -f \"$DEFAULTFILE\" ]; then\n\t . \"$DEFAULTFILE\"\n\tfi\n\n\t[ \"x$NEED_STATD\" != xno ] || { stop; exit 0; }\n\tlogger -t statd-pre-start \"$UPSTART_EVENTS\" || true\n\techo UPSTART_EVENTS = \"$UPSTART_EVENTS\"\n\n exec sm-notify\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Steve Langasek ", + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "DEFAULTFILE=/etc/default/nfs-common" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/statd", + "deleted" : 0, + "chdir" : null, + "start_on" : "(started portmap ON_BOOT= or (local-filesystems and started portmap ON_BOOT=y))", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 769, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "deconfiguring-networking", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=local-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/dbus/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "deconfiguring-networking", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "dbus", + "instance" : "", + "description" : "D-Bus system message bus", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "dbus-daemon --system --fork" + }, + { + "script" : 1, + "command" : " mkdir -p /var/run/dbus\n chown messagebus:messagebus /var/run/dbus\n\n exec dbus-uuidgen --ensure\n" + }, + { + "script" : 0, + "command" : "kill -USR1 1" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : "rm -f /var/run/dbus/pid" + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/dbus", + "deleted" : 0, + "chdir" : null, + "start_on" : "local-filesystems", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1138, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "unmounted-remote-filesystems", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "ON_BOOT=y", + "UPSTART_EVENTS=start-rpcbind" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/portmap/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "unmounted-remote-filesystems", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "portmap", + "instance" : "", + "description" : "RPC portmapper replacement", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "OPTIONS=\"-w\"\nif [ -f /etc/default/rpcbind ]; then\n\t. /etc/default/rpcbind\nelif [ -f /etc/rpcbind.conf ]; then\n\t. /etc/rpcbind.conf\nfi\nexec rpcbind $OPTIONS\n" + }, + { + "script" : 0, + "command" : "mkdir -p /run/rpcbind" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Colin Watson ", + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "ON_BOOT=" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/portmap", + "deleted" : 0, + "chdir" : null, + "start_on" : "start-rpcbind", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [06]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "DEVICE=tmpfs", + "MOUNTPOINT=/run", + "TYPE=tmpfs", + "OPTIONS=noexec,nosuid,size=10%,mode=0755", + "UPSTART_EVENTS=mounted" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/resolvconf/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [06]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "resolvconf", + "instance" : "", + "description" : "Initialize or finalize resolvconf", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "mkdir -p /run/resolvconf/interface\n# Request a postponed update (needed in case the base file has content).\ntouch /run/resolvconf/postponed-update\n# Enable updates and perform the postponed update.\nresolvconf --enable-updates\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "resolvconf --disable-updates\n" + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/resolvconf", + "deleted" : 0, + "chdir" : null, + "start_on" : "mounted MOUNTPOINT=/run", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 5400, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!2345]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/atd/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "runlevel [!2345]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "atd", + "instance" : "", + "description" : "deferred execution scheduler", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "atd" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/atd", + "deleted" : 0, + "chdir" : null, + "start_on" : "runlevel [2345]", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1322, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!2345]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/autofs/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "runlevel [!2345]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "autofs", + "instance" : "", + "description" : "Automounter", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "if [ -f /etc/default/autofs ] ; then\n . /etc/default/autofs\nfi\nexec /usr/sbin/automount $OPTIONS\n" + }, + { + "script" : 1, + "command" : "modprobe -q autofs4 || true\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Chuck Short ", + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/autofs", + "deleted" : 0, + "chdir" : null, + "start_on" : "runlevel [2345]", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "DEVICE=/dev/disk/by-uuid/e6de9a06-e40a-46e5-be9c-61c72a13705c", + "MOUNTPOINT=/", + "TYPE=ext4", + "OPTIONS=errors=remount-ro", + "UPSTART_EVENTS=mounted" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/checkroot_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "checkroot.sh", + "instance" : "", + "description" : "Signal sysvinit that the rootfs is mounted", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/checkroot_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : "mounted MOUNTPOINT=/", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "starting rc RUNLEVEL=[016]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "LXC_AUTO=false", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/lxc/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "starting rc RUNLEVEL=[016]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "lxc", + "instance" : "", + "description" : "lxc", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "\t[ -f /etc/default/lxc ] && . /etc/default/lxc\n\n\t[ \"x$LXC_AUTO\" = \"xtrue\" ] || { stop; exit 0; }\n\n\t# don't load profiles if mount mediation is not supported\n\tSYSF=/sys/kernel/security/apparmor/features/mount/mask\n\tif [ -f $SYSF ]; then\n\t\tif [ -x /lib/init/apparmor-profile-load ]; then\n\t\t\t/lib/init/apparmor-profile-load usr.bin.lxc-start\n\t\t\t/lib/init/apparmor-profile-load lxc-containers\n\t\tfi\n\tfi\n\n\tls /etc/lxc/auto/* > /dev/null 2>&1 || exit 0;\n\tfor f in /etc/lxc/auto/*; do\n\t\tc=\"$(basename $f .conf)\"\n\t\tstart lxc-instance NAME=$c CONFIG=$f\n\tdone\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : "Serge Hallyn ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "LXC_AUTO=false" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/lxc", + "deleted" : 0, + "chdir" : null, + "start_on" : "runlevel [2345]", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1177, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "stopping dbus", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=dbus", + "INSTANCE=", + "UPSTART_EVENTS=local-filesystems started static-network-up" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/network_2dmanager/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "stopping dbus", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "network-manager", + "instance" : "", + "description" : "network connection manager", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : "\t# set $LANG so that messages appearing on the GUI will be translated. See LP: 875017\n\tif [ -r /etc/default/locale ]; then\n\t\t. /etc/default/locale\n\t\texport LANG LANGUAGE LC_MESSAGES LC_ALL\n\tfi\n\n\texec NetworkManager\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/network_2dmanager", + "deleted" : 0, + "chdir" : null, + "start_on" : "((local-filesystems and started dbus) and static-network-up)", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 5435, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "remote_closed" : 0, + "detached" : 0, + "uid" : 0, + "open_errno" : 0, + "path" : "/var/log/upstart/cups-browsed.log", + "io_watch_fd" : 16, + "fd" : -1 + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [016]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/cups_2dbrowsed/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [016]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "cups-browsed", + "instance" : "", + "description" : "cups-browsed - Bonjour remote printer browsing daemon", + "respawn_interval" : 12, + "process" : [ + { + "script" : 0, + "command" : "/usr/sbin/cups-browsed" + }, + { + "script" : 1, + "command" : "[ -x /usr/sbin/cups-browsed ]\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 3, + "author" : "Till Kamppeter ", + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/cups_2dbrowsed", + "deleted" : 0, + "chdir" : null, + "start_on" : "((filesystem and started avahi-daemon) and (started cups or runlevel [2345]))", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1337, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!2345]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/cron/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "runlevel [!2345]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "cron", + "instance" : "", + "description" : "regular background program processing daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "cron" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/cron", + "deleted" : 0, + "chdir" : null, + "start_on" : "runlevel [2345]", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1313, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "remote_closed" : 0, + "detached" : 0, + "uid" : 0, + "open_errno" : 0, + "path" : "/var/log/upstart/lightdm.log", + "io_watch_fd" : 21, + "fd" : -1 + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [016]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "JOB=udev-fallback-graphics", + "INSTANCE=", + "RESULT=ok", + "UPSTART_EVENTS=filesystem runlevel started stopped" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/lightdm/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "login-session-start", + "desktop-session-start", + "desktop-shutdown" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [016]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "lightdm", + "instance" : "", + "description" : "LightDM Display Manager", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " if [ -n \"$UPSTART_EVENTS\" ]\n then\n # Check kernel command-line for inhibitors, unless we are being called\n # manually\n for ARG in $(cat /proc/cmdline); do\n if [ \"$ARG\" = \"text\" ]; then\n\t\tplymouth quit || : \n stop\n\t\texit 0\n fi\n done\n\n\t[ ! -f /etc/X11/default-display-manager -o \"$(cat /etc/X11/default-display-manager 2>/dev/null)\" = \"/usr/bin/lightdm\" -o \"$(cat /etc/X11/default-display-manager 2>/dev/null)\" = \"/usr/sbin/lightdm\" ] || { stop; exit 0; }\n\n\tif [ \"$RUNLEVEL\" = S -o \"$RUNLEVEL\" = 1 ]\n\tthen\n\t # Single-user mode\n\t plymouth quit || :\n\t exit 0\n\tfi\n fi\n\n exec lightdm\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "sleep 5\nclear > /dev/tty7\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "if [ \"$UPSTART_STOP_EVENTS\" = runlevel ]; then\n\tinitctl emit desktop-shutdown\nfi\n" + } + ], + "respawn_limit" : 10, + "author" : "Robert Ancell ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/lightdm", + "deleted" : 0, + "chdir" : null, + "start_on" : "((((filesystem and runlevel [!06]) and started dbus) and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1 or stopped udev-fallback-graphics)) or runlevel PREVLEVEL=S)", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountkernfs_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountkernfs.sh", + "instance" : "", + "description" : "Signal sysvinit that virtual filesystems are mounted", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountkernfs_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : "virtual-filesystems", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1304, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!2345]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/acpid/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "runlevel [!2345]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "acpid", + "instance" : "", + "description" : "ACPI daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "acpid -c /etc/acpi/events -s /var/run/acpid.socket" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/acpid", + "deleted" : 0, + "chdir" : null, + "start_on" : "runlevel [2345]", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 902, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "stopping dbus", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UART_CONF=/etc/bluetooth/uart", + "RFCOMM_CONF=/etc/bluetooth/rfcomm.conf", + "JOB=dbus", + "INSTANCE=", + "UPSTART_EVENTS=started" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/bluetooth/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "stopping dbus", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "bluetooth", + "instance" : "", + "description" : "bluetooth daemon", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/usr/sbin/bluetoothd" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "\t[ \"$VERBOSE\" = no ] && redirect='>/dev/null 2>&1' || redirect=\n\n\t# start_uarts()\n\tif [ -x /usr/sbin/hciattach ] && [ -f $UART_CONF ];\n\tthen\n\t\tgrep -v '^#' $UART_CONF | while read i; do\n\t\t eval \"/usr/sbin/hciattach $i $redirect\" || :\n\t\tdone\n\tfi\n\n\t# start_rfcomm()\n\tif [ -x /usr/bin/rfcomm ] && [ -f $RFCOMM_CONF ] ;\n\tthen\n\t\t# rfcomm must always succeed for now: users\n\t\t# may not yet have an rfcomm-enabled kernel\n\t\teval \"/usr/bin/rfcomm -f $RFCOMM_CONF bind all $redirect\" || :\n\tfi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "\t# stop_uarts()\n\tlogger -t bluez \"Stopping uarts\"\n\tkillall hciattach >/dev/null 2>&1 || :\n\n\t# stop_rfcomm()\n\tlogger -t bluez \"Stopping rfcomm\"\n\tif [ -x /usr/bin/rfcomm ];\n\tthen\n\t\teval \"/usr/bin/rfcomm unbind all $redirect\" || :\n\tfi\n" + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "UART_CONF=/etc/bluetooth/uart", + "RFCOMM_CONF=/etc/bluetooth/rfcomm.conf" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/bluetooth", + "deleted" : 0, + "chdir" : null, + "start_on" : "started dbus", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "DEVICE=/dev/disk/by-uuid/e6de9a06-e40a-46e5-be9c-61c72a13705c", + "MOUNTPOINT=/", + "TYPE=ext4", + "OPTIONS=errors=remount-ro", + "UPSTART_EVENTS=mounted" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/checkfs_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "checkfs.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/checkfs_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : "mounted MOUNTPOINT=/", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "DEVICE=/dev/disk/by-uuid/e6de9a06-e40a-46e5-be9c-61c72a13705c", + "MOUNTPOINT=/", + "TYPE=ext4", + "OPTIONS=errors=remount-ro", + "UPSTART_EVENTS=mounted" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/checkroot_2dbootclean_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "checkroot-bootclean.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/checkroot_2dbootclean_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : "mounted MOUNTPOINT=/", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=remote-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountnfs_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountnfs.sh", + "instance" : "", + "description" : "Signal sysvinit that remote filesystems are mounted", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountnfs_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : "remote-filesystems", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!023456]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=network-interface", + "INSTANCE=eth0", + "INTERFACE=eth0", + "UPSTART_EVENTS=starting" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/ufw/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [!023456]", + "chroot" : null, + "console" : "CONSOLE_OUTPUT", + "kill_signal" : 15, + "name" : "ufw", + "instance" : "", + "description" : "Uncomplicated firewall", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : "/lib/ufw/ufw-init start quiet" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : "/lib/ufw/ufw-init stop" + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/ufw", + "deleted" : 0, + "chdir" : null, + "start_on" : "((starting network-interface or starting network-manager) or starting networking)", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/bootmisc_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "bootmisc.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/bootmisc_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : "virtual-filesystems", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 17529, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 2, + "respawn_time" : 535, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 1, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!2345]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "IFACE=lo", + "LOGICAL=lo", + "ADDRFAM=inet", + "METHOD=loopback", + "UPSTART_EVENTS=net-device-up" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dsocket_2dbridge/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "socket" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "stop_on" : "runlevel [!2345]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "upstart-socket-bridge", + "instance" : "", + "description" : "Bridge socket events into upstart", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "upstart-socket-bridge --daemon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dsocket_2dbridge", + "deleted" : 0, + "chdir" : null, + "start_on" : "net-device-up IFACE=lo", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 28131, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [016]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/cups/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [016]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "cups", + "instance" : "", + "description" : "CUPS printing spooler/server", + "respawn_interval" : 12, + "process" : [ + { + "script" : 0, + "command" : "/usr/sbin/cupsd -F" + }, + { + "script" : 1, + "command" : " [ -x /usr/sbin/cupsd ]\n \n # load modules for parallel port support\n if [ -r /etc/default/cups ]; then\n\t. /etc/default/cups\n fi\n if [ \"$LOAD_LP_MODULE\" = \"yes\" -a -f /usr/lib/cups/backend/parallel \\\n\t -a -f /proc/modules -a -x /sbin/modprobe ]; then\n\tmodprobe -q -b lp || true\n\tmodprobe -q -b ppdev || true\n\tmodprobe -q -b parport_pc || true\n fi\n \n mkdir -p /var/run/cups/certs\n if [ -x /lib/init/apparmor-profile-load ]; then\n\t/lib/init/apparmor-profile-load usr.sbin.cupsd\n fi\n" + }, + { + "script" : 1, + "command" : " # wait until daemon is ready\n timeout=6\n while [ ! -e /var/run/cups/cups.sock ]; do \n sleep 0.5\n\ttimeout=$((timeout-1))\n\tif [ \"$timeout\" -eq 0 ]; then\n\t echo \"cupsd failed to create /var/run/cups/cups.sock, skipping automatic printer configuration\" >&2\n\t exit 0\n\tfi\n done\n \n # coldplug USB printers\n if ! /lib/udev/udev-configure-printer enumerate 2>/dev/null; then\n if type udevadm > /dev/null 2>&1 && [ -x /lib/udev/udev-configure-printer ]; then\n for printer in `udevadm trigger --verbose --dry-run --subsystem-match=usb \\\n --attr-match=bInterfaceClass=07 --attr-match=bInterfaceSubClass=01 2>/dev/null || true; \\\n udevadm trigger --verbose --dry-run --subsystem-match=usb \\\n --sysname-match='lp[0-9]*' 2>/dev/null || true`; do\n /lib/udev/udev-configure-printer add \"${printer#/sys}\"\n done\n fi\n fi\n echo \"CUPS POST-START DONE\"\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 3, + "author" : "Michael Sweet ", + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/cups", + "deleted" : 0, + "chdir" : null, + "start_on" : "((filesystem and started avahi-daemon) and (started dbus or runlevel [2345]))", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountdevsubfs_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountdevsubfs.sh", + "instance" : "", + "description" : "Signal sysvinit that virtual filesystems are mounted", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountdevsubfs_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : "virtual-filesystems", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1262, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!23]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty2/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [!23]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty2", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty2" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty2", + "deleted" : 0, + "chdir" : null, + "start_on" : "(runlevel [23] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 17531, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 2, + "respawn_time" : 535, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 1, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!2345]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "DEVICE=proc", + "MOUNTPOINT=/proc", + "TYPE=proc", + "OPTIONS=nodev,noexec,nosuid", + "UPSTART_EVENTS=mounted" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dfile_2dbridge/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "file" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "stop_on" : "runlevel [!2345]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "upstart-file-bridge", + "instance" : "", + "description" : "Bridge file events into upstart", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "upstart-file-bridge --daemon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dfile_2dbridge", + "deleted" : 0, + "chdir" : null, + "start_on" : "mounted", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mtab_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mtab.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mtab_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : "virtual-filesystems", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1263, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!23]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty3/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [!23]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty3", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty3" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty3", + "deleted" : 0, + "chdir" : null, + "start_on" : "(runlevel [23] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "stopped lxc", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "USE_LXC_BRIDGE=false", + "LXC_BRIDGE=lxcbr0", + "LXC_ADDR=10.0.3.1", + "LXC_NETMASK=255.255.255.0", + "LXC_NETWORK=10.0.3.0/24", + "LXC_DHCP_RANGE=10.0.3.2,10.0.3.254", + "LXC_DHCP_MAX=253", + "varrun=/var/run/lxc", + "JOB=lxc", + "INSTANCE=", + "UPSTART_EVENTS=starting" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/lxc_2dnet/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "stopped lxc", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "lxc-net", + "instance" : "", + "description" : "lxc network", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "\t[ -f /etc/default/lxc ] && . /etc/default/lxc\n\n\t[ \"x$USE_LXC_BRIDGE\" = \"xtrue\" ] || { stop; exit 0; }\n\n\tcleanup() {\n\t\t# dnsmasq failed to start, clean up the bridge\n\t\tiptables -t nat -D POSTROUTING -s ${LXC_NETWORK} ! -d ${LXC_NETWORK} -j MASQUERADE || true\n\t\tifconfig ${LXC_BRIDGE} down || true\n\t\tbrctl delbr ${LXC_BRIDGE} || true\n\t}\n\n\tif [ -d /sys/class/net/${LXC_BRIDGE} ]; then\n\t\tif [ ! -f ${varrun}/network_up ]; then\n\t\t\t# bridge exists, but we didn't start it\n\t\t\tstop;\n\t\tfi\n\t\texit 0;\n\tfi\n\n\t# set up the lxc network\n\techo 1 > /proc/sys/net/ipv4/ip_forward\n\tmkdir -p ${varrun}\n\tbrctl addbr ${LXC_BRIDGE}\n\tifconfig ${LXC_BRIDGE} ${LXC_ADDR} netmask ${LXC_NETMASK} up\n\tiptables -t nat -A POSTROUTING -s ${LXC_NETWORK} ! -d ${LXC_NETWORK} -j MASQUERADE\n\tdnsmasq -u lxc-dnsmasq --strict-order --bind-interfaces --pid-file=${varrun}/dnsmasq.pid --conf-file= --listen-address ${LXC_ADDR} --dhcp-range ${LXC_DHCP_RANGE} --dhcp-lease-max=${LXC_DHCP_MAX} --dhcp-no-override --except-interface=lo --interface=${LXC_BRIDGE} --dhcp-leasefile=/var/lib/misc/dnsmasq.${LXC_BRIDGE}.leases --dhcp-authoritative || cleanup\n\ttouch ${varrun}/network_up\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "\t[ -f /etc/default/lxc ] && . /etc/default/lxc\n\t[ -f \"${varrun}/network_up\" ] || exit 0;\n\t# if $LXC_BRIDGE has attached interfaces, don't shut it down\n\tls /sys/class/net/${LXC_BRIDGE}/brif/* > /dev/null 2>&1 && exit 0;\n\n\tif [ -d /sys/class/net/${LXC_BRIDGE} ]; then\n\t\tifconfig ${LXC_BRIDGE} down\n\t\tiptables -t nat -D POSTROUTING -s ${LXC_NETWORK} ! -d ${LXC_NETWORK} -j MASQUERADE || true\n\t\tpid=`cat ${varrun}/dnsmasq.pid 2>/dev/null` && kill -9 $pid || true\n\t\trm -f ${varrun}/dnsmasq.pid\n\t\tbrctl delbr ${LXC_BRIDGE}\n\tfi\n\trm -f ${varrun}/network_up\n" + } + ], + "respawn_limit" : 10, + "author" : "Serge Hallyn ", + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "USE_LXC_BRIDGE=false", + "LXC_BRIDGE=lxcbr0", + "LXC_ADDR=10.0.3.1", + "LXC_NETMASK=255.255.255.0", + "LXC_NETWORK=10.0.3.0/24", + "LXC_DHCP_RANGE=10.0.3.2,10.0.3.254", + "LXC_DHCP_MAX=253", + "varrun=/var/run/lxc" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/lxc_2dnet", + "deleted" : 0, + "chdir" : null, + "start_on" : "starting lxc", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 17527, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 2, + "respawn_time" : 535, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 1, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dtest_2dbridge/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_DAEMON", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "upstart-test-bridge", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/upstart-test-bridge --daemon" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dtest_2dbridge", + "deleted" : 0, + "chdir" : null, + "start_on" : "runlevel [2345]", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "net-device-removed INTERFACE=$INTERFACE", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "KERNEL=lxcbr0", + "DEVPATH=/devices/virtual/net/lxcbr0", + "SUBSYSTEM=net", + "ACTION=add", + "DEVTYPE=bridge", + "ID_MM_CANDIDATE=1", + "IFINDEX=3", + "INTERFACE=lxcbr0", + "SEQNUM=1550", + "UDEV_LOG=3", + "USEC_INITIALIZED=6286474", + "UPSTART_EVENTS=net-device-added" + ], + "name" : "lxcbr0", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface/lxcbr0", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + }, + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "net-device-removed INTERFACE=$INTERFACE", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "KERNEL=lo", + "DEVPATH=/devices/virtual/net/lo", + "SUBSYSTEM=net", + "ACTION=add", + "ID_MM_CANDIDATE=1", + "IFINDEX=1", + "INTERFACE=lo", + "SEQNUM=1396", + "UDEV_LOG=3", + "USEC_INITIALIZED=4313914", + "UPSTART_EVENTS=net-device-added" + ], + "name" : "lo", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface/lo", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + }, + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "net-device-removed INTERFACE=$INTERFACE", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "KERNEL=eth0", + "DEVPATH=/devices/pci0000:00/0000:00:03.0/net/eth0", + "SUBSYSTEM=net", + "ACTION=add", + "ID_BUS=pci", + "ID_MM_CANDIDATE=1", + "ID_MODEL_FROM_DATABASE=82540EM Gigabit Ethernet Controller", + "ID_MODEL_ID=/sys/devices/pci0000:00/0000:00:03.0", + "ID_VENDOR_FROM_DATABASE=Intel Corporation", + "ID_VENDOR_ID=0x8086", + "IFINDEX=2", + "INTERFACE=eth0", + "MATCHADDR=52:54:00:12:34:56", + "MATCHIFTYPE=1", + "SEQNUM=1246", + "UDEV_LOG=3", + "USEC_INITIALIZED=3956259", + "UPSTART_EVENTS=net-device-added" + ], + "name" : "eth0", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface/eth0", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "net-device-up", + "net-device-down", + "static-network-up" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "net-device-removed INTERFACE=$INTERFACE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "network-interface", + "instance" : "$INTERFACE", + "description" : "configure network device", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : " if [ \"$INTERFACE\" = lo ]; then\n\t# bring this up even if /etc/network/interfaces is broken\n\tifconfig lo 127.0.0.1 up || true\n\tinitctl emit -n net-device-up \\\n\t IFACE=lo LOGICAL=lo ADDRFAM=inet METHOD=loopback || true\n fi\n mkdir -p /run/network\n exec ifup --allow auto $INTERFACE\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : "ifdown --allow auto $INTERFACE" + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface", + "deleted" : 0, + "chdir" : null, + "start_on" : "net-device-added", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 25570, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 1345, + "log" : [ + { + "remote_closed" : 0, + "detached" : 0, + "uid" : 0, + "open_errno" : 0, + "path" : "/var/log/upstart/respawn-test.log", + "io_watch_fd" : 14, + "fd" : -1 + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 1, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/respawn_2dtest/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "respawn-test", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "sleep 999" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/respawn_2dtest", + "deleted" : 0, + "chdir" : null, + "start_on" : "runlevel [2345]", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1522, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!2345]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=rc", + "INSTANCE=", + "RESULT=ok", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=stopped not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty1/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [!2345]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty1", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty1" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty1", + "deleted" : 0, + "chdir" : null, + "start_on" : "(stopped rc RUNLEVEL=[2345] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "UPSTART_EVENTS=virtual-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/mountall_2dbootclean_2esh/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "mountall-bootclean.sh", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/mountall_2dbootclean_2esh", + "deleted" : 0, + "chdir" : null, + "start_on" : "virtual-filesystems", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "((stopped network-interface JOB=$JOB INTERFACE=$INTERFACE or stopped network-manager JOB=$JOB) or stopped networking JOB=$JOB)", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=network-manager", + "INSTANCE=", + "UPSTART_EVENTS=starting" + ], + "name" : "network-manager", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dsecurity/network_2dmanager", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + }, + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "((stopped network-interface JOB=$JOB INTERFACE=$INTERFACE or stopped network-manager JOB=$JOB) or stopped networking JOB=$JOB)", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=network-interface", + "INSTANCE=eth0", + "INTERFACE=eth0", + "UPSTART_EVENTS=starting" + ], + "name" : "network-interface/eth0", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dsecurity/network_2dinterface_2feth0", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + }, + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "((stopped network-interface JOB=$JOB INTERFACE=$INTERFACE or stopped network-manager JOB=$JOB) or stopped networking JOB=$JOB)", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=network-interface", + "INSTANCE=lxcbr0", + "INTERFACE=lxcbr0", + "UPSTART_EVENTS=starting" + ], + "name" : "network-interface/lxcbr0", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dsecurity/network_2dinterface_2flxcbr0", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + }, + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "((stopped network-interface JOB=$JOB INTERFACE=$INTERFACE or stopped network-manager JOB=$JOB) or stopped networking JOB=$JOB)", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=network-interface", + "INSTANCE=lo", + "INTERFACE=lo", + "UPSTART_EVENTS=starting" + ], + "name" : "network-interface/lo", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dsecurity/network_2dinterface_2flo", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + }, + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "((stopped network-interface JOB=$JOB INTERFACE=$INTERFACE or stopped network-manager JOB=$JOB) or stopped networking JOB=$JOB)", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=networking", + "INSTANCE=", + "UPSTART_EVENTS=starting" + ], + "name" : "networking", + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dsecurity/networking", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "((stopped network-interface JOB=$JOB INTERFACE=$INTERFACE or stopped network-manager JOB=$JOB) or stopped networking JOB=$JOB)", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "network-interface-security", + "instance" : "$JOB${INTERFACE:+/}${INTERFACE:-}", + "description" : "configure network device security", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "[ -f /run/network-interface-security ] && exit 0 # already ran\n[ -d /rofs/etc/apparmor.d ] && exit 0 # do not load on liveCD\n[ -d /sys/module/apparmor ] || exit 0 # do not load without AppArmor\n[ -x /sbin/apparmor_parser ] || exit 0 # do not load without parser\nfor link in /etc/apparmor/init/network-interface-security/* ; do\n [ -L $link ] && /sbin/apparmor_parser -r -W $link || true\ndone\n> /run/network-interface-security\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/network_2dinterface_2dsecurity", + "deleted" : 0, + "chdir" : null, + "start_on" : "((starting network-interface or starting network-manager) or starting networking)", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 0, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "unmounted-remote-filesystems", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "JOB=udevtrigger", + "INSTANCE=", + "RESULT=ok", + "UPSTART_EVENTS=local-filesystems stopped" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/networking/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [ + "static-network-up", + "net-device-up", + "deconfiguring-networking" + ], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "unmounted-remote-filesystems", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "networking", + "instance" : "", + "description" : "configure virtual network devices", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "mkdir -p /run/network\nifup -a\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : " log_warning_msg() {\n echo $*\n }\n\n # These checks were taken from the Debian ifupdown.networking.init script\n check_network_file_systems() {\n [ -e /proc/mounts ] || return 0\n\n if [ -e /etc/iscsi/iscsi.initramfs ]; then\n log_warning_msg \"not deconfiguring network interfaces: iSCSI root is mounted.\"\n exit 0\n fi\n\n while read DEV MTPT FSTYPE REST; do\n case $DEV in\n /dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)\n log_warning_msg \"not deconfiguring network interfaces: network devices still mounted.\"\n exit 0\n ;;\n esac\n case $FSTYPE in\n nfs|nfs4|smbfs|ncp|ncpfs|cifs|coda|ocfs2|gfs|pvfs|pvfs2|fuse.httpfs|fuse.curlftpfs)\n log_warning_msg \"not deconfiguring network interfaces: network file systems still mounted.\"\n exit 0\n ;;\n esac\n done < /proc/mounts\n }\n\n check_network_swap() {\n [ -e /proc/swaps ] || return 0\n\n while read DEV MTPT FSTYPE REST; do\n case $DEV in\n /dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)\n log_warning_msg \"not deconfiguring network interfaces: network swap still mounted.\"\n exit 0\n ;;\n esac\n done < /proc/swaps\n }\n\n check_network_file_systems\n check_network_swap\n\n # Anything that manages network interfaces *MUST* wait for this event\n initctl emit deconfiguring-networking\n ifdown -a --exclude=lo\n" + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 0, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/networking", + "deleted" : 0, + "chdir" : null, + "start_on" : "((local-filesystems and (stopped udevtrigger or container)) or runlevel [2345])", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1267, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!23]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty_2dserial/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [!23]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty-serial", + "instance" : "", + "description" : "Maintain a getty on first serial port given as 'console=' kernel argument", + "respawn_interval" : 5, + "process" : [ + { + "script" : 1, + "command" : " # check for console entry\n [ -z \"`grep console= /proc/cmdline`\" ] && exit 0\n OLD_IFS=$IFS\n\n for arg in $(cat /proc/cmdline)\n do\n case \"$arg\" in\n console=*)\n IFS=','\n set -- ${arg#console=}\n\n # no device specified\n [ -z \"$1\" ] && continue\n \n # handle braille devices\n [ \"$1\" = brl ] && shift\n \n # Extract device name, also handling scenario where user\n # specifies full path to device. Specifying a full path is oddly\n # not valid, but since it's a potentially common scenario, we\n # handle it.\n PORT=${1#/dev/}\n DEVICE=\"/dev/$PORT\"\n \n # device doesn't exist\n [ ! -e \"${DEVICE}\" ] && continue\n \n # only allow authorized terminals\n grep -q \"^${PORT}$\" /etc/securetty || continue\n \n # device already has an associated job\n [ -f /etc/init/$PORT.conf ] && continue\n \n # invalid options specified\n options=\"$2\"\n if [ -n \"$options\" ]; then\n echo \"$options\" | egrep \"[0-9]{4,}(n|o|e)[0-9]r*\" || continue\n fi\n \n # delimit options with commas for easier parsing\n options=$(echo \"$options\" | sed -r \\\n -e 's/^([0-9]{4,})/\\1,/g' \\\n -e 's/(n|o|e)/\\1,/g' \\\n -e 's/(7|8)/\\1,/g')\n IFS=','\n set -- $options\n \n SPEED=\"$1\"\n PARITY=\"$2\"\n BITS=\"$3\"\n FLOW=\"$4\"\n \n GETTY_ARGS=\"\"\n \n [ -z \"$SPEED\" ] && SPEED='115200,57600,38400,19200,9600'\n [ -z \"$BITS\" ] && BITS=8\n [ -n \"$BITS\" -a \"$BITS\" -eq 8 ] && GETTY_ARGS=\"$GETTY_ARGS -8 \"\n [ -n \"$FLOW\" ] && GETTY_ARGS=\"$GETTY_ARGS --flow-control\"\n\texport TERM=linux\n \texport IFS=$OLD_IFS\n\tset > /tmp/james\n GETTY_ARGS=\"$GETTY_ARGS $SPEED $PORT\"\n exec /sbin/getty $GETTY_ARGS\n\tbreak\n ;;\n esac\n done\n ## XXX: WORKS!!\n #export TERM=linux\n #export IFS=$OLD_IFS\n #exec /sbin/getty $GETTY_ARGS\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty_2dserial", + "deleted" : 0, + "chdir" : null, + "start_on" : "(runlevel [23] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 1268, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 0, + "respawn_time" : 0, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 0, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "runlevel [!23]", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "RUNLEVEL=2", + "PREVLEVEL=N", + "UPSTART_EVENTS=runlevel not-container" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/tty6/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_NONE", + "stop_on" : "runlevel [!23]", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "tty6", + "instance" : "", + "description" : null, + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "/sbin/getty -8 38400 tty6" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + } + ], + "respawn_limit" : 10, + "author" : null, + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/tty6", + "deleted" : 0, + "chdir" : null, + "start_on" : "(runlevel [23] and not-container)", + "umask" : 18, + "setgid" : null + }, + { + "setuid" : null, + "jobs" : [ + { + "trace_state" : "TRACE_NONE", + "failed" : 0, + "state" : "JOB_RUNNING", + "failed_process" : "PROCESS_INVALID", + "pid" : [ + 906, + 0, + 0, + 0, + 0 + ], + "start_env" : [], + "trace_forks" : 1, + "respawn_time" : 343, + "log" : [ + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + }, + { + "path" : null + } + ], + "respawn_count" : 1, + "kill_process" : "PROCESS_INVALID", + "stop_on" : "unmounted-remote-filesystems", + "env" : [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", + "TERM=linux", + "PIPEFS_MOUNTPOINT=/run/rpc_pipefs", + "UPSTART_EVENTS=local-filesystems" + ], + "name" : "", + "path" : "/com/ubuntu/Upstart/jobs/idmapd/_", + "exit_status" : 0, + "goal" : "JOB_START", + "stop_env" : [], + "fds" : [] + } + ], + "emits" : [], + "session" : 0, + "debug" : 0, + "export" : [], + "expect" : "EXPECT_FORK", + "stop_on" : "unmounted-remote-filesystems", + "chroot" : null, + "console" : "CONSOLE_LOG", + "kill_signal" : 15, + "name" : "idmapd", + "instance" : "", + "description" : "NFSv4 id <-> name mapper", + "respawn_interval" : 5, + "process" : [ + { + "script" : 0, + "command" : "rpc.idmapd" + }, + { + "script" : 1, + "command" : "\tdo_modprobe() {\n\t\tmodprobe -q \"$1\" || true\n\t}\n\n\tdo_modprobe nfs\n\tdo_modprobe nfsd\n\n\tdo_modprobe sunrpc\n\n\tif ! mountpoint -q \"$PIPEFS_MOUNTPOINT\"\n\tthen\n\t\tmkdir -p \"$PIPEFS_MOUNTPOINT\"\n\t\tmount -t rpc_pipefs rpc_pipefs \"$PIPEFS_MOUNTPOINT\" || true\n\tfi\n" + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 0, + "command" : null + }, + { + "script" : 1, + "command" : "if mountpoint -q \"$PIPEFS_MOUNTPOINT\"\nthen\n\t# ignore any failures caused by the filesystem still\n\t# being in use\n\tumount \"$PIPEFS_MOUNTPOINT\" || true\nfi\n" + } + ], + "respawn_limit" : 10, + "author" : "Steve Langasek ", + "respawn" : 1, + "nice" : -21, + "limits" : [ + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + }, + { + "rlim_cur" : 0, + "rlim_max" : 0 + } + ], + "oom_score_adj" : 0, + "normalexit" : [], + "kill_timeout" : 5, + "usage" : null, + "env" : [ + "PIPEFS_MOUNTPOINT=/run/rpc_pipefs" + ], + "version" : null, + "task" : 0, + "path" : "/com/ubuntu/Upstart/jobs/idmapd", + "deleted" : 0, + "chdir" : null, + "start_on" : "local-filesystems", + "umask" : 18, + "setgid" : null + } + ], + "events" : [ + { + "progress" : "EVENT_HANDLING", + "env" : [ + "JOB=cups", + "INSTANCE=" + ], + "session" : 0, + "name" : "started", + "blockers" : 1, + "failed" : 0, + "fd" : -1 + }, + { + "progress" : "EVENT_HANDLING", + "env" : [ + "JOB=udev", + "INSTANCE=" + ], + "session" : 0, + "name" : "started", + "blockers" : 3, + "failed" : 0, + "fd" : -1 + } + ] +} --- upstart-1.8.orig/scripts/Makefile.am +++ upstart-1.8/scripts/Makefile.am @@ -9,7 +9,8 @@ dist_man_MANS = \ man/initctl2dot.8 \ - man/init-checkconf.8 + man/init-checkconf.8 \ + man/upstart-monitor.8 install-exec-hook: $(EXTRA_DIST) [ ! -d "$(DESTDIR)/$(bindir)" ] && mkdir -p "$(DESTDIR)/$(bindir)"; \ --- upstart-1.8.orig/scripts/man/upstart-monitor.8 +++ upstart-1.8/scripts/man/upstart-monitor.8 @@ -0,0 +1,81 @@ +.TH upstart\-monitor 8 2013-03-13 upstart +.\" +.SH NAME +upstart\-monitor \- Display system and session Upstart events +.\" +.SH SYNOPSIS +.B upstart\-monitor +.RI [ OPTIONS ]... +.\" +.SH DESCRIPTION +.B upstart\-monitor +displays Upstart system events or Upstart session events using either a +command-line or graphical interface. +.\" +.SH OPTIONS +.\" +.TP +.BR \-d " \fIdestination\fP" " , " \-\-destination=\fIdestination\fP +Specify the endpoint to connect to. Valid destinations are +.IR session\-socket ", " +.IR session\-bus ", " +.IR system\-socket " and " +.IR system-bus "." +.\" +.TP +.B \-\-help +Show brief usage summary. +.\" +.TP +.BR \-n " , " \-\-no-gui +Run in command-line mode. +.\" +.TP +.BR \-s " , " \-\-separator +Specify alternate field separator to use for command-line output +(default is a single tab character). +.\" +.SH NOTES +.\" +.IP \(bu 4 +By default, +.B upstart\-monitor +will attempt to start in a graphical mode unless +.B \-\-no\-gui +is specified. However, if it is unable to display a graphical interface, +it will display a warning message and automatically revert to the +command-line interface. +.\" +.IP \(bu 4 +When no command-line option (that affects the destination) is specified, +.B upstart\-monitor +will attempt to connect to the Session Init (destination +\fIsession\-socket\fR) and display session events. In this mode, it +will display both session events +.I and +system events, assuming the +.BR upstart-event-bridge (8) +is running. + +If invoked with no arguments from within a non-Upstart session +environment it will attempt to connect to Upstart running as process ID +1 (destination \fIsystem\-bus\fR) and will only display system events. +.\" +.SH AUTHOR +Written by James Hunt +.RB < james.hunt@ubuntu.com > +.\" +.SH BUGS +Report bugs at +.RB < https://launchpad.net/ubuntu/+source/upstart/+bugs > +.\" +.SH COPYRIGHT +Copyright \(co 2013 Canonical Ltd. +.PP +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +.SH SEE ALSO +.BR init (5) +.BR init (8) +.BR upstart-events (7) +.BR upstart-event-bridge (8) --- upstart-1.8.orig/debian/README.Debian +++ upstart-1.8/debian/README.Debian @@ -0,0 +1,200 @@ +upstart +======= + +Upstart is a replacement for the traditional sysvinit package, and +runs as process #1. Through upstart, we are able to have an +event-driven process, whilst at the same time retaining compatibility +for the original sysvinit behaviour. + +This file documents how to do a few common operations with the new +system. + + +Where are initscripts installed? +-------------------------------- + +This has not changed, they are installed in /etc/init.d. See +/etc/init.d/README. + +Important system jobs are no longer shipped as initscripts, but as +upstart jobs. These are installed in /etc/init + + +How are initscripts started and stopped? +---------------------------------------- + +This has not changed, symlinks are made from the initscript in the +/etc/init.d directory to the /etc/rc?.d directories. See +/etc/init.d/README and /etc/rc?.d/README. + + +What order are initscripts started and stopped in? +-------------------------------------------------- + +This has not changed, the symlinks are named SNNname or KNNname, where +NN is a number from 00 to 99. The K scripts are run first in +numerical order, followed by the S scripts in numerical order. + + +How do I find the current/previous runlevel? +-------------------------------------------- + +This has not changed, use the "runlevel" command. See runlevel(8). + + +How do I change the runlevel? +----------------------------- + +This has not changed, use the "telinit" command or just invoke "init" +directly. See telinit(8). + + +How do I change the default runlevel? +------------------------------------- + +If you have an /etc/inittab file, edit it. Locate the following line: + + id:N:initdefault: + +Where N is the default runlevel, change this to match. + +Most people won't have that file, you can edit /etc/init/rc-sysinit.conf +and change the following line: + + env DEFAULT_RUNLEVEL=2 + + +How do I shutdown the machine? +------------------------------ + +This has not changed, use the "shutdown" command provided by the +upstart package; you may also use the "reboot"/"halt"/"poweroff" +commands as a short-cut. See shutdown(8) and reboot(8). + +You can also press Control-Alt-Delete on a console to reboot the +machine. + + +How do I change the behaviour of Control-Alt-Delete? +---------------------------------------------------- + +Edit the /etc/init/control-alt-delete.conf file, the line beginning +"exec" is what upstart will run when this key combination is pressed. + +To not do anything, you can simply delete this file. + + +How do I enter single-user mode? +-------------------------------- + +This hasn't changed, choose the "(recovery mode)" option from GRUB; +add "-s", "S" or "single" to the kernel command-line; or from a +running machine, run "telinit 1" or "shutdown now". + + +How do I reduce the number of gettys? +------------------------------------- + +Also see "How do I change which runlevels gettys are run in?" + +In /etc/init there is a file named ttyN.conf for each getty that will be +started, where N is numbered 1 to 6. Remove any that you do not +want. + +This will not take immediate effect, however you can run "stop ttyN" +to stop one that is running. + + +How do I change getty parameters? +--------------------------------- + +In /etc/init there is a file named ttyN.conf for each getty that will be +started, where N is numbered 1 to 6. Edit these files, the line +beginning "respawn" is what upstart will run. + +This will not take immediate effect, run "stop ttyN" followed by +"start ttyN" or just kill the running getty to respawn with the new +parameters. + + +How do I change which runlevels gettys are run in? +-------------------------------------------------- + +In /etc/init there is a file named ttyN.conf for each getty that will be +started, where N is numbered 1 to 6. Edit these files, there are two +lines: + + start on runlevel [2345] + stop on runlevel [!2345] + +Change the set of runlevels to match your taste. + +This will not take immediate effect, however you can run "stop ttyN" +to stop one that is running or "start ttyN" to start one that isn't. + + +How do I increase the number of gettys? +--------------------------------------- + +In /etc/init there is a file named ttyN.conf for each getty that will be +started, where N is numbered 1 to 6. + +Copy one of these files to a new name, we suggest you simply name it +after the tty, e.g. "ttyS0". + +Edit that file, change the "respawn" line to match your requirements; +in particular you'll need to change the tty the getty should be run +on. + +This will not take immediate effect, however you can run "start ttyN" +to start the getty. + + +How do I add a serial console? +------------------------------ + +See "How do I increase the number of gettys?" + + +How can I see boot messages on the console? +------------------------------------------- + +This is nothing to do with upstart, but I'll answer this anyway. +Remove "quiet" from the kernel command-line. + +To make this permanent, edit /boot/grub/menu.lst and edit the line +that begins "# defoptions=" (yes, it looks like a comment). + +This will change both usplash and the LSB init logging. + + +Upstart isn't working, how do I debug it? +----------------------------------------- + +Add "--debug" to the kernel command-line, and be sure to remove "quiet" +and "splash". You'll now see debugging messages as upstart works. + + +Can I query upstart for a list of jobs? +--------------------------------------- + +Yes, "initctl list" will list the known jobs and their status. + + +How do I manually start or stop a job? +-------------------------------------- + +Use "start JOB" or "stop JOB". + + +How do I find the status of a job? +---------------------------------- + +Use "status JOB". + + +Can I emit an event by hand? +---------------------------- + +Yes, "initctl emit EVENT" will emit the named event and cause any +jobs waiting for it to be started or stopped as appropriate. --- upstart-1.8.orig/debian/copyright +++ upstart-1.8/debian/copyright @@ -0,0 +1,19 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: upstart +Upstream-Contact: upstart-devel@lists.ubuntu.com +Source: http://http://launchpad.net/upstart + +Files: * +Copyright: 2009-2012 Canonical Ltd. +License: GPL-2 + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2, as + published by the Free Software Foundation. + . + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + . + On Debian and Ubuntu systems, the complete text of the GNU General Public + License can be found in `/usr/share/common-licenses/GPL-2'. --- upstart-1.8.orig/debian/upstart.postrm +++ upstart-1.8/debian/upstart.postrm @@ -0,0 +1,81 @@ +#!/bin/sh -e +# This script can be called in the following ways: +# +# After the package was removed: +# remove +# +# After the package was purged: +# purge +# +# After the package was upgraded: +# upgrade +# if that fails: +# failed-upgrade +# +# +# After all of the packages files have been replaced: +# disappear +# +# +# If preinst fails during install: +# abort-install +# +# If preinst fails during upgrade of removed package: +# abort-install +# +# If preinst fails during upgrade: +# abort-upgrade + + +# Undo removal of a no-longer used conffile +undo_rm_conffile() +{ + CONFFILE="$1" + + if [ ! -e "$CONFFILE" ]; then + if [ -e "$CONFFILE".dpkg-bak ]; then + echo "Restoring modified conffile $CONFFILE" + mv -f "$CONFFILE".dpkg-bak "$CONFFILE" + elif [ -e "$CONFFILE".dpkg-obsolete ]; then + mv -f "$CONFFILE".dpkg-obsolete "$CONFFILE" + fi + fi +} + +# Finish removal of a no-longer used conffile +finish_rm_conffile() +{ + CONFFILE="$1" + + if [ -e "$CONFFILE".dpkg-bak ]; then + rm -f "$CONFFILE".dpkg-bak + fi +} + + +case "$1" in + remove) + ;; + + purge) + finish_rm_conffile /etc/init/dbus-reconnect.conf + ;; + + upgrade|failed-upgrade|disappear) + ;; + + abort-install|abort-upgrade) + # Abort upgrade from karmic development version + if dpkg --compare-versions "$2" lt-nl 0.6.3-7; then + undo_rm_conffile /etc/init/dbus-reconnect.conf + fi + ;; + + *) + echo "$0 called with unknown argument \`$1'" 1>&2 + exit 1 + ;; +esac + +#DEBHELPER# +exit 0 --- upstart-1.8.orig/debian/upstart.apport +++ upstart-1.8/debian/upstart.apport @@ -0,0 +1,182 @@ +#!/usr/bin/python +''' +Upstart apport hook. + +Handles both Upstart running as PID 1 and as a Session Init +(non-privileged user). + +Limitations: + +- does not handle non-default --logdir or --confdir. + +''' +import os +import re +import glob +from apport.hookutils import * +import apport.packaging + +msg = \ +""" +The contents of your Upstart job configuration files (*.conf and +*.override) files may help developers diagnose your bug more quickly. +However, if you have modified them, they may contain sensitive +information. + +Do you want to include any modified job configuration files +in your bug report? +""" + +def add_root_file(map, file): + """ + Add @file to @map such that @map can be passed to + attach_root_command_outputs() to have @file attached to the report + event if it is unreadable by the current user. + """ + if not os.path.exists(file): + return + + key = path_to_key(file) + + map[key] = 'cat %s' % file + + +def add_info(report, ui): + system_state_file = '/var/log/upstart/upstart.state' + system_conf_dir = '/etc/init' + session_state_file = None + attach_jobs = False + package = None + + # files that are not readable by current user + unreadable_files = {} + + # Used to determine which details to record. If we are unable to + # determine an accurate category of problem, attach all possible + # information for a crash or, for other categories of problem + # when the user has explicitly agreed. + category = 'Unknown' + + if 'Package' in report: + package = report['Package'].split()[0] + + # Determine whether this report relates to a System Init issue, + # or a Session Init one. + if report.get('ProblemType', '') == 'Crash': + if 'ProcStatus' in report: + pid_line = re.search('Pid:\t(.*)\n', report['ProcStatus']) + if pid_line: + upstart_pid = pid_line.groups()[0] + if upstart_pid: + if int(upstart_pid) == 1: + category = 'System' + else: + category = 'Session' + elif ui: + response = ui.choice( + "Upstart is used to supervise both the System and users Desktop\n" + "sessions. Please choose the option that is most appropriate\n" + "for the problem you wish to report\n", + ['System', 'Desktop Session']) + if response == None: + pass + if 0 in response: + category = 'System' + elif 1 in response: + category = 'Session' + + report['UpstartBugCategory'] = category + + if report.get('ProblemType', '') == 'Crash': + # crash bugs are private by default + attach_jobs = True + elif ui and ui.yesno(msg) == True: + attach_jobs = True + + if category == 'System' or category == 'Unknown': + attach_file(report, '/proc/cmdline', 'ProcKernelCmdline') + + # console output + attach_file_if_exists(report, '/var/log/boot.log', 'BootLog') + + if attach_jobs == True: + + # Map of files => package names where each file is an Upstart + # job configuration file. + file_map = {} + + for file in \ + glob.glob("%s/*.conf" % system_conf_dir) + \ + glob.glob("%s/*.override" % system_conf_dir): + + # try and determine which package owns the file + owner = apport.packaging.get_file_package(file) + + if owner == None: + # If no package owns it, it's either an admin-created + # job, or from a manually installed package, so attach. + # XXX: We don't use attach_file() since, although it + # handles unreadable files in a sense (by returning + # an error string), it does not allow us to grab the + # file contents. + add_root_file(unreadable_files, file) + elif owner != package and owner not in set(file_map.values()): + # If the file is owned by another package, + # record the package name. + # + # XXX: note that we exclude the file if it is owned by + # the Upstart package itself since the general hooks + # already look for modified conffiles. + file_map[file] = owner + + # Attach all modified conffiles for all packages which + # provide Upstart jobs. + # + # XXX: requires bug 1154536 to be fixed to avoid IOError + # attempting to read unreadable conffiles. + for pkg in set(file_map.values()): + try: + attach_conffiles(report, pkg) + except IOError: + # package contains conffiles that are unreadable by + # the current user. So, attach all the Upstart + # conffiles for that package for completeness until + # apport allows this sort of query as root by + # default. + for key, value in file_map.items(): + if value == pkg: + add_root_file(unreadable_files, key) + + if category == 'Session' or category == 'Unknown': + log_dir = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache/upstart/')) + conf_dir = os.getenv('XDG_CONFIG_HOME', os.path.expanduser('~/.config/upstart/')) + old_conf_dir = os.path.expanduser('~/.init/') + session_state_file = os.path.join(log_dir, 'upstart.state') + + if attach_jobs == True: + for file in \ + glob.glob("%s/*.conf" % conf_dir) + \ + glob.glob("%s/*.override" % conf_dir) + \ + glob.glob("%s/*.conf" % old_conf_dir) + \ + glob.glob("%s/*.override" % old_conf_dir): + attach_file(report, file) + + add_root_file(unreadable_files, system_state_file) + + attach_root_command_outputs(report, unreadable_files) + + if session_state_file: + attach_file_if_exists(report, session_state_file) + + if os.path.exists(system_state_file) or os.path.exists(session_state_file): + report['Tags'] += ' ' + 'upstart-stateful-reexec-failed' + + report['UpstartRunningSystemVersion'] = command_output(['initctl', '--system', 'version']) + + if category == 'System' or category == 'Unknown': + report['UpstartRunningSystemJobs'] = command_output(['initctl', '--system', 'list']) + + if category == 'Session' or category == 'Unknown': + report['UpstartRunningSessionVersion'] = command_output(['initctl', 'version']) + report['UpstartRunningSessionJobs'] = command_output(['initctl', 'list']) + --- upstart-1.8.orig/debian/upstart.bash-completion +++ upstart-1.8/debian/upstart.bash-completion @@ -0,0 +1 @@ +contrib/bash_completion/upstart --- upstart-1.8.orig/debian/upstart-monitor.manpages +++ upstart-1.8/debian/upstart-monitor.manpages @@ -0,0 +1 @@ +debian/tmp/usr/share/man/man8/upstart-monitor.8 --- upstart-1.8.orig/debian/upstart.dirs +++ upstart-1.8/debian/upstart.dirs @@ -0,0 +1,2 @@ +var/log/upstart +usr/share/apport/package-hooks --- upstart-1.8.orig/debian/upstart.postinst +++ upstart-1.8/debian/upstart.postinst @@ -0,0 +1,113 @@ +#!/bin/sh -e +# This script can be called in the following ways: +# +# After the package was installed: +# configure +# +# +# If prerm fails during upgrade or fails on failed upgrade: +# abort-upgrade +# +# If prerm fails during deconfiguration of a package: +# abort-deconfigure in-favour +# removing +# +# If prerm fails during replacement due to conflict: +# abort-remove in-favour + +# Remove a no-longer used conffile +rm_conffile() +{ + CONFFILE="$1" + + if [ -e "$CONFFILE".dpkg-obsolete ]; then + echo "Removing obsolete conffile $CONFFILE" + rm -f "$CONFFILE".dpkg-obsolete + fi +} + + +case "$1" in + configure) + if dpkg --compare-versions "$2" lt-nl 0.6.0; then + # We're upgrading from a version of Upstart that doesn't use + # D-Bus for its IPC. We have to tell it to re-exec into one + # that does. It'll lose all state, but we didn't keep much + # in those days. + telinit u + else + # Query running version of Upstart, but only when we know + # that initctl will work. + # + # The calculated version string may be the null string if + # Upstart is not running (where for example an alternative + # init is running outside a chroot environment) or if the + # query failed for some reason. However, the version check + # below handles a null version string correctly. + UPSTART_VERSION_RUNNING=$(initctl version 2>/dev/null |\ + awk '{print $3}'|tr -d ')' || :) + + if ischroot; then + # Do not honour re-exec when requested from within a + # chroot since: + # + # (a) The version of Upstart outside might not support it. + # (b) An isolated environment such as a chroot should + # not be able to modify its containing environment. + # + # A sufficiently new Upstart will actually handle a re-exec + # request coming from telinit within a chroot correctly, + # but it's simple enough to perform the check here and save + # Upstart the effort. + : + elif dpkg --compare-versions "$UPSTART_VERSION_RUNNING" ge 1.9 || [ "$UPSTART_VERSION_RUNNING" = 1.8-ubuntu-full-serialization ]; then + # We are not running inside a chroot and the running version + # of Upstart supports lossless stateful re-exec, so we can + # restart immediately. + # + # XXX: Note that the check on the running version must + # remain *indefinitely* since it's the only safe way to + # know if stateful re-exec is supported: simply checking + # packaged version numbers is not sufficient since + # the package could be upgraded multiple times without a + # reboot. + telinit u || : + elif [ "$UPSTART_JOB" = "cloud-config" ]; then + # If upgraded by cloud-init, do not perform partial + # stateful re-exec, as cloud-init instance will fail + # to initialise. + touch /var/run/init.upgraded || : + [ -x /usr/share/update-notifier/notify-reboot-required ] && \ + /usr/share/update-notifier/notify-reboot-required || true + + elif dpkg --compare-version "$UPSTART_VERSION_RUNNING" ge 1.6.1; then + # Otherwise, perform partial stateful re-exec and + # request a reboot. + telinit u || : + [ -x /usr/share/update-notifier/notify-reboot-required ] && \ + /usr/share/update-notifier/notify-reboot-required || true + else + # Before we shutdown or reboot, we need to re-exec so that we + # can safely remount the root filesystem; we can't just do that + # here because we lose state. + touch /var/run/init.upgraded || : + fi + fi + + # Upgrade from karmic development version + if dpkg --compare-versions "$2" lt-nl 0.6.3-7; then + rm_conffile /etc/init/dbus-reconnect.conf + fi + ;; + + abort-upgrade|abort-deconfigure|abort-remove) + ;; + + *) + echo "$0 called with unknown argument \`$1'" 1>&2 + exit 1 + ;; +esac + +#DEBHELPER# +exit 0 --- upstart-1.8.orig/debian/changelog +++ upstart-1.8/debian/changelog @@ -0,0 +1,1528 @@ +upstart (1.8-0ubuntu7) saucy; urgency=low + + * Simplify postinst re-exec logic by removing runlevel checks. Now the + logic is: + - re-exec if lossless stateful re-exec is available + - perform partial stateful re-exec, unless running under upstart + - re-exec if upgrading from pre dbus capable upstart + - do nothing if running from chroot + - otherwise hint that init is upgraded + + -- Dmitrijs Ledkovs Mon, 17 Jun 2013 14:17:58 +0100 + +upstart (1.8-0ubuntu6) saucy; urgency=low + + * debian/upstart.postinst: + - When only partial stateful re-exec is available, and upgrade is run by + cloud-config simply leave init upgraded. + - When partial stateful re-exec is not performed also leave reboot required marker. + + -- Dmitrijs Ledkovs Thu, 13 Jun 2013 14:36:17 +0100 + +upstart (1.8-0ubuntu5) saucy; urgency=low + + * Change upstart's version string, such that postinst can detect whether + the running upstart instance has full serialization fixes. + * In postinst, check running upstart for the above version number or 1.9 + or better and then perform lossless stateful re-execution. Other wise + check for runlevels 2-5 and perform partial stateful re-execution. + + -- Dmitrijs Ledkovs Tue, 11 Jun 2013 10:51:53 +0100 + +upstart (1.8-0ubuntu4) saucy; urgency=low + + [ James Hunt ] + * Cherry pick lp:~jamesodhunt/upstart/serialise-remaining-objects (LP:#1124384): + - Preserve event blockers during configuration reload. + - Serialise & deserialise blocking events during stateful + re-execution. + * debian/manpages/upstart-events.7: Added ':sys:restarted'. + * debian/upstart.postinst: Don't re-exec if runlevel is not 2 + yet (to allow cloud-init to dist-upgrade upstart safeily in early boot). + + [ Dmitrijs Ledkovs ] + * Upload to saucy. + * Use "serial-tests" harness during build, instead of the automake's + 1.13 default "parallel-tests" harness. + * Enable parallel build by default. + + -- Dmitrijs Ledkovs Thu, 06 Jun 2013 16:15:09 +0100 + +upstart (1.8-0ubuntu3) saucy; urgency=low + + * Update the Xsession.d scripts to be a bit more generic and work with + lxsession as well as gnome-session. + + -- Stéphane Graber Fri, 31 May 2013 17:13:15 -0400 + +upstart (1.8-0ubuntu2) saucy; urgency=low + + [ James Hunt ] + * debian/manpages/upstart-events.7: Added ':sys:restarted'. + + [ Stéphane Graber ] + * Turn on user sessions by default for the 'ubuntu' xsession. + * Manually add scripts/man/upstart-monitor.8 as it was missing from the + upstream 1.8 tarball. + + -- Stéphane Graber Fri, 03 May 2013 09:55:36 -0700 + +upstart (1.8-0ubuntu1) raring; urgency=low + + [ James Hunt ] + * debian/manpages/upstart-events.7: Update for Session Init events + and file bridge. + * debian/rules: Install apport hook. + * debian/upstart.apport: Addition of apport hook to handle PID 1 and + Session Init bugs. + * debian/upstart.dirs: Remove invalid leading slash and add apport + directory. + * Cherry-pick man page related fixes from upstream. + * debian/control: Create a separate upstart-monitor package and make + upstart suggest it. + * debian/rules: + - Add python3 and associated graphical packages. + - Handle man pages. + * debian/upstart.install: Add in files not now copied by default + now we have a separate upstart-monitor package. Note that initctl2dot + and init-checkconf are now correctly installed to /usr/bin rather + than /bin. + * debian/upstart-monitor.install: New file. + * debian/upstart-monitor.manpages: New file. + * debian/upstart.links: New file. + * debian/user-conf/upstart-file-bridge.conf: Required as start condition + different to system job of same name. + + [ Iain Lane ] + * Set $SESSIONTYPE when emitting the xsession event that specifies the type + of session being launched. Currently only gnome-session is supported. + + -- James Hunt Tue, 26 Mar 2013 17:13:12 +0000 + +upstart (1.7-0ubuntu1b1) raring; urgency=low + + * No-change rebuild against libudev1 + + -- Martin Pitt Wed, 13 Mar 2013 07:02:18 +0000 + +upstart (1.7-0ubuntu1) raring; urgency=low + + [ Stéphane Graber ] + * New upstream release + * Install Xsession hooks and initial set of user jobs. Those will only be + used if the user explicitly whitelist the session in /etc/upstart-xsessions + + [ James Hunt ] + * Remove user_sessions DEP-8 test since User Jobs are no longer + supported and replace with a dummy test that just forces the + tests to run. + + -- Stéphane Graber Thu, 07 Mar 2013 16:16:13 -0500 + +upstart (1.6.1-1ubuntu3) raring; urgency=low + + * Use verbose build (disable silent rules) by default. + * Cherry-pick r1436 to support passing reboot command. + + -- Dmitrijs Ledkovs Mon, 25 Feb 2013 15:42:00 +0000 + +upstart (1.6.1-1ubuntu2) raring; urgency=low + + [ Stéphane Graber ] + * Call autoreconf so we can use the same packaging for snapshots as for + release tarballs. Add depends on dh-autoreconf and autopoint. + + [ James Hunt ] + * init/log.c: Cherry-pick of upstream fix for jobs which end before + the log disk becomes writeable and which spawn off additional + processes which persist after the main job process has ended + (LP: #1096531). + + -- James Hunt Tue, 22 Jan 2013 15:18:30 +0000 + +upstart (1.6.1-1ubuntu1) raring; urgency=low + + [ Steve Langasek ] + * New upstream release. + * Merge with Debian. + - drop debian/conf/dbus-reconnect.conf again, only needed in Debian. + - don't build against libselinux; this is probably fine to have in + Ubuntu, but this isn't the time to add it. + - back down the Debian-specific versioned depends on sysvinit, ifupdown, + udev + * Export $TERM in init/Makefile.am; the Debian buildds don't set this, + which results in test failures because of assumptions that it will be + available. + * Hard-code a dependency on libjson0 (>= 0.10-1.1ubuntu1), the first + version of the package that installs to /lib instead of /usr/lib. + + [ James Hunt ] + * debian/upstart-job: Allow script to operate quietly by reading optional + /etc/default/upstart-job configuration. Thanks to Jouko Orava + (LP: #613231) + * debian/control: Added debianutils for ischroot(1). + * debian/upstart.postinst: Enabled stateful re-exec handling in selected + upgrade scenarios. Details: + - Only query running version if initctl is known to work. + - Discard initctl stderr just in case. + - Do not re-exec if running in a chroot (uses ischroot(1)). + - Removed redundent check on previously installed version. + - Updated lengthy commentary. + + [ Stéphane Graber ] + * debian/apparmor-profile-load: Ignore output from running-in-container. + This prevents the output of running-in-container from being appended to + rsyslog's upstart log (and any other job calling apparmor-profile-load). + + [ Dmitrijs Ledkovs, James Hunt ] + * Add DEP-8 autopkgtests. + + -- Steve Langasek Thu, 15 Nov 2012 09:26:10 -0800 + +upstart (1.6.1-1) unstable; urgency=low + + * New upstream release. + * Declare a Breaks: against old versions of cryptsetup which have upstart + jobs named in a way that will deadlock the boot. (Ref: bug #694499) + * Make versioned build-dep on json-c (>= 0.10) explicit. + * Add debian/conf/dbus-reconnect.conf, to tell upstart to connect to the + system bus once dbus is started. This is a temporary solution until + dbus in Debian has native upstart support. + + -- Steve Langasek Mon, 10 Dec 2012 00:28:29 -0800 + +upstart (1.6-3) unstable; urgency=low + + * init/tests/test_job_process.c: don't test the blocked/ignored signal list + in a spawned job; this is not testing the upstart code but the + characteristics of the system, and the test is wrong because it assumes + the signal lists in /proc/self/status fit in an unsigned long int + - patently untrue on mips, where we have 128 signals for historical + reasons. + + -- Steve Langasek Sun, 18 Nov 2012 12:25:21 -0600 + +upstart (1.6-2) unstable; urgency=low + + * init/tests/test_job_process.c: cherry-pick upstream fix for test which + was accidentally relying on a variable persisting after it's gone out of + scope. + * init/tests/test_job_process.c: drop change to print path in the test, + should be fixed by the above. + * init/job_class.[ch]: instead of assuming a fixed value (0) as the + default nice value for job processes, use whatever the nice value of the + current process is. This will be important later for user sessions + where an entire session may be started with a higher nice value; and it + fixes running the test suite as part of a nice'd build. + * init/tests/test_job_class.c: update test suite to match. + + -- Steve Langasek Sun, 18 Nov 2012 01:54:29 -0600 + +upstart (1.6-1) unstable; urgency=low + + * New upstream release. + * Add build-dependency on libjson0-dev. + * Export $TERM in init/Makefile.am; the Debian buildds don't set this, + which results in test failures because of assumptions that it will be + available. + * init/tests/test_job_process.c: tests are failing to re-exec the test + binary on mips for no clear reason; output the path so we can try to + debug. + * init/tests/test_job_process.c: amd64 build failed with an inscrutible + error from waitid(). Print errno on failure to try to diagnose this. + + -- Steve Langasek Sat, 17 Nov 2012 23:19:37 -0600 + +upstart (1.5-1) unstable; urgency=low + + * New maintainer. + * New upstream release. Closes: #627544. + * Drop /etc/init/dbus-reconnect.conf, no longer needed. + * Add new jobs from Ubuntu: console, container-detect, failsafe, + flush-early-job-log, rcS.conf, shutdown, wait-for-state. + * Use 'linux-any' in the architecture check in debian/control, instead of + trying to enumerate all non-linux archs. Closes: #634513. + * Conflict with lxcguest package (Ubuntu-specific). + * Breaks old friendly-recovery (Ubuntu-specific). + * Mark upstart multi-arch: foreign. + * Add upstart-events(7) manpage from Ubuntu. + * Update packaging to dh(1), debian/compat=9 (from Ubuntu). + * debian/running-in-container: a script using container.conf to + answer whether upstart is running in a container. + * refresh soon-to-be-obsolete upstart-job helper from Ubuntu. + * Add bash-completion support. + * Add /var/log/upstart directory and logrotate support. + * Don't re-exec init on upgrade, we don't currently support stateful + re-exec. + * Switch to source format 1.0 for consistency with Ubuntu and for sane(r) + VCS handling. + * Add versioned dependencies on ifupdown and udev for the prerequisite + boot events. + * util/shutdown.c: look for sysvinit at /run/initctl before /dev/initctl, + so that we're compatible with both the old and new paths used by + sysvinit in Debian. Closes: #659540. + * Move to bzr for the official package Vcs, for greater synergy with the + Ubuntu packaging. + * Use copyright-format/1.0 for debian/copyright. This drops Scott from + the list of copyright holders, as an individual copyright is not + attested in any of the upstream sources. + + -- Steve Langasek Mon, 12 Nov 2012 13:38:34 -0800 + +upstart (1.5-0ubuntu9) quantal-proposed; urgency=low + + * debian/apparmor-profile-load: exit 0 if apparmor_parser fails to not + block upgrades (errors will still be logged by upstart). This can be + removed once apparmor_parser better deals with new policy on old kernels + - LP: #1058356 + + -- Jamie Strandboge Fri, 12 Oct 2012 13:54:10 -0500 + +upstart (1.5-0ubuntu8) quantal; urgency=low + + * Merge of latest upstream including doc fixes, fixes for booting + on initramfs-less systems and improved error handling in spawn + failure scenarios (LP: #980917, #1032101). + + -- James Hunt Wed, 08 Aug 2012 10:05:34 +0100 + +upstart (1.5-0ubuntu7) precise-proposed; urgency=low + + * Correct a build failure from the previous upload. + + -- Steve Langasek Thu, 26 Apr 2012 07:48:17 -0700 + +upstart (1.5-0ubuntu6) precise-proposed; urgency=low + + * debian/upstart.logrotate: don't create empty files after rotation; + upstart will automatically create new log files for jobs as needed. + * init/main.c: restore the fix for bug #540256; we know the console setup + is taken care of by plymouth in Ubuntu, so upstart changing the console + settings just makes trouble (such as turning echo back on when it + shouldn't be). LP: #876626. + + [ James Hunt ] + * debian/upstart-job: Only attempt to handle disabled jobs if the running + version of Upstart supports such a query (LP: #985755, #984474). + * debian/manpages/upstart-events.7: Fixed typo and corrected reference to + 'kill signal' stanza. + + -- Steve Langasek Wed, 25 Apr 2012 13:23:34 -0700 + +upstart (1.5-0ubuntu5) precise; urgency=low + + * debian/upstart-job: Add in handling for disabled jobs: + - Do not restart a job if disabled, unless job was forcibly started. + - Do stop a disabled job that was forcibly started. + Resolves issue where 'invoke-rc.d restart' erroneously started disabled + jobs on package upgrade (LP: #974147) + + -- James Hunt Tue, 10 Apr 2012 09:19:03 +0100 + +upstart (1.5-0ubuntu4) precise; urgency=low + + * debian/apparmor-profile-load: don't run in a container. This can + hopefully be removed after stacked profiles are supported and + used by lxc. (LP: #978297) + + -- Serge Hallyn Tue, 10 Apr 2012 14:55:41 -0500 + +upstart (1.5-0ubuntu3) precise; urgency=low + + * debian/manpages/upstart-events.7: Correct emitter for + "static-network-up" event. + + -- James Hunt Wed, 28 Mar 2012 11:59:56 +0100 + +upstart (1.5-0ubuntu2) precise; urgency=low + + * debian/conf/flush-early-job-log.conf: Change initctl command from + 'flush-early-job-log' to 'notify-disk-writeable' to reflect new name. + * init/man/init.8: Remove duplicate telinit(8). + * debian/manpages/upstart-events.7: + - Added table 'Job Goals and State Transitions'. + - Corrected errors and omissions in 'Job Lifecycle' section. + + -- James Hunt Wed, 28 Mar 2012 11:00:04 +0100 + +upstart (1.5-0ubuntu1) precise; urgency=low + + * FFe. LP: #962124. + * New upstream 1.5 release. + - fix boot failure when /dev/pts is not mounted before upstart starts. + LP: #936667. + - fix a file descriptor leak on job restarts. LP: #940290. + * debian/conf/failsafe.conf: Added missing "emits" which breaks + 'initctl check-config'. + * debian/manpages/upstart-events.7: Added 'failsafe-boot' and + 'recovery' events. + + -- James Hunt Thu, 22 Mar 2012 13:50:31 +0000 + +upstart (1.4-0ubuntu9) precise; urgency=low + + [ Steve Langasek ] + * debian/conf/failsafe.conf: instead of waiting for the 'runlevel' event + before considering failsafe done, stop this job as soon as we're + starting rc-sysinit; that way, any delays in /etc/rcS.d will not cause + confusing messages about networking delays when the network is not the + problem. (LP: #950662) + + [ James Hunt ] + * init/log.c:log_read_watch(): Set remote_closed for scenarios where error + handler never called. (LP: #935585) + + [ Serge Hally ] + * debian/conf/power-status-changed.conf: shut down on getting SIGPWR. + Unprivileged tasks can't send this signal. In particular this will + allow clean shutdown of containers from the host. + (See http://www.makelinux.net/man/7/P/power-status-changed) + + [ Stéphane Graber ] + * Rename Serge's job to shutdown.conf to avoid a name conflict with the + event power-status-changed. + + -- Stéphane Graber Fri, 16 Mar 2012 13:48:04 -0400 + +upstart (1.4-0ubuntu8) precise; urgency=low + + * init/tests/test_job_process.c: + - close_all_files(): Correct type of index variable. + - test_run(): + - "with single line command writing lots of data fast and exiting": + - add waitid() call to ensure log is not added to unflushed list. + - "with log object freed on process exit": + - add waitid() call to ensure log is not added to unflushed list. + * util/tests/test_initctl.c: test_flush_early_job_log(): + - "with job ending before log disk writeable": Give Upstart a chance + to run the job as sometimes we see the job pid in the output which + causes the test to fail. + + -- James Hunt Fri, 17 Feb 2012 10:58:02 -0500 + +upstart (1.4-0ubuntu7) precise; urgency=low + + * debian/manpages/upstart-events.7: Added missing events 'container' and + 'not-container'. + * Update 'runlevel' event emission time in upstart-events(7) (LP: #921501). + * Merge of important upstream log fixes to avoid spinning when a job + which leaks fds (such as 'sshd -D') is stopped (LP: #926468). + * Merge of lp:~jamesodhunt/upstart/early-job-log-flush to allow jobs that + _end_ very early in the boot to have their output logged. + * debian/conf/flush-early-job-log.conf: Upstart job to force flushing of + early job log output data when disk becomes writeable. + * Re-enable job logging by default. + + [ Steve Langasek ] + * init/tests/test_job_process.c: close all fds before running tests that + check for unexpected open fds, so that files leaked from the environment + don't cause the test suite to fail gratuitously. LP: #926473. + * bump debhelper compat to 9 and adjust debian/rules to use the + dpkg-buildflags interfaces, so that upstart can be cross-compiled and + also so we pick up any future hardening flags for free. + + -- Steve Langasek Thu, 16 Feb 2012 07:52:11 +0000 + +upstart (1.4-0ubuntu6) precise; urgency=low + + [ Serge Hallyn ] + * debian/conf/container-detect.conf: an upstart job to track whether upstart + detected itself running in a container. + * debian/running-in-container: a script using container.conf to + answer whether upstart is running in a container. + * debian/conf/console.conf: run getty on /dev/console when running + in a lxc container. + * debian/control: conflict with lxcguest. + + [ Stéphane Graber ] + * debian/conf/container-detect.conf: extend to also detect OpenVZ and vserver + as well as write the type in /run/container_type and emit either: + - container CONTAINER=type + (where type is lxc, lxc-libvirt, openvz or vserver) + - not-container + * debian/running-in-container: extend to also print the type of container. + * Rebase debian/conf/console.conf on debian/conf/tty1.conf. + * Update tty[1234].conf to start on regular machines and LXC containers. + * Update tty[56].conf to only start on regular machines. + + -- Stéphane Graber Wed, 08 Feb 2012 16:44:59 -0500 + +upstart (1.4-0ubuntu5) precise; urgency=low + + * Merge of important upstream log fixes to handle scenario attempts + are made to exec(3) directly non-existent commands. (LP: #922754) + + -- James Hunt Fri, 03 Feb 2012 14:16:40 +0000 + +upstart (1.4-0ubuntu4) precise; urgency=low + + * Disable job logging by default again due to a reported regression with + plymouth-upstart-bridge and upstart itself taking 100% CPU. Use --log + at boot time again for testing. + + -- Steve Langasek Fri, 27 Jan 2012 11:04:05 -0800 + +upstart (1.4-0ubuntu3) precise; urgency=low + + [ Stéphane Graber ] + * Mark upstart Multi-Arch:foreign + + [ James Hunt ] + * Merge of important logger fixes from upstream lp:upstart + (LP: #912558). + * Reverted temporary fix to disable job logging. + + -- James Hunt Thu, 26 Jan 2012 15:13:25 +0000 + +upstart (1.4-0ubuntu2) precise; urgency=low + + * init/main.c: Temporarily disable default job logging whilst + investigating bug 912558 (can be re-enabled with + _temporary_ '--log' option). + + -- James Hunt Fri, 06 Jan 2012 16:11:23 +0000 + +upstart (1.4-0ubuntu1) precise; urgency=low + + * New upstream 1.4 release. + * debian/upstart.dirs: Create /var/log/upstart to hold job logs. + * debian/upstart.logrotate: Logrotate script for job logs. + * po/en@boldquot.gmo, po/en@quot.gmo: Overwrite with upstream versions to + keep bzr happy. This makes the files technically "wrong" (since the + Ubuntu Upstart code has additional messages not in upstream), but they get + re-genrated on build so it all works out. + * debian/manpages/upstart-events.7: Add missing 'static-network-up' + event (LP: #889047). + * debian/manpages/upstart-events.7: Add missing + 'deconfiguring-networking' event (LP: #904175). + * Upstream merge for minor test fixes. + * Upstream merge for review fixes. + * Merge of upstream fix for running tests in environment not + supporting full POSIX SIGCHLD semantics. + + -- James Hunt Thu, 22 Dec 2011 16:51:43 +0000 + +upstart (1.3-0ubuntu11) oneiric-proposed; urgency=low + + * debian/conf/failsafe.conf: stop on static-network-up, so that a slow + runlevel switch doesn't leave a confusing message on screen about + starting up without networking. LP: #881079. + + -- Steve Langasek Wed, 26 Oct 2011 12:05:47 -0700 + +upstart (1.3-0ubuntu10) oneiric; urgency=low + + [ Clint Byrum ] + * debian/conf/failsafe.conf: do delay as script, not pre-start, so + that the messages/delays are stopped on runlevel immediately. emit + as an event, failsafe-boot, to provide finer grained control. + (LP: #863864) + * conf/rc-sysinit.conf: change from 'started failsafe' to 'failsafe-boot' + to accomodate changes to failsafe.conf. + + [ Steve Langasek ] + * Document device-not-ready in upstart-events(7). LP: #805510. + * Document desktop-shutdown in upstart-events(7). LP: #854329. + * Mention lightdm in the list of example DMs in upstart-events(7), since + it's now the default... + + -- Steve Langasek Mon, 03 Oct 2011 18:37:04 -0700 + +upstart (1.3-0ubuntu9) oneiric; urgency=low + + * Update rcS.conf to only start single user mode but not friendly-recovery. + (LP: #575469) + * Mark upstart as breaking friendly-recovery << 0.2.13 + + -- Stéphane Graber Thu, 15 Sep 2011 16:04:17 -0400 + +upstart (1.3-0ubuntu8) oneiric; urgency=low + + * debian/conf/failsafe.conf: Add plymouth messages to help users + understand why the system boot takes longer when they have + static network interfaces defined. (LP: #847782) + + -- Clint Byrum Wed, 14 Sep 2011 18:53:10 -0700 + +upstart (1.3-0ubuntu7) oneiric; urgency=low + + * debian/conf/failsafe.conf: raise timeout to 120 seconds to + allow for very slow DHCP interfaces to come up on servers. + (LP: #839595) + + -- Clint Byrum Sun, 04 Sep 2011 09:29:27 -0700 + +upstart (1.3-0ubuntu6) oneiric; urgency=low + + [ Steve Langasek ] + * Fix maintainer field to be compliant with policy definition + + [ Clint Byrum ] + * conf/rc.conf: document events that are emitted by sysvinit + jobs to quiet 'initctl check-config' + * extra/conf/upstart-udev-bridge.conf: narrow definition to + only the events actually emitted. (LP: #819928) + * debian/conf/failsafe.conf: new job for critical services to + start on. + * conf/rc-sysinit.conf: start after static-network-up or failsafe + so that runlevel 2 is only entered with all static net interfaces + up. (LP: #580319) + + -- Clint Byrum Wed, 10 Aug 2011 08:44:43 -0500 + +upstart (1.3-0ubuntu5) oneiric; urgency=low + + * Upstream cherry-pick for user session fixes + ("bzr merge -r 1318..1324 lp:upstart"). + + -- James Hunt Mon, 25 Jul 2011 17:09:47 +0100 + +upstart (1.3-0ubuntu4) oneiric; urgency=low + + * init/main.c: main(): Add support for "/run" directory with fallback to + old location for initramfs state passing (LP: #810956). + * Upstream cherry-pick to get dbus fix ("bzr merge -r 1314.. lp:upstart"). + + -- James Hunt Wed, 20 Jul 2011 14:51:04 +0100 + +upstart (1.3-0ubuntu3) oneiric; urgency=low + + * init/paths.h: Syned with upstream since Ubuntu file appears to have + diff applied twice, causing redefines. + + -- James Hunt Fri, 17 Jun 2011 09:59:49 +0100 + +upstart (1.3-0ubuntu2) oneiric; urgency=low + + * init/Makefile.am: Sync up from upstream, dropping TEST define which is + no longer required now we set UPSTART_NO_SESSIONS for init/tests/*.c + and specify "--no-sessions" for util/tests/*.c. + + -- James Hunt Fri, 17 Jun 2011 09:47:36 +0100 + +upstart (1.3-0ubuntu1) oneiric; urgency=low + + * Merge of Upstart 1.3 (lp:upstart @ 1.3 release tag). + + -- James Hunt Thu, 16 Jun 2011 15:09:41 +0100 + +upstart (0.9.7-3) oneiric; urgency=low + + * Merge of upstream lp:~upstart-devel/upstart/0.9: Updates for + init-checkconf. + + -- James Hunt Wed, 27 Apr 2011 15:19:47 +0100 + +upstart (0.9.7-2) oneiric; urgency=low + + * Add wait-for-state generic "wait job". + + -- Clint Byrum Wed, 04 May 2011 08:32:04 -0700 + +upstart (0.9.7-1) natty; urgency=low + + * New upstream release 0.9.7: Important session fix (LP: #767053). + + -- James Hunt Wed, 20 Apr 2011 17:44:41 +0100 + +upstart (0.9.6-1ubuntu1) natty; urgency=low + + [ James Hunt ] + * init/man/init.5: Remove mention of user jobs since facility is + disabled. + + [ Clint Byrum ] + * Noting bugs fixed by 0.9.6 release of upstart: (LP: #728531 , LP: #766206) + + -- Clint Byrum Tue, 19 Apr 2011 13:16:46 -0700 + +upstart (0.9.6-1) natty; urgency=low + + * New upstream release 0.9.6: Important session+chroot fixes. + + -- James Hunt Fri, 15 Apr 2011 15:36:40 +0100 + +upstart (0.9.5-1ubuntu1) natty; urgency=low + + [ Clint Byrum ] + * debian/upstart-job: change behavior to reload job configuration on + restart, which more closely matches expected sysvinit script + behavior. (LP: #707479) + + -- James Hunt Wed, 06 Apr 2011 17:50:53 +0100 + +upstart (0.9.5-1) natty; urgency=low + + * New upstream release 0.9.5. + + -- James Hunt Wed, 06 Apr 2011 17:45:38 +0100 + +upstart (0.9.4-1ubuntu1) natty; urgency=low + + * debian/manpages/upstart-events.7: + - Corrected reference to Upstart man page (actually init). + - Changed to using proper troff quotes. + - Escaped dashes in event names. + - Updated date. + - Table 1: + - Improved name. + - Sorted columns: Events, References, and Notes. + - Added unmounted-remote-filesystems event. + + -- James Hunt Thu, 24 Mar 2011 14:34:12 +0000 + +upstart (0.9.4-1) natty; urgency=low + + * New upstream release 0.9.4: + - scripts/initctl2dot.py: Fixes to handle 'emits' glob syntax. + + -- James Hunt Thu, 24 Mar 2011 14:31:26 +0000 + +upstart (0.9.3-1) natty; urgency=low + + * New upstream release 0.9.3: + - Added missing emits stanzas for supplied .conf files. + - Added wildcard/globbing facility to initctl.c (for check-config + command). + - Updated man page on emits stanza syntax. + + -- James Hunt Tue, 15 Mar 2011 11:57:11 +0000 + +upstart (0.9.2-1) natty; urgency=low + + * Merge of upstream lp:~upstart-devel/upstart/0.9. + + -- James Hunt Fri, 11 Mar 2011 10:34:39 +0000 + +upstart (0.9.1-1ubuntu5) natty; urgency=low + + * Merge of upstream lp:~upstart-devel/upstart/0.9. + + -- James Hunt Thu, 10 Mar 2011 14:23:28 +0000 + +upstart (0.9.1-1ubuntu4) natty; urgency=low + + * Merge of upstream lp:~upstart-devel/upstart/0.9. + + -- James Hunt Mon, 07 Mar 2011 15:08:35 +0000 + +upstart (0.9.1-1ubuntu3) natty; urgency=low + + * debian/upstart.bash-completion: Fixed path so dh_bash-completion + considers it a file, not a snippet. + + -- James Hunt Fri, 04 Mar 2011 21:26:27 +0000 + +upstart (0.9.1-1ubuntu2) natty; urgency=low + + * debian/control: Added Suggests for python, graphviz and + bash-completion. + * debian/rules: Invoke bash-completion add-on explicitly. + * debian/manpages/upstart-events.7: New man page. + * debian/upstart.bash-completion: Install bash completion. + * debian/upstart.manpages: Install upstart-events.7. + + -- James Hunt Fri, 04 Mar 2011 17:16:26 +0000 + +upstart (0.9.1-1ubuntu1) natty; urgency=low + + * Merge of upstream lp:~upstart-devel/upstart/0.9. + + -- James Hunt Fri, 04 Mar 2011 15:13:35 +0000 + +upstart (0.9.1-1) natty; urgency=low + + * Merge of upstream lp:~upstart-devel/upstart/0.9. + + -- James Hunt Thu, 03 Mar 2011 20:52:16 +0000 + +upstart (0.9.0-1ubuntu3) natty; urgency=low + + * Revert dbus/Upstart.conf to the version in 0.6.7, disabling user session + support until such time as it has comprehensive test suite coverage. + + -- Colin Watson Mon, 28 Feb 2011 20:29:01 +0000 + +upstart (0.9.0-1ubuntu2) natty; urgency=low + + * Added extra/Makefile.in to avoid build failing. These files need removing + at a later date and debian/rules updating to call dh-autoreconf. + + -- James Hunt Thu, 24 Feb 2011 16:39:28 +0000 + +upstart (0.9.0-1ubuntu1) natty; urgency=low + + * debian/control: Updated for nih version 1.0.3 (required for nih-dbus-tool + and DBUS_TYPE_UNIX_FD). + * removed binary message catalog files causing build issues: + - po/en@boldquot.gmo + - po/en@quot.gmo + + -- James Hunt Thu, 24 Feb 2011 16:06:13 +0000 + +upstart (0.9.0-1) natty; urgency=low + + * New upstream release: + - Session support (chroots, sessions and user-session). + - Socket bridge. + - Override file support. + + -- James Hunt Thu, 24 Feb 2011 14:22:14 +0000 + +upstart (0.6.7-7) natty; urgency=low + + * Re-add upstream r977 to allow proper re-exec on shutdown (LP: #672177) + * debian/control: adding Breaks on eglibc version that disables + telinit u to avoid accidentally installing a version of libc6 that + will cause upstart to re-exec and lose its state. + + -- Clint Byrum Fri, 21 Jan 2011 08:39:13 -0800 + +upstart (0.6.7-6) natty; urgency=low + + * debian/apparmor-profile-load: check for correct AppArmor profile loading + interface file (LP: #710649). + + -- Kees Cook Thu, 03 Feb 2011 13:45:32 -0800 + +upstart (0.6.7-5) natty; urgency=low + + * debian/upstart-job: properly handle jobs that are in state 'start/running' + with no PID, by checking only if the goal is 'start'. LP: #603934, + #707971. + + -- Steve Langasek Wed, 26 Jan 2011 14:05:43 -0800 + +upstart (0.6.7-4) natty; urgency=low + + * debian/apparmor-profile-load: allow profiles to be missing for saner + packaging integration. + + -- Kees Cook Fri, 14 Jan 2011 13:46:12 -0800 + +upstart (0.6.7-3) natty; urgency=low + + * debian/rules: make sure apparmor-profile-load is executable. + + -- Kees Cook Wed, 22 Dec 2010 10:55:09 -0800 + +upstart (0.6.7-2) natty; urgency=low + + * debian/apparmor-profile-load: common AppArmor profile loading helper + which can be used by any upstart services, regardless of the state + of AppArmor (LP: #692801). + + -- Kees Cook Mon, 20 Dec 2010 16:03:33 -0800 + +upstart (0.6.7-1) natty; urgency=low + + * New upstream release: + - Added manual stanza. + - Added debug stanza. + - Added start_on, stop_on and emits properties. + - Added GoalChanged, StateChanged and Failed signals. + - Documentation updates. + + * Added myself as a maintainer. + + -- James Hunt Tue, 14 Dec 2010 17:15:57 +0000 + +upstart (0.6.6-3) maverick; urgency=low + + * Ubuntu seems to have stopped installing Recommends of Build-Depends, + add a Build-Depend on dbus. LP: #602130. + + -- Scott James Remnant Thu, 12 Aug 2010 16:38:05 -0400 + +upstart (0.6.6-2) maverick; urgency=low + + * Apply patch from trunk to use /dev/null when /dev/console is unavailable + due to kernel bugs. This isn't a fix for those bugs, but it does work + around it for now. LP: #554172. + + -- Scott James Remnant Thu, 12 Aug 2010 09:52:07 -0400 + +upstart (0.6.6-1ubuntu1) maverick; urgency=low + + * Try buying with -fPIE/-pie on armel again; we have a shiny new armel + toolchain and this part of the rules was broken in 0.6.6-1 anyway. + + -- Loïc Minier Fri, 23 Jul 2010 14:54:11 +0200 + +upstart (0.6.6-1) maverick; urgency=low + + * New upstream release: + - All changes were previously merged into this package. + + * debian/upstart-job: + - Fix output for the force-reload command to only refer to reload(8). + LP: #532862. + + * Add debian/source/format with "1.0" to be future compatible. + * Add missing ${misc:Depends}. + * Bump standards version. + * Convert rules to dh7 format. + + -- Scott James Remnant Tue, 27 Apr 2010 13:41:18 -0700 + +upstart (0.6.5-6) lucid; urgency=low + + * Merge fixes from trunk: + - double-quoting of NIH_CFLAGS and NIH_DBUS_CFLAGS on --with-local-libnih + - document "env KEY" behaviour + * conf/rc.conf, conf/rc-sysinit.conf: + - enable console output. LP: #548954. + - pass value of INIT_VERBOSE from kernel command-line. + + -- Scott James Remnant Thu, 01 Apr 2010 19:25:36 +0100 + +upstart (0.6.5-5) lucid; urgency=low + + * init/main.c: + - Don't change the settings of the foreground console, this is often + owned by plymouth and not supposed to be in Canonical Mode; all other + paths have stty sane settings anyway (which these are not), so there + really isn't need for init to do this. LP: #540256. + + -- Scott James Remnant Wed, 17 Mar 2010 22:34:55 +0000 + +upstart (0.6.5-4) lucid; urgency=low + + * debian/control: + - change Pre-Depends back to Depends, this was a holdover from when we + attempted to make Upstart Essential to solve early sysvinit→upstart + upgrade issues, we backed out the Essential bit but never the use of + Pre-Depends. LP: #527722. + - add versioned-dependencies on ifupdown for loopback fix that can + prevent initscripts from being run. LP: #527830. + + * Merge patches from trunk to use /proc/self/fd instead of /dev/fd, and + to always mount /proc and /sys on boot. + + -- Scott James Remnant Fri, 26 Feb 2010 15:40:58 +0000 + +upstart (0.6.5-3) lucid; urgency=low + + * udev/upstart-udev-bridge.c: use right variable name, fixing a build + failure. (LP: #524484) + + -- Scott Moser Fri, 19 Feb 2010 10:21:33 -0500 + +upstart (0.6.5-2) lucid; urgency=low + + * udev/upstart-udev-bridge.c: + - Increase receiving buffer size for uevents so we don't miss any. + LP: #504883. + + -- Scott James Remnant Wed, 17 Feb 2010 15:50:40 +0000 + +upstart (0.6.5-1) lucid; urgency=low + + * New upstream release: + - libnih has been separated out into its own project. + - "start on" and "stop on" now support != matches. LP: #513035. + - Fixed crash in child when unable to spawn job. LP: #451917. + - No longer holds /dev/console open so SAK won't kill init. LP: #486005. + - Added missing OPTIONS section to init(8). LP: #449883. + + [ Scott James Remnant ] + * Build-depend on libnih-dev, libnih-dbus-dev and nih-dbus-tool to use + the separated out libnih. + - This has the fix for LP: #436758. + - Remove changelog.nih from the doc directory. + * Bump udev build-dependency to 147 to match upstream. + * udev/Makefile.am: Update to use external libnih + + [ Johan Kiviniemi ] + * udev/upstart-udev-bridge.c: Change -device-remove to -device-removed to + match -device-added and -device-changed. LP: #516698. + + -- Scott James Remnant Thu, 04 Feb 2010 16:30:10 -0800 + +upstart (0.6.3-11build1) lucid; urgency=low + + * Rebuild to pick up relaxed dependency on libc6, after checking that + __abort_msg is available with the same signature in eglibc 2.11. + LP: #508702. + + -- Matthias Klose Mon, 18 Jan 2010 16:10:11 +0100 + +upstart (0.6.3-11) karmic-proposed; urgency=low + + * Make rc-sysinit.conf wait on the loopback interface, to ensure that the + interface is up before we process the scripts in /etc/rc?.d. LP: #461725. + + -- Steve Langasek Tue, 08 Dec 2009 12:58:37 -0800 + +upstart (0.6.3-10) karmic; urgency=low + + * Retain the "telinit u" for the case when we're upgrading from pre-0.6 + (ie. hardy or jaunty). Whups. LP: #451556. + + -- Scott James Remnant Thu, 15 Oct 2009 17:48:47 +0100 + +upstart (0.6.3-9) karmic; urgency=low + + * Restore the call to sync() in reboot, have been observing some issues + and it looks like ext4 might not be explicitly flushing the disk when + remounting read-only. + + -- Scott James Remnant Wed, 14 Oct 2009 16:40:32 +0100 + +upstart (0.6.3-8) karmic; urgency=low + + * Rather than calling "telinit u" after upgrade, which will lose state, + have the umountroot initscript take care of it for us by setting a + flag. LP: #441796. + * Don't lose the original default runlevel if /etc/inittab exists without + an initdefault line. LP: #405847. + * Fix "unhandled error" in shutdown when unable to change runlevel, + e.g. due to previous Ubiquity bug. LP: #426332. + * Merge change from trunk that makes it possible to build Upstart using + a previously built copy of nih-dbus-tool, especially useful when + cross-compiling. LP: #426740. + * Merge change from libnih to store our assertion messages in the + glibc __abort_msg symbol so apport can pick them up. LP: #429411. + * Merge change from libnih to fix compilation issue with eglibc due + to changed alphasort() prototype. + + -- Scott James Remnant Wed, 14 Oct 2009 05:34:13 +0100 + +upstart (0.6.3-7) karmic; urgency=low + + * Ignore initramfs pids that don't exist. LP: #440071. + - you still need to ensure that the pid's parent is init, there's no + cheap way to test for that. + * Remove "console owner" and "console output" from rc scripts. + * Try harder to remove dbus-reconnect.conf + + -- Scott James Remnant Fri, 02 Oct 2009 21:09:03 +0100 + +upstart (0.6.3-6) karmic; urgency=low + + * Don't use "telinit q" to reconnect to D-Bus, since that breaks + lots of things. Invent another secret way instead. + + [ Steve Langasek ] + * upstart-job's restart target must also not fail when the service is not + yet started. LP: #430883. + + -- Scott James Remnant Thu, 01 Oct 2009 15:26:19 +0100 + +upstart (0.6.3-5) karmic; urgency=low + + * Update autoconf and automake files. LP: #435252. + + -- Scott James Remnant Wed, 23 Sep 2009 14:16:34 -0700 + +upstart (0.6.3-4) karmic; urgency=low + + [ Scott James Remnant ] + * Reduce the priority of the stopped by/continued by messages so that + they are only shown when --verbose on the kernel command-line. + LP: #401333. + * Add a hack to look for /dev/.initramfs/*.pid files on startup and + "fake" start jobs of those names. Basically this means that "status" + and "stop" work for things like bootchart and usplash. + * Implement a "reload" command in initctl that retrieves the current pid + of the job and sends it the HUP signal. LP: #433544. + + [ Steve Langasek ] + * debian/upstart-job: + - give proper policy-compliant behavior of the start command: detect if + the job is already running using upstart status, and if so return success. + - same for the stop command: return success if the job is already stopped. + - when $DPKG_MAINTSCRIPT_PACKAGE is set, don't spit warnings out because + it's not the user's fault - we're being invoked by a maintainer script. + + -- Scott James Remnant Tue, 22 Sep 2009 13:56:48 -0700 + +upstart (0.6.3-3) karmic; urgency=low + + * debian/upstart-job: + - force-reload should only send a HUP signal, since it may not be wise + to actually restart (cf. dbus) + + -- Scott James Remnant Wed, 16 Sep 2009 00:10:13 +0100 + +upstart (0.6.3-2) karmic; urgency=low + + FFE LP: #427356. + + * debian/upstart-job: + - Remove trailing "s" from file + - Support direct invocation better. + * udev/upstart-udev-bridge.c: + - New tool to capture events from the udev netlink socket and + convert into upstart events. + * conf/rc-sysinit.conf: + - Run once all filesystems are mounted, rather than on startup + * debian/control: + - Add dependency on mountall for the filesystem event. + + -- Scott James Remnant Tue, 15 Sep 2009 03:19:09 +0100 + +upstart (0.6.3-1) karmic; urgency=low + + * New upstream release: + - Fixed assertion when a job exits while stopping. LP: #406408. + - Fixed compilation on ia64. + - nih-dbus-tool(1) manpage no longer installed. + + -- Scott James Remnant Mon, 03 Aug 2009 23:58:47 +0100 + +upstart (0.6.2-1) karmic; urgency=low + + * New upstream release: + - Fixed assertion when stopping a job during its starting event. + - Fixed fork following to not stop on exec() before fork() + - Fixed missing chdir() in crash handler. + + -- Scott James Remnant Wed, 22 Jul 2009 10:39:50 +0100 + +upstart (0.6.1-1) karmic; urgency=low + + * New upstream release: + - Fixed race condition in ptrace() code. LP: #264711. + - Fixed runlevel to output "unknown" not "N N". LP: #400248. + - Fixed runlevel to prefix error messages with filename. LP: #400241. + + * Provide/Conflict/Replace the agreed "upstart-job" meta-package. + LP: #399799. + * Bump dpkg dependency to 1.2.16 + + -- Scott James Remnant Thu, 16 Jul 2009 18:26:23 +0100 + +upstart (0.6.0-5) karmic; urgency=low + + * Cherry-pick patch from -r1188 to fix "expect fork" and "expect daemon" + LP: #264711. + + -- Scott James Remnant Tue, 14 Jul 2009 15:19:17 +0100 + +upstart (0.6.0-4) karmic; urgency=low + + * Don't build the testsuite with -fPIE on armel; LP: #398403. + + -- Loïc Minier Mon, 13 Jul 2009 22:12:34 +0200 + +upstart (0.6.0-3) karmic; urgency=low + + * Add Conflicts on older Upstart packages to make update-manager's + job easier. + + -- Scott James Remnant Fri, 10 Jul 2009 10:11:21 +0100 + +upstart (0.6.0-2) karmic; urgency=low + + * Bump D-Bus build dependency to ensure we get the container abandonment + patches, and the GIT version bump. + * Actually ship /lib/init/upstart-job + + -- Scott James Remnant Thu, 09 Jul 2009 17:29:59 +0100 + +upstart (0.6.0-1) karmic; urgency=low + + * New upstream release ("How appropriate, you fight like a cow") + - my customary changes list since pointless, it's basically a + complete rewrite. + - Handles /bin/sh symlink disappearing. LP: #65024. + - Boot parameters may be passed to init scripts. LP: #74664. + - reboot implies --force during shutdown. LP: #388738. + - reboot no longer iterates /proc/ide. LP: #92685. + - much improved documentation. LP: #60429, #72058, #388715. + + * Merge the various upstart packages into a single package, it makes + little sense to have it all spread out. + + -- Scott James Remnant Wed, 08 Jul 2009 23:12:03 +0100 + +upstart (0.3.10-2) karmic; urgency=low + + * debian/upstart.postinst: Use telinit u to re-exec, rather than + kill just in case it's not Upstart that's running. LP: #92177. + * debian/event.d/system-services/tty*: Run getty in 8-bit clean + mode. LP: #273189. + * debian/event.d/upstart-compat-sysv/rc-default: + - Don't use grep -w, instead split on $IFS and iterate. LP: #385911. + - Check for any valid runlevel, not just S. LP: #85014. + - Make console owner, since it may spawn sulogin. + * debian/event.d/upstart-compat-sysv/rcS: + - Spawn sulogin if given -b or "emergency". LP: #193810. + * debian/event.d/upstart-compat-sysv/rcS: + - Make console owner. LP: #211402. + * debian/event.d/upstart-compat-sysv/rcS-sulogin: + - Place the telinit code in post-stop, checking $UPSTART_EVENT first so + we don't change the runlevel if we were stopped due to a runlevel + change. LP: #66002. + + -- Scott James Remnant Thu, 18 Jun 2009 16:19:34 +0100 + +upstart (0.3.10-1) karmic; urgency=low + + * Compilation fixes. + * Fixed assertion caused by the post-start or pre-stop scripts + exiting after the main process of a respawning job had exited. + LP: #381048. + + -- Scott James Remnant Wed, 17 Jun 2009 13:33:40 +0100 + +upstart (0.3.9-8) intrepid; urgency=low + + * Do not attempt to continue communicating with the restarted upstart + (LP: #273761). + + -- Kees Cook Mon, 29 Sep 2008 13:35:21 -0700 + +upstart (0.3.9-7) intrepid; urgency=low + + * Implement "telinit u" by just sending Upstart SIGTERM with a slightly + different patch than Fedora. LP: #188925. + + -- Scott James Remnant Tue, 23 Sep 2008 09:01:09 -0700 + +upstart (0.3.9-6) intrepid; urgency=low + + * Really fix LP: #237276 properly this time, lost the change while mucking + around with bzr. + + -- Scott James Remnant Wed, 04 Jun 2008 22:29:48 +0100 + +upstart (0.3.9-5) intrepid; urgency=low + + * Correct build problem on amd64 and ia64 by only building libnih and + libupstart statically. The shared objects were unwanted, and conflict + with -fPIE. + + -- Scott James Remnant Wed, 04 Jun 2008 17:07:12 +0100 + +upstart (0.3.9-4) intrepid; urgency=low + + * Add missing limits.h, required to build with current libc. + + -- Scott James Remnant Wed, 04 Jun 2008 13:09:32 +0100 + +upstart (0.3.9-3) intrepid; urgency=low + + * Change dependency from sysvutils to sysvinit-utils. LP: #237276. + * Compile with stack -fstack-protector, -fPIE, -z relro, -z now and -pie + (MMmm, pie) + + -- Scott James Remnant Wed, 04 Jun 2008 12:59:11 +0100 + +upstart (0.3.9-2) hardy; urgency=low + + * Start the getty on tty1 after the rc script has stopped rather then + at the same time it starts to avoid overwriting by console messages. + tty2..6 will still be active if you want an early login. LP: #65230. + * If the recovery menu is available start that instead of sulogin when + entering single-user-mode. + + -- Scott James Remnant Fri, 11 Apr 2008 13:38:50 +0100 + +upstart (0.3.9-1) hardy; urgency=low + + * New upstream release: + - many bug fixes. + + * Update reference to "edgy" in README.Debian to "hardy". LP: #140037. + + -- Scott James Remnant Sun, 28 Oct 2007 10:51:59 -0400 + +upstart (0.3.8-2) gutsy; urgency=low + + * Fix broken migration of old-style 'respawn process' stanzas which + produced corrupted 'exec' stanzas. Try to fix up files previously + corrupted by this. LP: #95210 + + -- Scott James Remnant Sun, 28 Oct 2007 10:50:36 -0400 + +upstart (0.3.8-1) feisty; urgency=low + + * New upstream release: + - much improved initctl tool. + + * Update my standard prep_/undo_/rm_conffile functions to take into account + current dpkg behaviour wrt obsolete conffiles. The conffile is now moved + out of the way in preinst and the moved file deleted in postinst, or moved + back in postrm abort-upgrade. This means it's not there when dpkg + configures the new version, so the conffile is not left in the list. + * Purge backups of modified obsolete conffiles when the package is purged. + + * Update runlevel and respawn rule generated in migrate-inittab.pl + LP: #89314 + + * Drop 00-libnih-update.patch and 01-libnih-sparc-ftbfs.patch; new upstream + release includes an up-to-date libnih which contains both patches. + * Drop 10-cant-stop-execless-job.patch; included upstream. + * Drop 20-complex-event-config.patch; this is going to be significantly + changed upstream, and we don't want to ship something strange. + * Drop 30-fix-warnings.patch; included upstream. + + -- Scott James Remnant Sun, 11 Mar 2007 19:19:00 +0000 + +upstart (0.3.5-2) feisty; urgency=low + + * Changed "start script" to "pre-start script" in sulogin event, the former + is no longer recognised. + + * Applied 01-libnih-sparc-ftbfs.patch; this updates the signal name list + to exclude signals not available on that architecture, and add one that's + unique to it. + * Applied 30-fix-warnings.patch; this corrects a few warnings that spoiled + an otherwise clean build log. + + -- Scott James Remnant Tue, 13 Feb 2007 15:56:33 +0000 + +upstart (0.3.5-1) feisty; urgency=low + + * New upstream release: + - inotify file descriptor leak fixed. LP: #83099. + - inotify support is no longer required. LP: #68904. + - new job state machine + - new event structure, can now include arguments and environment + + * Applied 00-libnih-update.patch; this updates the libnih library to the + latest bzr trunk version, required for the complex-event-config patch. + * Applied 10-cant-stop-execless-job.patch from upstream; this corrects a + bug where jobs without an "exec" or "script" stanza cannot be stopped. + * Applied 20-complex-event-config.patch from upstream; this is an + experimental implementation of the "on" keyword that allows definition + of complex system states. + + * System V compatibility jobs updated to match new event names. + * rcS job now sets PREVLEVEL and RUNLEVEL. LP: #76304. + + * NOTE: After this upgrade, init will appear to have "forgotten" the + process ids of your gettys, etc. This is not a critical problem and + will be fixed before release. Shutdown will still work as normal. + + -- Scott James Remnant Mon, 12 Feb 2007 13:51:40 +0000 + +upstart (0.3.1-1) feisty; urgency=low + + * New upstream release: + - start, stop and status are now symlinks to initctl, not to a + different, separate utility. + - initctl completely rewritten to behave properly. + - some upstart-specific options to shutdown and reboot dropped, as + these are considered SysV-compat tools. + - "console none" fixed. LP: #70782. + - improved documentation. LP: #68805. + + * shutdown and reboot moved to upstart-compat-sysv. + + * Replace the /usr/share/doc/* directory in upstart-logd, + upstart-compat-sysv, system-services and startup-tasks with a symlink to + /usr/share/doc/upstart. This was actually done in a previous package, + but the migration missed. LP: #70895. + + -- Scott James Remnant Wed, 13 Dec 2006 17:27:37 +0000 + +upstart (0.2.7-7) edgy; urgency=low + + * Don't abort the postinst if we can't send init SIGTERM. Ubuntu: #64499. + + -- Scott James Remnant Tue, 10 Oct 2006 10:13:05 +0100 + +upstart (0.2.7-6) edgy; urgency=low + + * Don't start gettys on tty2 thru tty6 in runlevels 4 and 5 (matches + our sysvinit configuration). + * Migrate common changes made to /etc/inittab to /etc/event.d by + adjusting the installed conffiles. Ubuntu: #61539. + + * Include missing AUTHORS and NEWS file in the upstart package. + * Include README.Debian which answers common questions. Ubuntu: #60429. + + -- Scott James Remnant Thu, 5 Oct 2006 16:08:34 +0100 + +upstart (0.2.7-5) edgy; urgency=low + + * Don't set the current runlevel in /var/run/utmp to 0 or 6 if it is + already either of those two values. That way we don't end up with + either 0 or 6 in the PREVLEVEL variable, which can cause + /etc/init.d/rc to be "efficient" and not bother doing + anything. Ubuntu: #63852. + + -- Scott James Remnant Wed, 4 Oct 2006 14:06:18 +0100 + +upstart (0.2.7-4) edgy; urgency=low + + * Can't just start rc-default once in single-user mode, because if we + boot into that, that will just return us back to sulogin again. Copy + the script out of rc-default into rcS-sulogin to call telinit with the + right default runlevel. Ubuntu: #62189. + + * Add Build-Depend on dpkg-dev (>= 1.13.19) due to our use of + ${binary:Version}. Ubuntu: #61693. + + -- Scott James Remnant Tue, 26 Sep 2006 17:20:42 +0100 + +upstart (0.2.7-3) edgy; urgency=low + + * Set the runlevel to "S" when we enter sulogin so that it appears + in utmp. + + -- Scott James Remnant Thu, 21 Sep 2006 05:37:25 +0100 + +upstart (0.2.7-2) edgy; urgency=low + + * Ensure that the same version of upstart is installed as the version of + upstart-compat-sysv and upstart-logd; as the IPC protocol may change + between releases. + + * Adjust the rcS-sulogin job so that if sulogin exits the default runlevel + is entered; but if the job is stopped (e.g. by shutdown) it isn't. The + solves the regression introduced in the previous release. + + * Revert upstream logd/"quiet" change in favour of doing it in our + lsb logging functions instead; seems to work better (fsvo better). + + -- Scott James Remnant Thu, 21 Sep 2006 03:12:33 +0100 + +upstart (0.2.7-1) edgy; urgency=low + + * New upstream release: + - logd now writes to the console unless "quiet" is specified + - runaway jobs caught when they start rather than respawn. Ubuntu: #59807 + + * Fix failure to shutdown while in single-user mode, however this means + that for edgy you can't exit the sulogin shell to enter the default + runlevel; explicitly say what works. Ubuntu: #60626. + * Drop unnecessary dependency on util-linux. + * Drop sulogin hack, instead depend on the version of sysvutils that + includes the real one. Ubuntu: #60965. + + -- Scott James Remnant Wed, 20 Sep 2006 05:39:16 +0100 + +upstart (0.2.6-1) edgy; urgency=low + + * New upstream release: + - fix infinite loop caused by bad waitid() call. Ubuntu: #59459. + - halt now behaves as "shutdown -h now". Ubuntu: #59720. + + -- Scott James Remnant Wed, 13 Sep 2006 22:16:17 +0100 + +upstart (0.2.5-1) edgy; urgency=low + + * New upstream release: + - no longer spins when no stalled event handler. Ubuntu: #59170. + - shutdown works when under sysvinit. Ubuntu: #58523; + - shutdown -k implemented. Ubuntu: #58723. + - telinit sends shutdown event for 0, 1 and 6. Ubuntu: #58913. + - basic manual pages included. Ubuntu: #58724. + + * upstart-compat-sysv Replaces: sysvinit. Ubuntu: #59427. + * upstart Recommends: upstart-compat-sysv, startup-tasks & system-services. + + * New upstart-logd package includes the logd daemon that can will log + output of jobs with "console logged" (the default) in their description + to /var/log/boot. + + * Add /etc/event.d/rc0 that is run on the "halt" event (neither -H or -P + given), and modify rc0-halt to run on "system-halt" (-H given) and + rc0-poweroff to run on "power-off" (-P given). Ubuntu: #59134. + * Fix the control-alt-delete job to run on the "ctrlaltdel" event so + that it's triggered properly. Ubuntu: #59398. + * Fix single-user mode. + + -- Scott James Remnant Sat, 9 Sep 2006 05:10:12 +0100 + +upstart (0.2.1-7) edgy; urgency=low + + * Remove the Essential tags again, they didn't solve the problem we + hoped they would (dpkg/apt still won't remove sysvinit without + serious persuasion) and I don't think these packages should be. + + -- Scott James Remnant Thu, 7 Sep 2006 02:42:33 +0100 + +upstart (0.2.1-6) edgy; urgency=low + + * Make packages Essential, and change Depends to Pre-Depends so that the + packages work when unconfigured (nothing interesting is performed in + postinst). Ubuntu: #59005. + * Sync priority in debian/control with that in the archive (required) + * Drop warning of dire consequences if you install upstart, seeing as it's + installed by default. + + * Add new startup-tasks and system-services packages which will contain + the /etc/event.d files themselves (other than the main ones). + * Move tty definitions into system-services. + * Modify tty definitions to start when the rcS task has finished. This + puts them in the "right" place when compared to gdm. Ubuntu: #58630. + + * Correct rcS compatibility script to ignore any information in utmp so + that all scripts are always run. Ubuntu: #59203. + * Make rcS the console owner while it runs, temporary fix for + Ubuntu: #58609, #58794, #58796 + * Include default control-alt-delete handler that reboots the machine. + + -- Scott James Remnant Wed, 6 Sep 2006 21:52:48 +0100 + +upstart (0.2.1-5) edgy; urgency=low + + * upstart-compat-sysv Depends: initscripts (closes: Malone #58979). + + -- Colin Watson Tue, 5 Sep 2006 12:22:50 +0100 + +upstart (0.2.1-4) edgy; urgency=low + + * Add missing #! line to top of postrm + + -- Scott James Remnant Mon, 4 Sep 2006 08:11:16 +0100 + +upstart (0.2.1-3) edgy; urgency=low + + * Remove the rc0 configuration file shipped in 0.1.0 that causes all + reboots to become shutdowns. Ubuntu: #58557. + + -- Scott James Remnant Sun, 3 Sep 2006 23:24:41 +0100 + +upstart (0.2.1-2) edgy; urgency=low + + * Don't send the SIGTERM signal unless we're upgrading from a version + of upstart that supports re-exec; older versions would cause a kernel + PANIC and change from sysvinit does nothing. + + -- Scott James Remnant Sat, 2 Sep 2006 17:18:38 +0100 + +upstart (0.2.1-1) edgy; urgency=low + + * New upstream release: + - compilation fixes. + + -- Scott James Remnant Fri, 1 Sep 2006 19:51:41 +0100 + +upstart (0.2.0-1) edgy; urgency=low + + * New upstream release: + - upstart includes shutdown, reboot, halt, poweroff, start, stop, status, + runlevel and telinit utilities. + - "initctl list" will list active jobs. + - Events vastly simplified to just simple strings. + + * Compatibility tasks for old rc scripts, along with runlevel and telinit + utilities now shipped in upstart-compat-sysv package. + + -- Scott James Remnant Fri, 1 Sep 2006 02:38:44 +0100 + +upstart (0.1.1-1) edgy; urgency=low + + * New upstream release: + - set PATH and TERM in processes + + -- Scott James Remnant Fri, 25 Aug 2006 16:17:52 +0200 + +upstart (0.1.0-2) edgy; urgency=low + + * Oops, rename /sbin/init to /sbin/upstart as documented. Lost this + while battling bzr. + + -- Scott James Remnant Thu, 24 Aug 2006 16:30:54 +0200 + +upstart (0.1.0-1) edgy; urgency=low + + * Initial release. + + -- Scott James Remnant Thu, 24 Aug 2006 14:27:47 +0200 --- upstart-1.8.orig/debian/upstart.install +++ upstart-1.8/debian/upstart.install @@ -0,0 +1,17 @@ +debian/conf/*.conf etc/init/ +etc/init/*.conf etc/init/ +etc/dbus-1/system.d/Upstart.conf +bin/init-checkconf usr/bin/ +bin/initctl2dot usr/bin/ +sbin/* +debian/upstart-job lib/init/ +debian/apparmor-profile-load lib/init/ +debian/migrate-inittab.pl usr/lib/upstart/ +debian/running-in-container bin/ +extra/conf/upstart-event-bridge.conf usr/share/upstart/sessions/ +debian/user-conf/*.conf usr/share/upstart/sessions/ +debian/xsession.d/* etc/X11/Xsession.d/ +debian/upstart-xsessions etc/ +usr/share/man/man5/* +usr/share/man/man7/* +usr/share/man/man8/* --- upstart-1.8.orig/debian/apparmor-profile-load +++ upstart-1.8/debian/apparmor-profile-load @@ -0,0 +1,30 @@ +#!/bin/sh +# apparmor-profile-load +# +# Helper for loading an AppArmor profile in pre-start scripts. + +[ -z "$1" ] && exit 1 # require a profile name + +# do not load in a container +[ -x /bin/running-in-container ] && /bin/running-in-container >/dev/null 2>&1 && exit 0 + +[ -d /rofs/etc/apparmor.d ] && exit 0 # do not load if running liveCD + +profile=/etc/apparmor.d/"$1" +[ -e "$profile" ] || exit 0 # skip when missing profile + +module=/sys/module/apparmor +[ -d $module ] || exit 0 # do not load without AppArmor in kernel + +[ -x /sbin/apparmor_parser ] || exit 0 # do not load without parser + +aafs=/sys/kernel/security/apparmor +[ -d $aafs ] || exit 0 # do not load if unmounted +[ -w $aafs/.load ] || exit 1 # fail if cannot load profiles + +params=$module/parameters +[ -r $params/enabled ] || exit 0 # do not load if missing +read enabled < $params/enabled || exit 1 # if this fails, something went wrong +[ "$enabled" = "Y" ] || exit 0 # do not load if disabled + +/sbin/apparmor_parser -r -W "$profile" || exit 0 # LP: #1058356 --- upstart-1.8.orig/debian/upstart.links +++ upstart-1.8/debian/upstart.links @@ -0,0 +1,4 @@ +usr/share/man/man8/upstart-udev-bridge.8 usr/share/man/man7/drm-device-added.7 +usr/share/man/man8/upstart-udev-bridge.8 usr/share/man/man7/graphics-device-added.7 +usr/share/man/man8/upstart-udev-bridge.8 usr/share/man/man7/net-device-added.7 +usr/share/man/man8/upstart-udev-bridge.8 usr/share/man/man7/net-device-removed.7 --- upstart-1.8.orig/debian/control +++ upstart-1.8/debian/control @@ -0,0 +1,38 @@ +Source: upstart +Section: admin +Priority: required +Maintainer: James Hunt +Uploaders: Scott James Remnant +Standards-Version: 3.8.4 +Build-Depends: debhelper (>= 9), pkg-config (>= 0.22), libnih-dev (>= 1.0.3), libnih-dbus-dev (>= 1.0.3), nih-dbus-tool (>= 1.0.3), libdbus-1-dev (>= 1.2.16), libexpat1-dev (>= 2.0.0), libudev-dev (>= 151-5), libjson0-dev (>= 0.10), dbus, bash-completion, dh-autoreconf, autopoint, python3 +X-Python3-Version: 3.3 +XS-Debian-Vcs-Bzr: nosmart+http://bzr.debian.org/bzr/collab-maint/upstart/trunk/ +XS-Debian-Vcs-Browser: http://anonscm.debian.org/loggerhead/collab-maint/upstart/trunk/ +Homepage: http://upstart.ubuntu.com/ +XS-Testsuite: autopkgtest + +Package: upstart +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, sysvinit-utils, sysv-rc, initscripts, mountall, ifupdown (>= 0.6.10ubuntu5), libjson0 (>= 0.10-1.1ubuntu1), debianutils (>= 4) +Suggests: python3, graphviz, bash-completion, upstart-monitor +Replaces: upstart-job, sysvinit, upstart-compat-sysv, startup-tasks, system-services +Conflicts: upstart-job, sysvinit, upstart-compat-sysv, startup-tasks, system-services, lxcguest +Provides: upstart-job, upstart-compat-sysv, startup-tasks, system-services +Breaks: libc6 (<< 2.12.1-0ubuntu12), friendly-recovery (<< 0.2.13) +Multi-Arch: foreign +Description: event-based init daemon + upstart is a replacement for the /sbin/init daemon which handles + starting of tasks and services during boot, stopping them during + shutdown and supervising them while the system is running. + +Package: upstart-monitor +Architecture: all +Section: utils +Priority: optional +Depends: ${shlibs:Depends}, ${misc:Depends}, ${python3:Depends}, upstart (>= 1.7), python3-dbus +Recommends: python3-gi +Description: event monitor for upstart + This package contains a utility that may be run both as a + command-line tool or as a graphical one that displays upstart + events as they are emitted. It is useful for observing system + changes and for determining appropriate events for new jobs. --- upstart-1.8.orig/debian/upstart-xsessions +++ upstart-1.8/debian/upstart-xsessions @@ -0,0 +1,2 @@ +# xsessions listed below are run inside an Upstart user session. +ubuntu --- upstart-1.8.orig/debian/upstart.preinst +++ upstart-1.8/debian/upstart.preinst @@ -0,0 +1,54 @@ +#!/bin/sh -e +# This script can be called in the following ways: +# +# Before the package is installed: +# install +# +# Before removed package is upgraded: +# install +# +# Before the package is upgraded: +# upgrade +# +# +# If postrm fails during upgrade or fails on failed upgrade: +# abort-upgrade + + +# Prepare to remove a no-longer used conffile +prep_rm_conffile() +{ + CONFFILE="$1" + + if [ -e "$CONFFILE" ]; then + md5sum="`md5sum \"$CONFFILE\" | sed -e \"s/ .*//\"`" + old_md5sum="`sed -n -e \"/^Conffiles:/,/^[^ ]/{\\\\' $CONFFILE '{s/ obsolete$//;s/.* //;p}}\" /var/lib/dpkg/status`" + if [ "$md5sum" != "$old_md5sum" ]; then + echo "Obsolete conffile $CONFFILE has been modified by you, renaming to .dpkg-bak" + mv -f "$CONFFILE" "$CONFFILE".dpkg-bak + else + mv -f "$CONFFILE" "$CONFFILE".dpkg-obsolete + fi + fi +} + + +case "$1" in + install|upgrade) + # Upgrade from karmic development version + if dpkg --compare-versions "$2" lt-nl 0.6.3-7; then + prep_rm_conffile /etc/init/dbus-reconnect.conf + fi + ;; + + abort-upgrade) + ;; + + *) + echo "$0 called with unknown argument \`$1'" 1>&2 + exit 1 + ;; +esac + +#DEBHELPER# +exit 0 --- upstart-1.8.orig/debian/migrate-inittab.pl +++ upstart-1.8/debian/migrate-inittab.pl @@ -0,0 +1,143 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +my %gettys; +my $have_cad = 0; + + +#-----------------------------------------------------------------------------# +# Parse /etc/inittab +#-----------------------------------------------------------------------------# + +open INITTAB, "/etc/inittab" + or die "Unable to open /etc/inittab: $!"; + +while () { + chomp; + s/^\s*//; + + next if /^\#/; + next unless length; + + my ($id, $rlevel, $action, $process) = split /:/, $_, 4; + + warn "missing id field" and next + unless defined $id and length $id; + warn "missing runlevel field" and next + unless defined $rlevel; + warn "missing action field" and next + unless defined $action and length $action; + warn "missing process field" and next + unless defined $process; + + + $have_cad = 1 if $action eq "ctrlaltdel"; + $gettys{$1} = [ $rlevel, $process ] if $process =~ /getty.*\b(tty\w+)/; +} + +close INITTAB + or warn "Error while closing /etc/inittab: $!"; + + +#-----------------------------------------------------------------------------# +# Alter /etc/event.d +#-----------------------------------------------------------------------------# + +unlink "/etc/init/control-alt-delete.conf" + unless $have_cad; + +foreach (qw/tty1 tty2 tty3 tty4 tty5 tty6/) { + unlink "/etc/init/$_.conf" + unless exists $gettys{$_}; +} + +foreach (sort keys %gettys) { + my ($rlevel, $process) = @{$gettys{$_}}; + + my @job; + if (-f "/etc/event.d/$_") { + open JOB, "/etc/event.d/$_" + or warn "Unable to open /etc/event.d/$_: $!" and next; + @job = ; + chomp @job; + close JOB + or warn "Error while closing /etc/event,d/$_: $!" and next; + + foreach my $rl (qw/2 3 4 5/) { + my $idx; + for ($idx = 0; $idx < @job; $idx++) { + last if $job[$idx] =~ /^\s*(start|stop)\s+on\s+runlevel\s+$rl\b/; + } + + if ($idx < @job) { + if ($rlevel =~ /$rl/) { + $job[$idx] =~ s/^(\s*)stop(\s+)/$1start$2/; + } else { + $job[$idx] =~ s/^(\s*)start(\s+)/$1stop$2/; + } + } else { + if ($rlevel =~ /$rl/) { + push @job, "start on runlevel $rl"; + } else { + push @job, "stop on runlevel $rl"; + } + } + } + + my $idx; + for ($idx = 0; $idx < @job; $idx++) { + last if $job[$idx] =~ /^\s*respawn\s*/; # match bare 'respawn' too + } + + if ($idx < @job) { + # only match old-style 'respawn process', not bare 'respawn' + $job[$idx] =~ s/^(\s*respawn\s+).*/$1$process/; + } else { + push @job, "respawn"; + push @job, "exec $process"; + } + + # Try to fix up effects of previous broken migrations + if (@job and $job[$#job] =~ /.*(.+?)exec (\1)$/) { + $job[$#job] = "exec $1"; + } + + } else { + push @job, "# $_ - getty"; + push @job, "#"; + push @job, "# Converted from /etc/inittab entry"; + push @job, ""; + + foreach my $rl (qw/2 3 4 5/) { + if ($rlevel =~ /$rl/) { + push @job, "start on runlevel $rl"; + } else { + push @job, "stop on runlevel $rl"; + } + } + push @job, ""; + + push @job, "stop on shutdown"; + push @job, ""; + + push @job, "respawn"; + push @job, "exec $process"; + } + + open JOB, ">/etc/event.d/.$_" + or warn "Unable to write to /etc/event.d/.$_: $!" and next; + print JOB map { "$_\n" } @job; + unless (close JOB) { + warn "Error while closing /etc/event.d/.$_: $!"; + unlink "/etc/event.d/.$_"; + next; + } + + unless (rename "/etc/event.d/.$_", "/etc/event.d/$_") { + warn "Unable to replace /etc/event.d/$_: $!"; + unlink "/etc/event.d/.$_"; + next; + } +} --- upstart-1.8.orig/debian/upstart.logrotate +++ upstart-1.8/debian/upstart.logrotate @@ -0,0 +1,8 @@ +/var/log/upstart/*.log { + daily + missingok + rotate 7 + compress + notifempty + nocreate +} --- upstart-1.8.orig/debian/upstart-job +++ upstart-1.8/debian/upstart-job @@ -0,0 +1,119 @@ +#!/bin/sh -e +# upstart-job +# +# Symlink target for initscripts that have been converted to Upstart. + +set -e + +UPSTART_JOB_CONF="/etc/default/upstart-job" +INITSCRIPT="$(basename "$0")" +JOB="${INITSCRIPT%.sh}" + +if [ "$JOB" = "upstart-job" ]; then + if [ -z "$1" ]; then + echo "Usage: upstart-job JOB COMMAND" 1>&2 + exit 1 + fi + + JOB="$1" + INITSCRIPT="$1" + shift +else + if [ -z "$1" ]; then + echo "Usage: $0 COMMAND" 1>&2 + exit 1 + fi +fi + +COMMAND="$1" +shift + +ECHO=echo +ECHO_ERROR=echo +if [ -e "$UPSTART_JOB_CONF" ]; then + . "$UPSTART_JOB_CONF" +fi +if [ -n "$DPKG_MAINTSCRIPT_PACKAGE" ]; then + ECHO=: + ECHO_ERROR=: +fi + +$ECHO "Rather than invoking init scripts through /etc/init.d, use the service(8)" +$ECHO "utility, e.g. service $INITSCRIPT $COMMAND" + +# Only check if jobs are disabled if the currently _running_ version of +# Upstart (which may be older than the latest _installed_ version) +# supports such a query. +# +# This check is necessary to handle the scenario when upgrading from a +# release without the 'show-config' command (introduced in +# Upstart for Ubuntu version 0.9.7) since without this check, all +# installed packages with associated Upstart jobs would be considered +# disabled. +# +# Once Upstart can maintain state on re-exec, this change can be +# dropped (since the currently running version of Upstart will always +# match the latest installed version). + +UPSTART_VERSION_RUNNING=$(initctl version|awk '{print $3}'|tr -d ')') + +if dpkg --compare-versions "$UPSTART_VERSION_RUNNING" ge 0.9.7 +then + initctl show-config -e "$JOB"|grep -q '^ start on' || DISABLED=1 +fi + +case $COMMAND in +status) + $ECHO + $ECHO "Since the script you are attempting to invoke has been converted to an" + $ECHO "Upstart job, you may also use the $COMMAND(8) utility, e.g. $COMMAND $JOB" + $COMMAND "$JOB" + ;; +start|stop) + $ECHO + $ECHO "Since the script you are attempting to invoke has been converted to an" + $ECHO "Upstart job, you may also use the $COMMAND(8) utility, e.g. $COMMAND $JOB" + if status "$JOB" 2>/dev/null | grep -q ' start/'; then + RUNNING=1 + fi + if [ -z "$RUNNING" ] && [ "$COMMAND" = "stop" ]; then + exit 0 + elif [ -n "$RUNNING" ] && [ "$COMMAND" = "start" ]; then + exit 0 + elif [ -n "$DISABLED" ] && [ "$COMMAND" = "start" ]; then + exit 0 + fi + $COMMAND "$JOB" + ;; +restart) + $ECHO + $ECHO "Since the script you are attempting to invoke has been converted to an" + $ECHO "Upstart job, you may also use the stop(8) and then start(8) utilities," + $ECHO "e.g. stop $JOB ; start $JOB. The restart(8) utility is also available." + if status "$JOB" 2>/dev/null | grep -q ' start/'; then + RUNNING=1 + fi + if [ -n "$RUNNING" ] ; then + stop "$JOB" + fi + # If the job is disabled and is not currently running, the job is + # not restarted. However, if the job is disabled but has been forced into the + # running state, we *do* stop and restart it since this is expected behaviour + # for the admin who forced the start. + if [ -n "$DISABLED" ] && [ -z "$RUNNING" ]; then + exit 0 + fi + start "$JOB" + ;; +reload|force-reload) + $ECHO + $ECHO "Since the script you are attempting to invoke has been converted to an" + $ECHO "Upstart job, you may also use the reload(8) utility, e.g. reload $JOB" + reload "$JOB" + ;; +*) + $ECHO_ERROR + $ECHO_ERROR "The script you are attempting to invoke has been converted to an Upstart" 1>&2 + $ECHO_ERROR "job, but $COMMAND is not supported for Upstart jobs." 1>&2 + exit 1 +esac --- upstart-1.8.orig/debian/upstart-monitor.install +++ upstart-1.8/debian/upstart-monitor.install @@ -0,0 +1,3 @@ +bin/upstart-monitor usr/bin/ +usr/share/icons/hicolor/scalable/apps/upstart-monitor.svg +usr/share/applications/upstart-monitor.desktop --- upstart-1.8.orig/debian/rules +++ upstart-1.8/debian/rules @@ -0,0 +1,60 @@ +#!/usr/bin/make -f + +DEB_BUILD_MAINT_OPTIONS := hardening=+pie,+bindnow +DEB_LDFLAGS_MAINT_APPEND := -Wl,--as-needed +DEB_CFLAGS_MAINT_APPEND := -Wall + +# Disable optimisations if noopt found in $DEB_BUILD_OPTIONS +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + DEB_LDFLAGS_MAINT_APPEND += -Wl,-O0 +else + DEB_CFLAGS_MAINT_APPEND += -Os + DEB_LDFLAGS_MAINT_APPEND += -Wl,-O1 +endif + +export DEB_BUILD_MAINT_OPTIONS DEB_LDFLAGS_MAINT_APPEND DEB_CFLAGS_MAINT_APPEND + +%: + dh $@ --with bash-completion,autoreconf,python3 + +override_dh_auto_configure: + dh_auto_configure -- --exec-prefix= --disable-silent-rules + +override_dh_auto_build: + dh_auto_build --parallel + +override_dh_auto_test: +ifeq (0,$(shell id -u)) + # WARNING: RUNNING TESTS AS ROOT IS KNOWN TO FAIL + # WARNING: WILL RUN TESTS, BUT WILL IGNORE FAILURE + -dh_auto_test +else + dh_auto_test +endif + +override_dh_fixperms: + dh_fixperms + chmod 755 debian/upstart/lib/init/upstart-job + chmod 755 debian/upstart/lib/init/apparmor-profile-load + chmod 755 debian/upstart/usr/lib/upstart/migrate-inittab.pl + rm debian/upstart/etc/init/upstart-event-bridge.conf + +override_dh_install: + dh_install + for i in \ + net-device-added \ + net-device-removed \ + graphics-device-added \ + drm-device-added; do \ + rm debian/tmp/usr/share/man/man7/$$i.7; \ + done + install -m 644 debian/upstart.apport \ + debian/upstart/usr/share/apport/package-hooks/upstart.py + +# Remove this man page for the upstart package; it will be added to the +# upstart-monitor package by its .manpages file, but removing it here is +# simpler than specifying every other section 8 manpage in the upstart +# packages .manpages file. +override_dh_installman: + dh_installman + rm debian/upstart/usr/share/man/man8/upstart-monitor.8* --- upstart-1.8.orig/debian/watch +++ upstart-1.8/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://upstart.ubuntu.com/download/([\d\.]+)/upstart-(.*)\.tar\.gz --- upstart-1.8.orig/debian/upstart.docs +++ upstart-1.8/debian/upstart.docs @@ -0,0 +1,4 @@ +NEWS +AUTHORS +TODO +HACKING --- upstart-1.8.orig/debian/running-in-container +++ upstart-1.8/debian/running-in-container @@ -0,0 +1,10 @@ +#!/bin/sh +# Return 0 if in a container, 1 if not +# if in a container, also print the container type +status container-detect 2>/dev/null | grep -q start + +if [ $? -eq 0 ]; then + [ -f /run/container_type ] && cat /run/container_type + exit 0 +fi +exit 1 --- upstart-1.8.orig/debian/upstart.manpages +++ upstart-1.8/debian/upstart.manpages @@ -0,0 +1 @@ +debian/manpages/* --- upstart-1.8.orig/debian/compat +++ upstart-1.8/debian/compat @@ -0,0 +1 @@ +9 --- upstart-1.8.orig/debian/source/options +++ upstart-1.8/debian/source/options @@ -0,0 +1 @@ +--extend-diff-ignore=.*.gmo --- upstart-1.8.orig/debian/source/format +++ upstart-1.8/debian/source/format @@ -0,0 +1 @@ +1.0 --- upstart-1.8.orig/debian/conf/failsafe.conf +++ upstart-1.8/debian/conf/failsafe.conf @@ -0,0 +1,44 @@ +# failsafe + +description "Failsafe Boot Delay" +author "Clint Byrum " + +start on filesystem and net-device-up IFACE=lo +stop on static-network-up or starting rc-sysinit + +emits failsafe-boot + +console output + +script + # Determine if plymouth is available + if [ -x /bin/plymouth ] && /bin/plymouth --ping ; then + PLYMOUTH=/bin/plymouth + else + PLYMOUTH=":" + fi + + # The point here is to wait for 2 minutes before forcibly booting + # the system. Anything that is in an "or" condition with 'started + # failsafe' in rc-sysinit deserves consideration for mentioning in + # these messages. currently only static-network-up counts for that. + + sleep 20 + + # Plymouth errors should not stop the script because we *must* reach + # the end of this script to avoid letting the system spin forever + # waiting on it to start. + $PLYMOUTH message --text="Waiting for network configuration..." || : + sleep 40 + + $PLYMOUTH message --text="Waiting up to 60 more seconds for network configuration..." || : + sleep 59 + $PLYMOUTH message --text="Booting system without full network configuration..." || : + + # give user 1 second to see this message since plymouth will go + # away as soon as failsafe starts. + sleep 1 + exec initctl emit --no-wait failsafe-boot +end script + +post-start exec logger -t 'failsafe' -p daemon.warning "Failsafe of 120 seconds reached." --- upstart-1.8.orig/debian/conf/wait-for-state.conf +++ upstart-1.8/debian/conf/wait-for-state.conf @@ -0,0 +1,60 @@ +author "Clint Byrum " +description "Waiting for state" + +task +normal exit 2 + +stop on started $WAIT_FOR or stopped $WAIT_FOR + +# These are all arguments for use influencing how this job waits +env TIMEOUT=30 +env MANUAL_OVERRIDE="N" +env WAIT_FOREVER="N" +env WAIT_STATE="started" +env TARGET_GOAL="start" + +# Required args w/ no sensible default, the tests at the beginning of +# the script are just to guard against WAITER="" or WAIT_FOR="", as the +# instance line will fail if they are not set, since they have no env +instance $WAITER$WAIT_FOR + +script + test -n "$WAIT_FOR" || exit 1 + test -n "$WAITER" || exit 1 + + # We don't want to override the manual stanza + # XXX: initctl show-config should share manual w/ us too + case $MANUAL_OVERRIDE in + N|n|0) + if grep -q "^\s*manual\s*$" /etc/init/$WAIT_FOR.conf ; then + exit 0 + fi + ;; + esac + + if [ "$WAIT_STATE" = "stopped" ] ; then + TARGET_GOAL="stop" + fi + + # Already running/stopped? + status $WAIT_FOR | grep -q "$TARGET_GOAL/$WAIT_STATE" && exit 0 + + # Give it a push + $TARGET_GOAL $WAIT_FOR || : + + # upstart will kill this shell on started/stopped $WAIT_FOR + while sleep $TIMEOUT ; do + case $WAIT_FOREVER in + N|n|0) + exit 100 + ;; + Y|y|1) + ;; + *) + exit 1 + ;; + esac + done + # Very strange, sleep returned non-zero? + exit 1 +end script --- upstart-1.8.orig/debian/conf/shutdown.conf +++ upstart-1.8/debian/conf/shutdown.conf @@ -0,0 +1,9 @@ +# Trigger an immediate shutdown when upstart receives SIGPWR +# this is useful for some UPS monitoring tools and for clean +# shutdown of containers + +description "Trigger an immediate shutdown on SIGPWR" +start on power-status-changed + +task +exec shutdown -h now "SIGPWR received" --- upstart-1.8.orig/debian/conf/flush-early-job-log.conf +++ upstart-1.8/debian/conf/flush-early-job-log.conf @@ -0,0 +1,11 @@ +# flush-early-job-log - Ensure cached output from jobs that finish +# before the disk is writeable are flushed to disk as soon as it does +# becomes writeable. + +description "flush early job output to logs" + +task + +start on filesystem + +exec initctl notify-disk-writeable --- upstart-1.8.orig/debian/conf/tty2.conf +++ upstart-1.8/debian/conf/tty2.conf @@ -0,0 +1,14 @@ +# tty2 - getty +# +# This service maintains a getty on tty2 from the point the system is +# started until it is shut down again. + +start on runlevel [23] and ( + not-container or + container CONTAINER=lxc or + container CONTAINER=lxc-libvirt) + +stop on runlevel [!23] + +respawn +exec /sbin/getty -8 38400 tty2 --- upstart-1.8.orig/debian/conf/console.conf +++ upstart-1.8/debian/conf/console.conf @@ -0,0 +1,11 @@ +# console - getty +# +# This service maintains a getty on console from the point the system is +# started until it is shut down again. + +start on stopped rc RUNLEVEL=[2345] and container CONTAINER=lxc + +stop on runlevel [!2345] + +respawn +exec /sbin/getty -8 38400 console --- upstart-1.8.orig/debian/conf/tty3.conf +++ upstart-1.8/debian/conf/tty3.conf @@ -0,0 +1,14 @@ +# tty3 - getty +# +# This service maintains a getty on tty3 from the point the system is +# started until it is shut down again. + +start on runlevel [23] and ( + not-container or + container CONTAINER=lxc or + container CONTAINER=lxc-libvirt) + +stop on runlevel [!23] + +respawn +exec /sbin/getty -8 38400 tty3 --- upstart-1.8.orig/debian/conf/tty6.conf +++ upstart-1.8/debian/conf/tty6.conf @@ -0,0 +1,11 @@ +# tty6 - getty +# +# This service maintains a getty on tty6 from the point the system is +# started until it is shut down again. + +start on runlevel [23] and not-container + +stop on runlevel [!23] + +respawn +exec /sbin/getty -8 38400 tty6 --- upstart-1.8.orig/debian/conf/rcS.conf +++ upstart-1.8/debian/conf/rcS.conf @@ -0,0 +1,28 @@ +# rcS - System V single-user mode compatibility +# +# This task handles the old System V-style single-user mode, this is +# distinct from the other runlevels since running the rc script would +# be bad. + +description "System V single-user mode compatibility" +author "Scott James Remnant " + +start on runlevel S +stop on runlevel [!S] + +console owner +script + exec /sbin/sulogin +end script + +post-stop script + # Don't switch runlevels if we were stopped by an event, since that + # means we're already switching runlevels + if [ -n "${UPSTART_STOP_EVENTS}" ] + then + exit 0 + fi + + # Switch, passing a magic flag + start --no-wait rc-sysinit FROM_SINGLE_USER_MODE=y +end script --- upstart-1.8.orig/debian/conf/container-detect.conf +++ upstart-1.8/debian/conf/container-detect.conf @@ -0,0 +1,42 @@ +description "Track if upstart is running in a container" + +start on mounted MOUNTPOINT=/run + +env container +env LIBVIRT_LXC_UUID + +emits container +emits not-container + +pre-start script + # The "standard" way of telling if we are in a container + # is to check for "container" in init's environment. + # The code below is for cases where it's not set. + + # Detect old-style libvirt + if [ -z "$container" ]; then + [ -n "$LIBVIRT_LXC_UUID" ] && container=lxc-libvirt + fi + + # Detect OpenVZ containers + if [ -z "$container" ]; then + [ -d /proc/vz ] && [ ! -d /proc/bc ] && container=openvz + fi + + # Detect Vserver containers + if [ -z "$container" ]; then + VXID="$(cat /proc/self/status | grep ^VxID | cut -f2)" || true + [ "${VXID:-0}" -gt 1 ] && container=vserver + fi + + if [ -n "$container" ]; then + echo "$container" > /run/container_type || true + initctl emit --no-wait container CONTAINER=$container + exit 0 + fi + + # If not a container, stop there + rm -f /run/container_type + initctl emit --no-wait not-container + stop +end script --- upstart-1.8.orig/debian/conf/tty5.conf +++ upstart-1.8/debian/conf/tty5.conf @@ -0,0 +1,11 @@ +# tty5 - getty +# +# This service maintains a getty on tty5 from the point the system is +# started until it is shut down again. + +start on runlevel [23] and not-container + +stop on runlevel [!23] + +respawn +exec /sbin/getty -8 38400 tty5 --- upstart-1.8.orig/debian/conf/tty1.conf +++ upstart-1.8/debian/conf/tty1.conf @@ -0,0 +1,14 @@ +# tty1 - getty +# +# This service maintains a getty on tty1 from the point the system is +# started until it is shut down again. + +start on stopped rc RUNLEVEL=[2345] and ( + not-container or + container CONTAINER=lxc or + container CONTAINER=lxc-libvirt) + +stop on runlevel [!2345] + +respawn +exec /sbin/getty -8 38400 tty1 --- upstart-1.8.orig/debian/conf/tty4.conf +++ upstart-1.8/debian/conf/tty4.conf @@ -0,0 +1,14 @@ +# tty4 - getty +# +# This service maintains a getty on tty4 from the point the system is +# started until it is shut down again. + +start on runlevel [23] and ( + not-container or + container CONTAINER=lxc or + container CONTAINER=lxc-libvirt) + +stop on runlevel [!23] + +respawn +exec /sbin/getty -8 38400 tty4 --- upstart-1.8.orig/debian/manpages/upstart-events.7 +++ upstart-1.8/debian/manpages/upstart-events.7 @@ -0,0 +1,516 @@ +'\" t +.TH upstart-events 7 2011-03-24 upstart +.\" +.SH NAME +upstart-events \- Well-known Upstart events summary +.\" +.SH Event Summary + +This manual page summarizes well-known events generated by Upstart +running both as the +.BR init (8) +daemon (process ID 1) and a Session Init (process that supervises a user +session). + +It is not an exhaustive list of all possible events, but rather details +a standard set of events expected to be generated on any Ubuntu system +running Upstart. + +The primary tables, \fBTable 1\fP and \fBTable 2\fP, encode the +well-known system and session events respectively, along with the type +of each event (listed in \fBTable 3\fP), the emitter of the event (see +\fBTable 4\fP) and the approximate time at which the event could be +generated. Additionally, the \fINote\fP column indexes into \fBTable +5\fP for further details on a particular event. + +\fBTable 6\fP shows job goals and possible state transitions. See the +.B status +command in +.BR initctl (8) +for further details. + +Note that some events listed in +.B Table 1 +.I may +be available to session jobs (depending on when the Session Init +starts). Those events that are available will be prefixed with +\fI:sys:\fR. See +.BR upstart\-event\-bridge (8) +for further details. + +The \fIRef\fP (Reference) column is used to refer to individual +events succinctly in the \fITime\fP column. + +Note that the \(aq<\(aq and \(aq>\(aq characters in the \fITime\fP column denote +that the event in the \fIEvent\fP column occurs respectively before or +after the event specified in the \fITime\fP column (for example, the +\fBmounting\fP(7) event occurs "at some time" after the \fBstartup\fP(7) +event, and the \fBvirtual\-filesystems\fP(7) event occurs after the last +\fBmounted\fP(7) event relating to a virtual filesystem has been emitted). + +For further details on events, consult the manual pages and the system +job configuration files, usually located in \fI/etc/init\fP. +.\" + +.\" Flush-left to allow table to be viewed on 80-col display without +.\" wrapping. +.nr old_po .po +.nr old_in .in +.po 0 +.in 0 +.sp 1 +\fBTable 1: Well-Known System Events Summary.\fP +.TS +box, tab (@); +c | c | c | c | c | c +c | l | c | c | l | c. +Ref@Event@Type@Emit@Time@Note += + @\fBall\-swaps\fP@S@M@> (5)@ + @\fBcontrol\-alt\-delete\fP(7)@S@A@> (5)@A + @container@S@C@> \fI/run\fP mounted@Q + @dbus\-activation@S@B@> D\-Bus client request@ + @deconfiguring\-networking@H@V@< non-local IFs down@P + @desktop\-session\-start@H@D@> \fBX\fP(7) session created@B + @desktop\-shutdown@H@D@> \fBX\fP(7) session ended@O + @device\-not\-ready@H@M@> (2)@N + @drm\-device\-added@S@U@> (5)@C + @failsafe\-boot@S@X@> (7) and local IF@S + @file@S@K@> (1)@U +7@\fBfilesystem\fP@S@M@After last (1)@D + @graphics\-device\-added@S@U@> (5)@C + @\fBkeyboard\-request\fP(7)@S@A@> (5)@E + @\fBlocal\-filesystems\fP(7)@S@M@> (6)@ + @login\-session\-start@H@D@< DM running@F +1@\fBmounted\fP(7)@H@M@> associated (2)@G +2@\fBmounting\fP(7)@H@M@> (5)@H +3@net\-device\-added@S@U@> (5)@C + @net\-device\-changed@S@U@> (5)@C + @net\-device\-down@S@F@< (4)@C +4@net\-device\-removed@S@U@> (5)@C + @net\-device\-up@S@F,N@> (3)@C + @not\-container@S@C@> \fI/run\fP mounted@Q + @\fBpower\-\%status\-\%changed\fP(7)@S@I@> (5)@I + @recovery@S@G@Boot (<5)@R + @\fBremote\-\%filesystems\fP(7)@S@M@> (6)@ + @\fBrunlevel\fP(7)@M@T@> (7) + (8)@ + @\fBsocket\fP(7)@S@S@> socket connection@ +5@\fBstartup\fP(7)@S@I@Boot@J + @\fBstarted\fP(7)@S@I@> job started@K + @\fBstarting\fP(7)@H@I@< job starts@K + 8@static\-network\-up@S@N@> last static IF up@ + @\fBstopped\fP(7)@S@I@> job stopped@K + @\fBstopping\fP(7)@H@I@< job stops@K + @T{ +unmounted\-\:remote\-\:filesystems +T}@H@V@T{ +> last remote FS unmounted +T}@L +6@\fBvirtual\-\:filesystems\fP(7)@S@M@> last virtual FS (1)@M +.TE +.po \n[old_po] +.in \n[old_in] +.P +Key: + \(aqDM\(aq is an abbreviation for Display Manager. + \(aqFS\(aq is an abbreviation for filesystem. + \(aqIF\(aq is an abbreviation for Network Interface. + +.\" Flush-left to allow table to be viewed on 80-col display without +.\" wrapping. +.nr old_po .po +.nr old_in .in +.po 0 +.in 0 +.sp 1 +\fBTable 2: Well-Known User Events Summary.\fP +.TS +box, tab (@); +c | c | c | c | c | c +c | l | c | c | l | c. +Ref@Event@Type@Emit@Time@Note += + @\fBdesktop\-end\fP(7)@S@J@< (2)@ + @\fBdesktop\-start\fP(7)@H@J@> (3)@ + @file@S@K@> (1)@U +2@\fBsession\-end\fP(7)@M@I@< Session Init end@ +1@\fBstartup\fP(7)@S@I@> Session Init start@J + @:sys:*@S@E@> \fBupstart\-event\-bridge\fP(8) start@ + @:sys:restarted@S@E@> \fBupstart\-event\-bridge\fP(8) start@V +3@xsession@M@H@> (1)@T +.TE +.po \n[old_po] +.in \n[old_in] + +.\" +.P +.sp 1 +.nr old_po .po +.nr old_in .in +.po 0 +.in 0 +\fBTable 3: Event Types.\fP +.TS +box, tab (@); +c | l |l +c | l |l. +Ref@Event Type@Notes += +H@Hook@T{ +Blocking. Waits for events that \fBstart on\fP or \fBstop on\fP this +event. +T} +M@Method@Blocking task. +S@Signal@Non-blocking. +.TE +.po \n[old_po] +.in \n[old_in] + +.\" +.P +.nr old_po .po +.nr old_in .in +.po 0 +.in 0 +.sp 1 +\fBTable 4: Event Emitters.\fP +.TS +box, tab (@); +c | l |l +c | l |l. +Ref@Emitter@Notes += +A@System Administrator (initiator)@Technically emitted by init(8). +B@\fBdbus\-daemon\fP(1)@Run with "\fI\-\-activation=upstart"\fP +C@container\-detect job@ +D@Display Manager@e.g. lightdm/gdm/kdm/xdm. +E@\fBupstart\-event\-bridge\fP(8)@ +F@\fBifup\fP(8) or \fBifdown\fP(8)@See \fI/etc/network/\fP. +G@bootloader or initramfs@ +H@xsession\-init session job@ +I@\fBinit\fP(8)@Either PID 1 or a Session Init. +J@job that starts desktop@gnome\-session job for Ubuntu. +K@\fBupstart\-file\-bridge\fP(8)@ +M@\fBmountall\fP(8)@ +N@network\-interface job@ +S@\fBupstart\-socket\-bridge\fP(8)@ +T@\fBtelinit\fP(8), \fBshutdown\fP(8)@ +U@\fBupstart\-udev\-bridge\fP(8)@ +V@System V init system@ +X@failsafe job@ +.TE +.po \n[old_po] +.in \n[old_in] + +.\" +.P +.nr old_po .po +.nr old_in .in +.po 0 +.in 0 +\fBTable 5: Event Summary Notes.\fP +.TS +box, tab (@); +c | l +c | l. +Note@Detail += +A@T{ +Requires administrator to press Control-Alt-Delete key +combination on the console. +T} +B@Event generated when user performs graphical login. +C@T{ +These are specific examples. \fBupstart\-udev\-bridge\fP(8) will emit +events which match the pattern, "\fIS\fP\-device\-\fIA\fP" where +\(aqS\(aq is the udev \fIsubsystem\fP and \(aqA\(aq is the udev \fIaction\fP. See +\fBudev\fP(7) and for further details. If you have sysfs +mounted, you can look in \fI/sys/class/\fP for possible values for subsystem. +T} +D@Note this is in the singular - there is no \(aqfilesystems\(aq event. +E@T{ +Emitted when administrator presses Alt-UpArrow key combination on +the console. +T} +F@T{ +Denotes Display Manager running (about to be displayed), but no users +logged in yet. +T} +G@Generated for each mount that completes successfully. +H@T{ +Emitted when mount attempt for single entry from \fBfstab\fP(5) +for any filesystem type is about to begin. +T} +I@Emitted when Upstart receives the SIGPWR signal. +J@Initial event (system or Session Init). +K@T{ +Although the events are emmitted by \fBinit\fP(8), the instigator may be +\fBinitctl\fP(8) if a System Administrator has manually started or +stopped a job. +T} +L@\fI/etc/init/umountnfs.sh\fP. +M@Emitted when all virtual filesystems (such as \fI/proc\fR) mounted. +N@T{ +Emitted when the \fI\-\-dev\-wait\-time\fP timeout is exceeded for +\fBmountall\fP(8). This defaults to 30 seconds. +T} +O@T{ +Emitted when the \fIX\fP(7) display manager exits at shutdown or reboot, to +hand off to the shutdown splash manager. +T} +P@T{ +Emitted by /etc/init.d/networking just prior to stopping all non-local +network interfaces. +T} +Q@T{ +Either \(aqcontainer\(aq or \(aqnot-container\(aq is emitted (depending +on the environment), but not both. +T} +R@T{ +Emitted by either the initramfs or bootloader (for example grub) as the \fIinitial\fP +event (rather than \fBstartup\fP(7)) to denote the system has booted into +recovery mode. If recovery was successful, the standard \fBstartup\fP(7) +event is \fIthen\fP emitted, allowing the system to boot as normal. +T} +S@T{ +Emitted to indicate the system has failed to boot within the expected +time. This event will trigger other jobs to forcibly attempt to bring +the system into a usable state. +T} +T@Only emitted for a graphical session. +U@See \fBfile\-event\fP(7). +V@T{ +This is a pseudo-system event emitted directly by the +.BR upstart\-event\-bridge (8) "" . +T} +.TE +.po \n[old_po] +.in \n[old_in] + +.\" ------------------------------------------------------------ +.SH Job States + +.\" +.P +.sp 1 +.nr old_po .po +.nr old_in .in +.po 0 +.in 0 +\fBTable 6: Job Goals and State Transitions.\fP +.TS +box,tab(@); +c | c s +c | c s +c | c | c +c | l l. + @Goal + @_ +Current State @start @ stop += +waiting @ starting @ n/a +starting @ pre\-start @ stopping +pre\-start @ spawned @ stopping +spawned @ post\-start @ stopping +post\-start @ running @ stopping +running @ stopping @ pre\-stop / stopping (*) +pre\-stop @ running @ stopping +stopping @ killed @ killed +killed @ post\-stop @ post\-stop +post\-stop @ starting @ waiting +.TE +.po \n[old_po] +.in \n[old_in] +.P +Key: + (*) If there is a \fBscript\fP or \fBexec\fP section and this process is running, + state will be \(aqpre\-stop\(aq, else it will be \(aqstopping\(aq. + +.\" ------------------------------------------------------------ +.SH Job Lifecycle +.\" +.\" ------------------------------ +.SS Starting a Job + +.nr step 1 1 +.\" +.IP \n[step] 3 +Initially the job is "at rest" with a goal of \(aqstop\(aq +and a state of \(aqwaiting\(aq (shown as \(aqstop/waiting\(aq by the +.BR initctl (8) +.B list +and +.B status +commands). +.\" +.IP \n+[step] 3 +The goal is changed from \(aqstop\(aq to +\(aqstart\(aq indicating the job is attempting to start. +.\" +.IP \n+[step] 3 +The state is changed from \(aqwaiting\(aq to +\(aqstarting\(aq. +.\" +.IP \n+[step] 3 +The \fBstarting\fP(7) event is emitted denoting the job is +"about to start". +.\" +.IP \n+[step] 3 +Any jobs whose \(aqstart on\(aq (or \(aqstop on\(aq) condition would be satisfied +by this job starting are started (or stopped respectively). +.\" +.IP \n+[step] 3 +The \fBstarting\fP(7) event completes. +.\" +.IP \n+[step] 3 +The state is changed from \(aqstarting\(aq to \(aqpre\-start\(aq. +.\" +.IP \n+[step] 3 +If the \fBpre\-start\fP stanza exists, the pre\-start process is +spawned. +.\" +.IP \n+[step] 3 +If the pre\-start process fails, the goal is changed from +\(aqstart\(aq to \(aqstop\(aq, and the +.BR stopping(7) +and +.BR stopped(7) +events are emitted with appropriate variables set denoting the error. +.\" +.IP \n+[step] 3 +Assuming the pre\-start did not fail or did not call "stop", the main +process is spawned. +.\" +.IP \n+[step] 3 +The state is changed from \(aqpre\-start\(aq to \(aqspawned\(aq. +.\" +.IP \n+[step] 3 +Upstart then ascertains the \fIfinal\fP PID for the job which may be a +descendent of the immediate child process if \fBexpect fork\fP or +\fBexpect daemon\fP has been specified. +.\" +.IP \n+[step] 3 +The state is changed from \(aqspawned\(aq to \(aqpost\-start\(aq. +.\" +.IP \n+[step] 3 +If the \fBpost\-start\fP stanza exists, the post\-start process is +spawned. +.\" +.IP \n+[step] 3 +The state is changed from \(aqpost\-start\(aq to \(aqrunning\(aq. +.\" +.IP \n+[step] 3 +The \fBstarted\fP(7) event is emitted. +.sp 1 +For services, when this event completes the main process will now be fully +running. If the job refers to a task, it will now have completed +(successfully or otherwise). +.\" +.IP \n+[step] 3 +Any jobs whose \(aqstart on\(aq (or \(aqstop on\(aq) condition would be satisfied +by this job being started are started (or stopped respectively). + +.\" ------------------------------ +.SS Stopping a Job + +.nr step 1 1 +.\" +.IP \n[step] 3 +Assuming the job is fully running, it will have a goal of \(aqstart\(aq +and a state of \(aqrunning\(aq (shown as \(aqstart/running\(aq by the +.BR initctl (8) +.B list +and +.B status +commands). +.\" +.IP \n+[step] 3 +The goal is changed from \(aqstart\(aq to \(aqstop\(aq indicating the +job is attempting to stop. +.\" +.IP \n+[step] 3 +The state is changed from \(aqrunning\(aq to +\(aqpre\-stop\(aq. +.\" +.IP \n+[step] 3 +If the \fBpre\-stop\fP stanza exists, the pre\-stop process is +spawned. +.\" +.IP \n+[step] 3 +The state is changed from \(aqpre\-stop\(aq to \(aqstopping\(aq. +.\" +.IP \n+[step] 3 +The \fBstopping\fP(7) event is emitted. +.\" +.IP \n+[step] 3 +Any jobs whose \(aqstart on\(aq (or \(aqstop on\(aq) condition would be satisfied by this +job stopping are started (or stopped respectively). +.\" +.IP \n+[step] 3 +The main process is stopped: +.RS +.nr step2 1 1 +.af step2 i +.IP \n[step2] 3 +The signal specified by the +.B kill signal +stanza is sent to the process group of the main process +(such that all processes belonging to the jobs main process are killed). +By default this signal is +.BR SIGTERM "." +.sp 1 +See \fBsignal\fP(7) and \fBinit\fP(5). +.IP \n+[step2] 3 +Upstart waits for up to "kill timeout" seconds (default 5 seconds) for +the process to end. +.IP \n+[step2] 3 +If the process is still running after the timeout, a +.B SIGKILL +signal is sent to the process which cannot be ignored and will forcibly +stop the processes in the process group. +.RE +.\" +.IP \n+[step] 3 +The state is changed from \(aqkilled\(aq to \(aqpost\-stop\(aq. +.\" +.IP \n+[step] 3 +If the \fBpost\-stop\fP stanza exists, the post\-stop process is +spawned. +.\" +.IP \n+[step] 3 +The state is changed from \(aqpost\-stop\(aq to \(aqwaiting\(aq. +.\" +.IP \n+[step] 3 +The \fBstopped\fP(7) event is emitted. +.sp 1 +When this event completes, the job is fully stopped. +.\" +.IP \n+[step] 3 +Any jobs whose \(aqstart on\(aq (or \(aqstop on\(aq) condition would be satisfied +by this job being stopped are started (or stopped respectively). + +.SH AUTHOR +Manual page written by James Hunt +.RB < james.hunt@ubuntu.com > +.\" +.SH REPORTING BUGS +Report bugs at +.RB < https://launchpad.net/ubuntu/+source/upstart/+bugs > +.\" +.SH COPYRIGHT +Copyright \(co 2011-2013 Canonical Ltd. +.br +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +.\" +.SH SEE ALSO +.BR init (5) +.BR init (8) +.BR initctl (8) +.BR mountall (8) +.BR started (7) +.BR starting (7) +.BR stopped (7) +.BR stopping (7) +.BR telinit (8) +.BR upstart\-event\-bridge (8) --- upstart-1.8.orig/debian/xsession.d/99upstart +++ upstart-1.8/debian/xsession.d/99upstart @@ -0,0 +1,14 @@ +# Start the user session +if [ -n "$UPSTART" ]; then + case "$BASESESSION" in + gnome-session*) + export SESSIONTYPE=gnome-session + ;; + lxsession*) + export SESSIONTYPE=lxsession + ;; + esac + + STARTUP="init --user" + unset UPSTART +fi --- upstart-1.8.orig/debian/xsession.d/00upstart +++ upstart-1.8/debian/xsession.d/00upstart @@ -0,0 +1,12 @@ +# Make ubuntu-upstart an alias for ubuntu +if grep -q "^$DESKTOP_SESSION\$" /etc/upstart-xsessions; then + export XDG_CONFIG_DIRS="/usr/share/upstart/xdg:/etc/xdg" + + BASESESSION=${1% *} + BASESESSION=${BASESESSION##*/} + if [ "$BASESESSION" = x-session-manager ]; then + BASESESSION=$(basename $(readlink /etc/alternatives/x-session-manager)) + fi + + UPSTART=1 +fi --- upstart-1.8.orig/debian/user-conf/xsession-init.conf +++ upstart-1.8/debian/user-conf/xsession-init.conf @@ -0,0 +1,13 @@ +description "XSession handling" +author "Stéphane Graber " + +start on startup +emits xsession + +pre-start script + [ -z "$DESKTOP_SESSION" ] && stop || true +end script + +script + exec initctl emit xsession SESSION=$DESKTOP_SESSION SESSIONTYPE=$SESSIONTYPE +end script --- upstart-1.8.orig/debian/user-conf/re-exec.conf +++ upstart-1.8/debian/user-conf/re-exec.conf @@ -0,0 +1,6 @@ +description "Restart session init when system init restarts" +author "Stéphane Graber " + +start on :sys:restarted + +exec dbus-send --type=method_call --address=$UPSTART_SESSION /com/ubuntu/Upstart com.ubuntu.Upstart0_6.Restart --- upstart-1.8.orig/debian/user-conf/logrotate.conf +++ upstart-1.8/debian/user-conf/logrotate.conf @@ -0,0 +1,51 @@ +# logrotate - rotate Upstart job log files to conserve disk space. +# +# Currently runs automatically 1 minute after session starts (to give +# jobs a chance to settle). However, can be run manually any time using +# 'start logrotate' to force logs to be rotated in low-disk space +# scenarios. + +description "Rotate job log files" + +start on startup + +pre-start script + +logrotate=$(command -v logrotate) + +# logrotate is not installed +[ -z "$logrotate" ] && exit 0 + +# started by event, so allow time for main jobs to settle +[ -n "$UPSTART_EVENTS" ] && sleep 60 && exit 0 + +# started manually, so force a rotation +initctl set-env FORCE=--force + +end script + +script +statedir=${XDG_CACHE_HOME:-$HOME/.cache}/logrotate +statefile="$statedir/status" + +logdir=${XDG_CACHE_HOME:-$HOME/.cache}/upstart + +mkdir -p "$statedir" || : +mkdir -p "$logdir" || : + +conf=$(mktemp) + +cat <$conf +"$logdir/*.log" { + daily + missingok + rotate 7 + compress + notifempty + nocreate +} +EOF + +logrotate $FORCE -s "$statefile" "$conf" || : +rm -f "$conf" +end script --- upstart-1.8.orig/debian/user-conf/upstart-file-bridge.conf +++ upstart-1.8/debian/user-conf/upstart-file-bridge.conf @@ -0,0 +1,16 @@ +# upstart-file-bridge - Bridge file events into upstart +# +# This helper daemon receives inotify(7) events and +# emits equivalent Upstart events. + +description "Bridge file events into upstart" + +emits file + +start on startup +stop on session-end + +expect daemon +respawn + +exec upstart-file-bridge --daemon --user --- upstart-1.8.orig/debian/tests/control +++ upstart-1.8/debian/tests/control @@ -0,0 +1,3 @@ +Tests: force +Depends: @, dbus +Restrictions: needs-root build-needed --- upstart-1.8.orig/debian/tests/test_setup +++ upstart-1.8/debian/tests/test_setup @@ -0,0 +1,25 @@ +#--------------------------------------------------------------------- +# Source this file in all tests +#--------------------------------------------------------------------- + +# user provided by auto-package-testing environment +user=ubuntu + +#------------------------------ +# Assertions + +# We must be running as root initially to perform setup +test $(id -u) -eq 0 || { echo "ERROR: not root"; exit 1; } + +# User must exist +getent passwd $user >/dev/null 2>&1 || \ + { echo "ERROR: no user '$user'"; exit 1; } + +#------------------------------ +# Init + +# we need to run as root, but that means all unpacked files are owned by +# root too. +chown -R ${user}: . .. + +#--------------------------------------------------------------------- --- upstart-1.8.orig/debian/tests/force +++ upstart-1.8/debian/tests/force @@ -0,0 +1,13 @@ +#!/bin/sh -e +#--------------------------------------------------------------------- +# Dummy DEP-8 test that does nothing. The reason for having it though +# is to force auto-package-test to build Upstart and thus run its test +# suite. This is not strictly necessary (as we already run it on all +# architectures as part of the package build), running the tests in +# the the virtualised auto-package-test environment (different to the +# buildd environment) has shaken out a few bugs in the past. +#--------------------------------------------------------------------- + +. $(dirname $0)/test_setup + +exit 0