Merge lp:~jamesodhunt/upstart/bug-530779 into lp:upstart
- bug-530779
- Merge into trunk
Status: | Needs review |
---|---|
Proposed branch: | lp:~jamesodhunt/upstart/bug-530779 |
Merge into: | lp:upstart |
Diff against target: |
24650 lines (+24167/-52) 13 files modified
ChangeLog (+57/-0) init/Makefile.am (+2/-1) init/job.c (+17/-18) init/job_process.c (+41/-6) init/process.c (+27/-6) init/process.h (+6/-0) init/tests/data/upstart-1.12.json (+21708/-0) init/tests/test_job_process.c (+483/-10) init/tests/test_state.c (+190/-10) test/Makefile.am (+8/-1) test/test_daemon.c (+1485/-0) test/test_util_common.c (+116/-0) test/test_util_common.h (+27/-0) |
To merge this branch: | bzr merge lp:~jamesodhunt/upstart/bug-530779 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Steve Langasek | Needs Fixing | ||
Review via email: mp+197080@code.launchpad.net |
Commit message
Description of the change
Steve Langasek (vorlon) wrote : | # |
+ TEST_FEATURE ("full double-fork daemon test where parent waits for ultimate child");
does not fit the expected structure of a test feature name. Suggest instead:
+ assert0 (prctl (PR_SET_
Upstart does not depend on PR_SET_
+ /* Low byte is signal */
+ TEST_EQ (siginfo.si_status, SIGTRAP);
+
+ /* Normally, the next byte would be the ptrace event,
+ * but upstart hasn't yet set PTRACE_O_TRACEEXEC, hence
+ * no ptrace event will be available.
+ */
+ TEST_EQ (((siginfo.
The second test here is redundant with the first; if siginfo.si_status == SIGTRAP, the high byte must be 0. Either the second test should be dropped, or, if you want to keep it for clarity, the first test should be modified to check siginfo.si_status & 0x7f.
+ TIMED_BLOCK (5) {
I'm not thrilled about this TIMED_BLOCK() idea. Why should we not just use inotify? For that matter, why is this pidfile needed at all - what is this meant to guard against? The test case already includes its own direct check of the pids with ptrace, so the only thing this pidfile does is make sure the daemon agrees with the test what the PIDs are. That seems unnecessary to me.
+ /* Wait for child to send itself SIGSTOP denoting its
+ * final resting state.
+ */
+ got = FALSE;
+ TIMED_BLOCK (5) {
+
+ memset (&siginfo, 0, sizeof (siginfo));
+ ret = waitid (P_PID, final_pid, &siginfo, WSTOPPED | WNOWAIT | WUNTRACED);
+
+ if (! ret && siginfo.si_code == CLD_STOPPED &&
+ siginfo.si_status == SIGSTOP) {
+ got = TRUE;
+ break;
+ }
+ }
This section seems overly complicated. The child process could just call pause() instead, and let the test runner kill the process when it's done.
+ TIMED_BLOCK (5) {
+ nih_child_poll ();
+
+ if (kill (final_pid, 0) == -1 && errno == ESRCH) {
+ got = TRUE;
+ break;
+ }
+ }
Definitely no reason for this to be in a TIMED_BLOCK(). Or called at all. We've already received CLD_EXITED above, so the kill() should immediately return ESRCH. But again, this code all goes away if we just kill SIGKILL the final_pid, instead of including these checks that are unrelated to the purpose of the test case.
static void
selfpipe_setup (void)
{
- static struct sigaction act;
- int read_flags;
- int write_flags;
[...]
This mixes formatting cha...
James Hunt (jamesodhunt) wrote : | # |
Hi Steve,
I've now updated the deserialisation to make an attempt on the downgrade scenario. Note the comment in process.h though regarding the ordering of ProcessType. I've also raised bug 1256985 whilst looking at this.
> + TEST_FEATURE ("full double-fork daemon test where parent waits for ultimate child");
>
> does not fit the expected structure of a test feature name. Suggest instead:
> TEST_FEATURE ("with daemon where parent waits for ultimate child before exiting");
Fixed.
>
> + assert0 (prctl (PR_SET_
>
> Upstart does not depend on PR_SET_
Fixed.
>
> + /* Low byte is signal */
> + TEST_EQ (siginfo.si_status, SIGTRAP);
> +
> + /* Normally, the next byte would be the ptrace event,
> + * but upstart hasn't yet set PTRACE_O_TRACEEXEC, hence
> + * no ptrace event will be available.
> + */
> + TEST_EQ (((siginfo.
>
> The second test here is redundant with the first; if siginfo.si_status == SIGTRAP, the high byte must be 0. Either the second test should be dropped, or, if you want to keep it for clarity, the first test should be modified to check siginfo.si_status & 0x7f.
Fixed.
>
> + TIMED_BLOCK (5) {
>
> I'm not thrilled about this TIMED_BLOCK() idea. Why should we not just use inotify?
To give some context here, it's worth pointing out that this test has been through a few iterations. An earlier incarnation of it was using signals entirely but that is problematic since:
- test_daemon needed to raise SIGSTOP on itself.
- test_daemon is being ptraced hence is also getting SIGSTOP's sent to it by the kernel.
- This is a multi-process test so we need to guarantee behaviour given that we can't know the order the kernel will schedule each process.
- We don't want to call nih_main_loop() as we cannot then control the test in "single-step" increments (well, as close as we can get to that anyway :-).
Certainly inotify would be the obvious choice but for that fact that it would add further code and complexity to the test since we're avoiding using nih_main_loop().
TIMED_BLOCK offers a rather useful generic facility I think, particularly since a common requirement for the tests is to perform some operation "within a reasonable amount of time" and then fail. Yes, it's tricky to determine the value of "reasonable", but we do need to guarantee a hard test failure, rather than an indefinite hang.
Admittedly, using TIMED_BLOCK() with file_line_count() is rather grisly, but even if we were to use inotify, we'd still need to check the line count on each event as we need to know when a particular parent is in a particular state.
> For that matter, why is this pidfile needed at all - what is this meant to guard against? The test case already includes its own direct check of the pids with ptrace, so the only thing this pidfile does is make sure the daemon agrees with the test what the PIDs are. That seems unnecessary to me.
It's not immediately obvious, but that's not th...
- 1579. By Steve Langasek
- 1580. By James Hunt
-
* init/tests/
data/upstart- 1.12.json: New test data file.
* test/test_daemon.c: New test utility.
* init/Makefile.am: Add "upstart-1.12.json" .
* init/job.c:
- Updated copyright.
- job_deserialise(): Generalise logic to handle missing pids when
upgrading from a version that does not support PROCESS_SECURITY and
PROCESS_DAEMON_ PARENT.
* init/job_process.c:
- Copyright and comments.
- job_process_terminated( ): Consider job ready when daemons parent
exits, rather than when the requisite number of forks have been
performed (based on lp:~vorlon/upstart/lp.530779-rough-draft)
(LP: #530779).
- job_process_trace_new( ): Corrected comment header.
- job_process_trace_new_ child() : Don't consider job ready once
requisite number of forks have occured any more.
- job_process_trace_fork( ): Save parent process.
* init/process.c:
- Updated copyright.
- process_name(): Added PROCESS_DAEMON_ PARENT for completeness.
- process_from_name( ): Added PROCESS_ DAEMON_ PARENT for completeness.
- process_deserialise_ all(): Generalise logic to handle missing pids
when upgrading from a version that does not support PROCESS_SECURITY and
PROCESS_DAEMON_ PARENT.
- process_type_enum_ to_str( ): Added PROCESS_ DAEMON_ PARENT for completeness.
- process_type_str_ to_enum( ): Added PROCESS_ DAEMON_ PARENT for completeness.
* init/process.h: Comments for ProcessType (which must be kept in order).
* init/tests/test_job_ process. c:
- test_run(): New test:
- "with daemon where parent waits for ultimate child before exiting"
- test_spawn(): Remove temporary files.
- test_kill(): Extra checks.
- test_handler():
- Remove erroneous UPSTART_LOGDIR code - not used by this test.
- Add daemon parent checks.
* init/tests/test_state. c:
- test_job_environ_ upgrade( ): Add additional checks to ensure that
json not containing PROCESS_DAEMON_ PARENT elements correctly deserialises
into empty elements.
- test_daemon_parent_ state() : New test that checks a data file containing
jobs with and without PROCESS_DAEMON_ PARENTS can be deserialised.
* test/Makefile.am: Updated for test_daemon.
* test/test_util_common. c:
- get_test_daemon_ binary( ): New function.
- file_line_count(): New function.
* test/test_util_common. h: TIMED_BLOCK(): New utility macro.
James Hunt (jamesodhunt) wrote : | # |
Hi Steve - I've now cleaned up the branch.
Steve Langasek (vorlon) wrote : | # |
>> Upstart does not depend on PR_SET_
>> available on the running kernel - the test suite shouldn't
>> either. The test needs to be skipped if this facility is
>> unavailable, or it needs to be rewritten to avoid subreaper
>> entirely.
> Fixed.
This is not fixed. You've adjusted the test suite to not fail if PR_SET_
This probably calls for the test to be broken out into a separate function so that it can be skipped sensibly.
- 1581. By James Hunt
-
* init/tests/
test_job_ process. c: test_run_ subreaper( ): Separate the
prctl(PR_SET_ CHILD_SUBREAPER ) test into a new function and only call
if the running kernel supports that prctl.
* test/test_util_common. c: get_kernel_ version( ): New function. - 1582. By James Hunt
-
* Sync with lp:upstart.
James Hunt (jamesodhunt) wrote : | # |
Hi Steve,
Thanks for reviewing - code updated.
Unmerged revisions
- 1582. By James Hunt
-
* Sync with lp:upstart.
- 1581. By James Hunt
-
* init/tests/
test_job_ process. c: test_run_ subreaper( ): Separate the
prctl(PR_SET_ CHILD_SUBREAPER ) test into a new function and only call
if the running kernel supports that prctl.
* test/test_util_common. c: get_kernel_ version( ): New function. - 1580. By James Hunt
-
* init/tests/
data/upstart- 1.12.json: New test data file.
* test/test_daemon.c: New test utility.
* init/Makefile.am: Add "upstart-1.12.json" .
* init/job.c:
- Updated copyright.
- job_deserialise(): Generalise logic to handle missing pids when
upgrading from a version that does not support PROCESS_SECURITY and
PROCESS_DAEMON_ PARENT.
* init/job_process.c:
- Copyright and comments.
- job_process_terminated( ): Consider job ready when daemons parent
exits, rather than when the requisite number of forks have been
performed (based on lp:~vorlon/upstart/lp.530779-rough-draft)
(LP: #530779).
- job_process_trace_new( ): Corrected comment header.
- job_process_trace_new_ child() : Don't consider job ready once
requisite number of forks have occured any more.
- job_process_trace_fork( ): Save parent process.
* init/process.c:
- Updated copyright.
- process_name(): Added PROCESS_DAEMON_ PARENT for completeness.
- process_from_name( ): Added PROCESS_ DAEMON_ PARENT for completeness.
- process_deserialise_ all(): Generalise logic to handle missing pids
when upgrading from a version that does not support PROCESS_SECURITY and
PROCESS_DAEMON_ PARENT.
- process_type_enum_ to_str( ): Added PROCESS_ DAEMON_ PARENT for completeness.
- process_type_str_ to_enum( ): Added PROCESS_ DAEMON_ PARENT for completeness.
* init/process.h: Comments for ProcessType (which must be kept in order).
* init/tests/test_job_ process. c:
- test_run(): New test:
- "with daemon where parent waits for ultimate child before exiting"
- test_spawn(): Remove temporary files.
- test_kill(): Extra checks.
- test_handler():
- Remove erroneous UPSTART_LOGDIR code - not used by this test.
- Add daemon parent checks.
* init/tests/test_state. c:
- test_job_environ_ upgrade( ): Add additional checks to ensure that
json not containing PROCESS_DAEMON_ PARENT elements correctly deserialises
into empty elements.
- test_daemon_parent_ state() : New test that checks a data file containing
jobs with and without PROCESS_DAEMON_ PARENTS can be deserialised.
* test/Makefile.am: Updated for test_daemon.
* test/test_util_common. c:
- get_test_daemon_ binary( ): New function.
- file_line_count(): New function.
* test/test_util_common. h: TIMED_BLOCK(): New utility macro.
Preview Diff
1 | === modified file 'ChangeLog' |
2 | --- ChangeLog 2014-01-08 16:47:16 +0000 |
3 | +++ ChangeLog 2014-01-13 13:49:11 +0000 |
4 | @@ -1,3 +1,10 @@ |
5 | +2014-01-13 James Hunt <james.hunt@ubuntu.com> |
6 | + |
7 | + * init/tests/test_job_process.c: test_run_subreaper(): Separate the |
8 | + prctl(PR_SET_CHILD_SUBREAPER) test into a new function and only call |
9 | + if the running kernel supports that prctl. |
10 | + * test/test_util_common.c: get_kernel_version(): New function. |
11 | + |
12 | 2014-01-08 James Hunt <james.hunt@ubuntu.com> |
13 | |
14 | * init/man/init.5: Explain valid syntax for stanzas |
15 | @@ -36,6 +43,56 @@ |
16 | * init/man/init.5: Provide more detail on setuid and setgid stanzas |
17 | (debian bug#732127). |
18 | |
19 | +2013-12-12 James Hunt <james.hunt@ubuntu.com> |
20 | + |
21 | + * init/tests/data/upstart-1.12.json: New test data file. |
22 | + * test/test_daemon.c: New test utility. |
23 | + * init/Makefile.am: Add "upstart-1.12.json". |
24 | + * init/job.c: |
25 | + - Updated copyright. |
26 | + - job_deserialise(): Generalise logic to handle missing pids when |
27 | + upgrading from a version that does not support PROCESS_SECURITY and |
28 | + PROCESS_DAEMON_PARENT. |
29 | + * init/job_process.c: |
30 | + - Copyright and comments. |
31 | + - job_process_terminated(): Consider job ready when daemons parent |
32 | + exits, rather than when the requisite number of forks have been |
33 | + performed (based on lp:~vorlon/upstart/lp.530779-rough-draft) |
34 | + (LP: #530779). |
35 | + - job_process_trace_new(): Corrected comment header. |
36 | + - job_process_trace_new_child(): Don't consider job ready once |
37 | + requisite number of forks have occured any more. |
38 | + - job_process_trace_fork(): Save parent process. |
39 | + * init/process.c: |
40 | + - Updated copyright. |
41 | + - process_name(): Added PROCESS_DAEMON_PARENT for completeness. |
42 | + - process_from_name(): Added PROCESS_DAEMON_PARENT for completeness. |
43 | + - process_deserialise_all(): Generalise logic to handle missing pids |
44 | + when upgrading from a version that does not support PROCESS_SECURITY and |
45 | + PROCESS_DAEMON_PARENT. |
46 | + - process_type_enum_to_str(): Added PROCESS_DAEMON_PARENT for completeness. |
47 | + - process_type_str_to_enum(): Added PROCESS_DAEMON_PARENT for completeness. |
48 | + * init/process.h: Comments for ProcessType (which must be kept in order). |
49 | + * init/tests/test_job_process.c: |
50 | + - test_run(): New test: |
51 | + - "with daemon where parent waits for ultimate child before exiting" |
52 | + - test_spawn(): Remove temporary files. |
53 | + - test_kill(): Extra checks. |
54 | + - test_handler(): |
55 | + - Remove erroneous UPSTART_LOGDIR code - not used by this test. |
56 | + - Add daemon parent checks. |
57 | + * init/tests/test_state.c: |
58 | + - test_job_environ_upgrade(): Add additional checks to ensure that |
59 | + json not containing PROCESS_DAEMON_PARENT elements correctly deserialises |
60 | + into empty elements. |
61 | + - test_daemon_parent_state(): New test that checks a data file containing |
62 | + jobs with and without PROCESS_DAEMON_PARENTS can be deserialised. |
63 | + * test/Makefile.am: Updated for test_daemon. |
64 | + * test/test_util_common.c: |
65 | + - get_test_daemon_binary(): New function. |
66 | + - file_line_count(): New function. |
67 | + * test/test_util_common.h: TIMED_BLOCK(): New utility macro. |
68 | + |
69 | 2013-11-23 Steve Langasek <steve.langasek@ubuntu.com> |
70 | |
71 | * init/tests/test_state.c: fix test case to not assume SIGUSR1 == 10; |
72 | |
73 | === modified file 'init/Makefile.am' |
74 | --- init/Makefile.am 2013-11-12 14:00:36 +0000 |
75 | +++ init/Makefile.am 2014-01-13 13:49:11 +0000 |
76 | @@ -145,7 +145,8 @@ |
77 | $(TEST_DATA_DIR)/upstart-session2.json \ |
78 | $(TEST_DATA_DIR)/upstart-session-infinity.json \ |
79 | $(TEST_DATA_DIR)/upstart-1.9.json \ |
80 | - $(TEST_DATA_DIR)/upstart-1.11.json |
81 | + $(TEST_DATA_DIR)/upstart-1.11.json \ |
82 | + $(TEST_DATA_DIR)/upstart-1.12.json |
83 | |
84 | upstart_test_programs = \ |
85 | test_system \ |
86 | |
87 | === modified file 'init/job.c' |
88 | --- init/job.c 2013-08-21 11:07:36 +0000 |
89 | +++ init/job.c 2014-01-13 13:49:11 +0000 |
90 | @@ -2,7 +2,7 @@ |
91 | * |
92 | * job.c - core state machine of tasks and services |
93 | * |
94 | - * Copyright © 2010,2011 Canonical Ltd. |
95 | + * Copyright © 2010-2013 Canonical Ltd. |
96 | * Author: Scott James Remnant <scott@netsplit.com>. |
97 | * |
98 | * This program is free software; you can redistribute it and/or modify |
99 | @@ -2015,20 +2015,24 @@ |
100 | if (ret < 0) |
101 | goto error; |
102 | |
103 | - /* If we are missing one, we're probably importing from a |
104 | - * previous version that didn't include PROCESS_SECURITY. |
105 | - * Simply add the missing one. |
106 | + /* If we are missing entries, we're probably upgrading from a |
107 | + * previous version that didn't include PROCESS_SECURITY or |
108 | + * PROCESS_DAEMON_PARENT. So, set those as null entries. |
109 | + * |
110 | + * Downgrades are handled by simply ignoring pids beyond |
111 | + * PROCESS_LAST. |
112 | */ |
113 | - if (len == PROCESS_LAST - 1) { |
114 | + if (len < PROCESS_LAST) { |
115 | + int missing; |
116 | + |
117 | job->pid = nih_realloc (job->pid, job, sizeof (pid_t) * PROCESS_LAST); |
118 | |
119 | if (! job->pid) |
120 | goto error; |
121 | |
122 | - job->pid[PROCESS_LAST - 1] = 0; |
123 | - |
124 | - } else if (len != PROCESS_LAST) { |
125 | - goto error; |
126 | + for (missing = len; missing < PROCESS_LAST; missing++) { |
127 | + job->pid[missing] = 0; |
128 | + } |
129 | } |
130 | |
131 | if (! state_get_json_int_var_to_obj (json, job, trace_forks)) |
132 | @@ -2047,7 +2051,7 @@ |
133 | if (! state_check_json_type (json_logs, array)) |
134 | goto error; |
135 | |
136 | - for (int process = 0; process < PROCESS_LAST; process++) { |
137 | + for (size_t process = 0; process < PROCESS_LAST; process++) { |
138 | json_object *json_log; |
139 | |
140 | json_log = json_object_array_get_idx (json_logs, process); |
141 | @@ -2058,15 +2062,10 @@ |
142 | */ |
143 | job->log[process] = log_deserialise (job->log, json_log); |
144 | } else { |
145 | - /* If we are missing one, we're probably importing from a |
146 | - * previous version that didn't include PROCESS_SECURITY. |
147 | - * Simply ignore the missing one. |
148 | + /* Handle upgrade scenario where process entries are |
149 | + * missing from the JSON. |
150 | */ |
151 | - if (process == PROCESS_LAST - 1) { |
152 | - job->log[process] = NULL; |
153 | - } else { |
154 | - goto error; |
155 | - } |
156 | + job->log[process] = NULL; |
157 | } |
158 | } |
159 | |
160 | |
161 | === modified file 'init/job_process.c' |
162 | --- init/job_process.c 2013-11-03 02:54:03 +0000 |
163 | +++ init/job_process.c 2014-01-13 13:49:11 +0000 |
164 | @@ -2,7 +2,7 @@ |
165 | * |
166 | * job_process.c - job process handling |
167 | * |
168 | - * Copyright © 2011 Canonical Ltd. |
169 | + * Copyright © 2011-2013 Canonical Ltd. |
170 | * Author: Scott James Remnant <scott@netsplit.com>. |
171 | * |
172 | * This program is free software; you can redistribute it and/or modify |
173 | @@ -1583,6 +1583,11 @@ |
174 | || (job->state == JOB_POST_START) |
175 | || (job->state == JOB_PRE_STOP)); |
176 | |
177 | + /* If the final main process dies, we no longer |
178 | + * care if there's a daemon parent running. |
179 | + */ |
180 | + job->pid[PROCESS_DAEMON_PARENT] = 0; |
181 | + |
182 | /* We don't change the state if we're in post-start and there's |
183 | * a post-start process running, or if we're in pre-stop and |
184 | * there's a pre-stop process running; we wait for those to |
185 | @@ -1682,6 +1687,28 @@ |
186 | stop = TRUE; |
187 | } |
188 | break; |
189 | + case PROCESS_DAEMON_PARENT: |
190 | + nih_assert (job->state == JOB_SPAWNED); |
191 | + |
192 | + /* If we have a daemon parent, that can only mean that |
193 | + * this is no longer the main process. So we don't care |
194 | + * about exit status or anything else, we just either record |
195 | + * that the process is gone or, if we've seen all the forks |
196 | + * we expect, move the process straight to JOB_RUNNING. */ |
197 | + nih_assert (job->pid[PROCESS_MAIN] > 0); |
198 | + |
199 | + switch (job->class->expect) { |
200 | + case EXPECT_FORK: |
201 | + state = TRUE; |
202 | + break; |
203 | + case EXPECT_DAEMON: |
204 | + state = (job->trace_forks > 1) ? TRUE : FALSE; |
205 | + break; |
206 | + default: |
207 | + nih_assert_not_reached (); |
208 | + } |
209 | + |
210 | + break; |
211 | case PROCESS_PRE_START: |
212 | nih_assert (job->state == JOB_PRE_START); |
213 | |
214 | @@ -1744,7 +1771,7 @@ |
215 | job->kill_process = PROCESS_INVALID; |
216 | } |
217 | |
218 | - if (job->class->console == CONSOLE_LOG && job->log[process]) { |
219 | + if (job->class->console == CONSOLE_LOG && job->log[process] && process != PROCESS_DAEMON_PARENT) { |
220 | int ret; |
221 | |
222 | /* It is imperative that we free the log at this stage to ensure |
223 | @@ -1899,9 +1926,8 @@ |
224 | * @job: job that changed, |
225 | * @process: specific process. |
226 | * |
227 | - * This function is called when the traced @process attached to @job calls |
228 | - * its first exec(), still within the Upstart code before passing control |
229 | - * to the new executable. |
230 | + * This function is called when the traced @process attached to @job is |
231 | + * first forked. |
232 | * |
233 | * It sets the options for the trace so that forks and execs are reported. |
234 | **/ |
235 | @@ -1984,7 +2010,10 @@ |
236 | job->pid[process], strerror (errno)); |
237 | |
238 | job->trace_state = TRACE_NONE; |
239 | - job_change_state (job, job_next_state (job)); |
240 | + |
241 | + /* Note that we don't change state here, since we need |
242 | + * to wait for the ultimate parent to exit. |
243 | + */ |
244 | return; |
245 | } |
246 | |
247 | @@ -2073,6 +2102,12 @@ |
248 | job_name (job), process_name (process), |
249 | job->pid[process], strerror (errno)); |
250 | |
251 | + /* Record the pid of the parent process so we can check when it |
252 | + * exits. |
253 | + */ |
254 | + if (job->pid[PROCESS_DAEMON_PARENT] == 0) |
255 | + job->pid[PROCESS_DAEMON_PARENT] = job->pid[process]; |
256 | + |
257 | /* Update the process we're supervising which is about to get SIGSTOP |
258 | * so set the trace options to capture it. |
259 | */ |
260 | |
261 | === modified file 'init/process.c' |
262 | --- init/process.c 2013-05-23 17:16:03 +0000 |
263 | +++ init/process.c 2014-01-13 13:49:11 +0000 |
264 | @@ -2,7 +2,7 @@ |
265 | * |
266 | * process.c - process definition handling |
267 | * |
268 | - * Copyright © 2009 Canonical Ltd. |
269 | + * Copyright © 2009-2013 Canonical Ltd. |
270 | * Author: Scott James Remnant <scott@netsplit.com>. |
271 | * |
272 | * This program is free software; you can redistribute it and/or modify |
273 | @@ -88,6 +88,8 @@ |
274 | return N_("post-stop"); |
275 | case PROCESS_SECURITY: |
276 | return N_("security"); |
277 | + case PROCESS_DAEMON_PARENT: |
278 | + return N_("daemon-parent"); |
279 | default: |
280 | return NULL; |
281 | } |
282 | @@ -118,6 +120,8 @@ |
283 | return PROCESS_POST_STOP; |
284 | } else if (! strcmp (process, "security")) { |
285 | return PROCESS_SECURITY; |
286 | + } else if (! strcmp (process, "daemon-parent")) { |
287 | + return PROCESS_DAEMON_PARENT; |
288 | } else { |
289 | return -1; |
290 | } |
291 | @@ -262,6 +266,7 @@ |
292 | { |
293 | json_object *json_processes; |
294 | int i; |
295 | + int len; |
296 | |
297 | nih_assert (json); |
298 | nih_assert (parent); |
299 | @@ -275,14 +280,28 @@ |
300 | if (! state_check_json_type (json_processes, array)) |
301 | goto error; |
302 | |
303 | - for (i = 0; i < json_object_array_length (json_processes); i++) { |
304 | + len = json_object_array_length (json_processes); |
305 | + |
306 | + /* Note that downgrades (where we are attempting to restore |
307 | + * state from a newer init which contains additional processes) |
308 | + * are handled by simply ignoring any extra processes beyond |
309 | + * PROCESS_LAST. |
310 | + */ |
311 | + for (i = 0; i < PROCESS_LAST; i++) { |
312 | json_object *json_process; |
313 | |
314 | - nih_assert (i <= PROCESS_LAST); |
315 | - |
316 | json_process = json_object_array_get_idx (json_processes, i); |
317 | - if (! json_process) |
318 | - goto error; |
319 | + if (! json_process) { |
320 | + if (len < PROCESS_LAST) { |
321 | + /* Handle upgrade scenario where entries |
322 | + * may be missing. |
323 | + */ |
324 | + processes[i] = NULL; |
325 | + continue; |
326 | + } else { |
327 | + goto error; |
328 | + } |
329 | + } |
330 | |
331 | if (! state_check_json_type (json_process, object)) |
332 | goto error; |
333 | @@ -316,6 +335,7 @@ |
334 | state_enum_to_str (PROCESS_PRE_STOP, type); |
335 | state_enum_to_str (PROCESS_POST_STOP, type); |
336 | state_enum_to_str (PROCESS_SECURITY, type); |
337 | + state_enum_to_str (PROCESS_DAEMON_PARENT, type); |
338 | |
339 | return NULL; |
340 | } |
341 | @@ -341,6 +361,7 @@ |
342 | state_str_to_enum (PROCESS_PRE_STOP, type); |
343 | state_str_to_enum (PROCESS_POST_STOP, type); |
344 | state_str_to_enum (PROCESS_SECURITY, type); |
345 | + state_str_to_enum (PROCESS_DAEMON_PARENT, type); |
346 | |
347 | return -1; |
348 | } |
349 | |
350 | === modified file 'init/process.h' |
351 | --- init/process.h 2013-05-15 13:21:54 +0000 |
352 | +++ init/process.h 2014-01-13 13:49:11 +0000 |
353 | @@ -35,6 +35,11 @@ |
354 | * between an invalid ProcessType and the default value assigned to a |
355 | * ProcessType. It also cannot be zero since that would upset iterating |
356 | * through the (non-invalid) entries. |
357 | + * |
358 | + * XXX: Rules required to ensure correct stateful re-exec behaviour: |
359 | + * XXX: |
360 | + * XXX: - New process types *MUST* be added just before PROCESS_LAST. |
361 | + * XXX: - No ordering change for existing values is allowed. |
362 | **/ |
363 | typedef enum process_type { |
364 | /* initial value denoting no process */ |
365 | @@ -46,6 +51,7 @@ |
366 | PROCESS_PRE_STOP, |
367 | PROCESS_POST_STOP, |
368 | PROCESS_SECURITY, |
369 | + PROCESS_DAEMON_PARENT, |
370 | PROCESS_LAST, |
371 | } ProcessType; |
372 | |
373 | |
374 | === added file 'init/tests/data/upstart-1.12.json' |
375 | --- init/tests/data/upstart-1.12.json 1970-01-01 00:00:00 +0000 |
376 | +++ init/tests/data/upstart-1.12.json 2014-01-13 13:49:11 +0000 |
377 | @@ -0,0 +1,21708 @@ |
378 | +{ |
379 | + "job_classes" : [ |
380 | + { |
381 | + "setgid" : null, |
382 | + "deleted" : 0, |
383 | + "usage" : null, |
384 | + "chroot" : null, |
385 | + "author" : "Dmitrijs Ledkovs <dmitrijs.ledkovs@canonical.com>", |
386 | + "emits" : [], |
387 | + "process" : [ |
388 | + { |
389 | + "command" : "reload cups", |
390 | + "script" : 0 |
391 | + }, |
392 | + { |
393 | + "script" : 0, |
394 | + "command" : null |
395 | + }, |
396 | + { |
397 | + "script" : 0, |
398 | + "command" : null |
399 | + }, |
400 | + { |
401 | + "script" : 0, |
402 | + "command" : null |
403 | + }, |
404 | + { |
405 | + "command" : null, |
406 | + "script" : 0 |
407 | + }, |
408 | + { |
409 | + "command" : null, |
410 | + "script" : 0 |
411 | + }, |
412 | + { |
413 | + "script" : 0, |
414 | + "command" : null |
415 | + } |
416 | + ], |
417 | + "respawn" : 0, |
418 | + "description" : "Reload cups, upon starting avahi-daemon to make sure remote queues are populated", |
419 | + "chdir" : null, |
420 | + "kill_timeout" : 5, |
421 | + "expect" : "EXPECT_NONE", |
422 | + "apparmor_switch" : null, |
423 | + "oom_score_adj" : 0, |
424 | + "nice" : -21, |
425 | + "debug" : 0, |
426 | + "name" : "avahi-cups-reload", |
427 | + "setuid" : null, |
428 | + "normalexit" : [], |
429 | + "respawn_limit" : 10, |
430 | + "jobs" : [], |
431 | + "kill_signal" : 15, |
432 | + "task" : 1, |
433 | + "reload_signal" : 1, |
434 | + "session" : 0, |
435 | + "version" : null, |
436 | + "env" : [], |
437 | + "umask" : 18, |
438 | + "console" : "CONSOLE_LOG", |
439 | + "export" : [], |
440 | + "respawn_interval" : 5, |
441 | + "limits" : [ |
442 | + { |
443 | + "rlim_cur" : 0, |
444 | + "rlim_max" : 0 |
445 | + }, |
446 | + { |
447 | + "rlim_cur" : 0, |
448 | + "rlim_max" : 0 |
449 | + }, |
450 | + { |
451 | + "rlim_cur" : 0, |
452 | + "rlim_max" : 0 |
453 | + }, |
454 | + { |
455 | + "rlim_cur" : 0, |
456 | + "rlim_max" : 0 |
457 | + }, |
458 | + { |
459 | + "rlim_cur" : 0, |
460 | + "rlim_max" : 0 |
461 | + }, |
462 | + { |
463 | + "rlim_max" : 0, |
464 | + "rlim_cur" : 0 |
465 | + }, |
466 | + { |
467 | + "rlim_cur" : 0, |
468 | + "rlim_max" : 0 |
469 | + }, |
470 | + { |
471 | + "rlim_max" : 0, |
472 | + "rlim_cur" : 0 |
473 | + }, |
474 | + { |
475 | + "rlim_max" : 0, |
476 | + "rlim_cur" : 0 |
477 | + }, |
478 | + { |
479 | + "rlim_max" : 0, |
480 | + "rlim_cur" : 0 |
481 | + }, |
482 | + { |
483 | + "rlim_max" : 0, |
484 | + "rlim_cur" : 0 |
485 | + }, |
486 | + { |
487 | + "rlim_max" : 0, |
488 | + "rlim_cur" : 0 |
489 | + }, |
490 | + { |
491 | + "rlim_cur" : 0, |
492 | + "rlim_max" : 0 |
493 | + }, |
494 | + { |
495 | + "rlim_cur" : 0, |
496 | + "rlim_max" : 0 |
497 | + }, |
498 | + { |
499 | + "rlim_max" : 0, |
500 | + "rlim_cur" : 0 |
501 | + }, |
502 | + { |
503 | + "rlim_cur" : 0, |
504 | + "rlim_max" : 0 |
505 | + } |
506 | + ], |
507 | + "instance" : "", |
508 | + "start_on" : [ |
509 | + { |
510 | + "env" : [ |
511 | + "avahi-daemon" |
512 | + ], |
513 | + "value" : 0, |
514 | + "name" : "started", |
515 | + "type" : "EVENT_MATCH" |
516 | + } |
517 | + ], |
518 | + "path" : "/com/ubuntu/Upstart/jobs/avahi_2dcups_2dreload" |
519 | + }, |
520 | + { |
521 | + "version" : null, |
522 | + "env" : [], |
523 | + "umask" : 18, |
524 | + "respawn_interval" : 5, |
525 | + "limits" : [ |
526 | + { |
527 | + "rlim_cur" : 0, |
528 | + "rlim_max" : 0 |
529 | + }, |
530 | + { |
531 | + "rlim_cur" : 0, |
532 | + "rlim_max" : 0 |
533 | + }, |
534 | + { |
535 | + "rlim_cur" : 0, |
536 | + "rlim_max" : 0 |
537 | + }, |
538 | + { |
539 | + "rlim_cur" : 0, |
540 | + "rlim_max" : 0 |
541 | + }, |
542 | + { |
543 | + "rlim_max" : 0, |
544 | + "rlim_cur" : 0 |
545 | + }, |
546 | + { |
547 | + "rlim_cur" : 0, |
548 | + "rlim_max" : 0 |
549 | + }, |
550 | + { |
551 | + "rlim_cur" : 0, |
552 | + "rlim_max" : 0 |
553 | + }, |
554 | + { |
555 | + "rlim_max" : 0, |
556 | + "rlim_cur" : 0 |
557 | + }, |
558 | + { |
559 | + "rlim_cur" : 0, |
560 | + "rlim_max" : 0 |
561 | + }, |
562 | + { |
563 | + "rlim_cur" : 0, |
564 | + "rlim_max" : 0 |
565 | + }, |
566 | + { |
567 | + "rlim_cur" : 0, |
568 | + "rlim_max" : 0 |
569 | + }, |
570 | + { |
571 | + "rlim_max" : 0, |
572 | + "rlim_cur" : 0 |
573 | + }, |
574 | + { |
575 | + "rlim_max" : 0, |
576 | + "rlim_cur" : 0 |
577 | + }, |
578 | + { |
579 | + "rlim_cur" : 0, |
580 | + "rlim_max" : 0 |
581 | + }, |
582 | + { |
583 | + "rlim_max" : 0, |
584 | + "rlim_cur" : 0 |
585 | + }, |
586 | + { |
587 | + "rlim_cur" : 0, |
588 | + "rlim_max" : 0 |
589 | + } |
590 | + ], |
591 | + "instance" : "", |
592 | + "start_on" : [ |
593 | + { |
594 | + "name" : "filesystem", |
595 | + "value" : 0, |
596 | + "type" : "EVENT_MATCH" |
597 | + }, |
598 | + { |
599 | + "env" : [ |
600 | + "dbus" |
601 | + ], |
602 | + "value" : 0, |
603 | + "name" : "started", |
604 | + "type" : "EVENT_MATCH" |
605 | + }, |
606 | + { |
607 | + "type" : "EVENT_AND", |
608 | + "value" : 0 |
609 | + } |
610 | + ], |
611 | + "path" : "/com/ubuntu/Upstart/jobs/avahi_2ddaemon", |
612 | + "console" : "CONSOLE_LOG", |
613 | + "export" : [], |
614 | + "setuid" : null, |
615 | + "normalexit" : [], |
616 | + "oom_score_adj" : 0, |
617 | + "nice" : -21, |
618 | + "debug" : 0, |
619 | + "name" : "avahi-daemon", |
620 | + "kill_signal" : 15, |
621 | + "task" : 0, |
622 | + "reload_signal" : 1, |
623 | + "session" : 0, |
624 | + "respawn_limit" : 10, |
625 | + "jobs" : [ |
626 | + { |
627 | + "failed_process" : "PROCESS_INVALID", |
628 | + "stop_env" : [], |
629 | + "log" : [ |
630 | + { |
631 | + "path" : null |
632 | + }, |
633 | + { |
634 | + "path" : null |
635 | + }, |
636 | + { |
637 | + "path" : null |
638 | + }, |
639 | + { |
640 | + "path" : null |
641 | + }, |
642 | + { |
643 | + "path" : null |
644 | + }, |
645 | + { |
646 | + "path" : null |
647 | + }, |
648 | + { |
649 | + "path" : null |
650 | + } |
651 | + ], |
652 | + "name" : "", |
653 | + "exit_status" : 0, |
654 | + "trace_forks" : 2, |
655 | + "stop_on" : [ |
656 | + { |
657 | + "env" : [ |
658 | + "dbus" |
659 | + ], |
660 | + "value" : 0, |
661 | + "name" : "stopping", |
662 | + "type" : "EVENT_MATCH" |
663 | + } |
664 | + ], |
665 | + "trace_state" : "TRACE_NONE", |
666 | + "state" : "JOB_RUNNING", |
667 | + "start_env" : [], |
668 | + "kill_process" : "PROCESS_INVALID", |
669 | + "pid" : [ |
670 | + 806, |
671 | + 0, |
672 | + 0, |
673 | + 0, |
674 | + 0, |
675 | + 0, |
676 | + 0 |
677 | + ], |
678 | + "goal" : "JOB_START", |
679 | + "fds" : [], |
680 | + "env" : [ |
681 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
682 | + "TERM=linux", |
683 | + "JOB=dbus", |
684 | + "INSTANCE=", |
685 | + "UPSTART_EVENTS=filesystem started" |
686 | + ], |
687 | + "respawn_count" : 0, |
688 | + "respawn_time" : 0, |
689 | + "path" : "/com/ubuntu/Upstart/jobs/avahi_2ddaemon/_", |
690 | + "failed" : 0 |
691 | + } |
692 | + ], |
693 | + "kill_timeout" : 5, |
694 | + "expect" : "EXPECT_DAEMON", |
695 | + "process" : [ |
696 | + { |
697 | + "script" : 1, |
698 | + "command" : "opts=\"-D\"\n[ -e \"/etc/eucalyptus/avahi-daemon.conf\" ] && opts=\"${opts} -f /etc/eucalyptus/avahi-daemon.conf\"\nexec avahi-daemon ${opts}\n" |
699 | + }, |
700 | + { |
701 | + "command" : "/lib/init/apparmor-profile-load usr.sbin.avahi-daemon\n", |
702 | + "script" : 1 |
703 | + }, |
704 | + { |
705 | + "command" : null, |
706 | + "script" : 0 |
707 | + }, |
708 | + { |
709 | + "script" : 0, |
710 | + "command" : null |
711 | + }, |
712 | + { |
713 | + "command" : null, |
714 | + "script" : 0 |
715 | + }, |
716 | + { |
717 | + "command" : null, |
718 | + "script" : 0 |
719 | + }, |
720 | + { |
721 | + "command" : null, |
722 | + "script" : 0 |
723 | + } |
724 | + ], |
725 | + "chdir" : null, |
726 | + "respawn" : 1, |
727 | + "description" : "mDNS/DNS-SD daemon", |
728 | + "apparmor_switch" : null, |
729 | + "usage" : null, |
730 | + "chroot" : null, |
731 | + "author" : null, |
732 | + "deleted" : 0, |
733 | + "setgid" : null, |
734 | + "emits" : [], |
735 | + "stop_on" : [ |
736 | + { |
737 | + "type" : "EVENT_MATCH", |
738 | + "value" : 0, |
739 | + "name" : "stopping", |
740 | + "env" : [ |
741 | + "dbus" |
742 | + ] |
743 | + } |
744 | + ] |
745 | + }, |
746 | + { |
747 | + "version" : null, |
748 | + "umask" : 18, |
749 | + "env" : [], |
750 | + "limits" : [ |
751 | + { |
752 | + "rlim_cur" : 0, |
753 | + "rlim_max" : 0 |
754 | + }, |
755 | + { |
756 | + "rlim_cur" : 0, |
757 | + "rlim_max" : 0 |
758 | + }, |
759 | + { |
760 | + "rlim_cur" : 0, |
761 | + "rlim_max" : 0 |
762 | + }, |
763 | + { |
764 | + "rlim_cur" : 0, |
765 | + "rlim_max" : 0 |
766 | + }, |
767 | + { |
768 | + "rlim_max" : 0, |
769 | + "rlim_cur" : 0 |
770 | + }, |
771 | + { |
772 | + "rlim_cur" : 0, |
773 | + "rlim_max" : 0 |
774 | + }, |
775 | + { |
776 | + "rlim_cur" : 0, |
777 | + "rlim_max" : 0 |
778 | + }, |
779 | + { |
780 | + "rlim_max" : 0, |
781 | + "rlim_cur" : 0 |
782 | + }, |
783 | + { |
784 | + "rlim_max" : 0, |
785 | + "rlim_cur" : 0 |
786 | + }, |
787 | + { |
788 | + "rlim_max" : 0, |
789 | + "rlim_cur" : 0 |
790 | + }, |
791 | + { |
792 | + "rlim_max" : 0, |
793 | + "rlim_cur" : 0 |
794 | + }, |
795 | + { |
796 | + "rlim_cur" : 0, |
797 | + "rlim_max" : 0 |
798 | + }, |
799 | + { |
800 | + "rlim_cur" : 0, |
801 | + "rlim_max" : 0 |
802 | + }, |
803 | + { |
804 | + "rlim_max" : 0, |
805 | + "rlim_cur" : 0 |
806 | + }, |
807 | + { |
808 | + "rlim_cur" : 0, |
809 | + "rlim_max" : 0 |
810 | + }, |
811 | + { |
812 | + "rlim_cur" : 0, |
813 | + "rlim_max" : 0 |
814 | + } |
815 | + ], |
816 | + "start_on" : [ |
817 | + { |
818 | + "env" : [ |
819 | + "MOUNTPOINT=/sys/fs/cgroup" |
820 | + ], |
821 | + "value" : 0, |
822 | + "name" : "mounted", |
823 | + "type" : "EVENT_MATCH" |
824 | + } |
825 | + ], |
826 | + "instance" : "", |
827 | + "path" : "/com/ubuntu/Upstart/jobs/cgroup_2dlite", |
828 | + "respawn_interval" : 5, |
829 | + "export" : [], |
830 | + "console" : "CONSOLE_LOG", |
831 | + "normalexit" : [], |
832 | + "setuid" : null, |
833 | + "debug" : 0, |
834 | + "name" : "cgroup-lite", |
835 | + "nice" : -21, |
836 | + "oom_score_adj" : 0, |
837 | + "session" : 0, |
838 | + "reload_signal" : 1, |
839 | + "task" : 0, |
840 | + "kill_signal" : 15, |
841 | + "respawn_limit" : 10, |
842 | + "jobs" : [ |
843 | + { |
844 | + "exit_status" : 0, |
845 | + "name" : "", |
846 | + "stop_env" : [], |
847 | + "failed_process" : "PROCESS_INVALID", |
848 | + "log" : [ |
849 | + { |
850 | + "path" : null |
851 | + }, |
852 | + { |
853 | + "path" : null |
854 | + }, |
855 | + { |
856 | + "path" : null |
857 | + }, |
858 | + { |
859 | + "path" : null |
860 | + }, |
861 | + { |
862 | + "path" : null |
863 | + }, |
864 | + { |
865 | + "path" : null |
866 | + }, |
867 | + { |
868 | + "path" : null |
869 | + } |
870 | + ], |
871 | + "goal" : "JOB_START", |
872 | + "kill_process" : "PROCESS_INVALID", |
873 | + "start_env" : [], |
874 | + "pid" : [ |
875 | + 0, |
876 | + 0, |
877 | + 0, |
878 | + 0, |
879 | + 0, |
880 | + 0, |
881 | + 0 |
882 | + ], |
883 | + "trace_state" : "TRACE_NONE", |
884 | + "state" : "JOB_RUNNING", |
885 | + "trace_forks" : 0, |
886 | + "env" : [ |
887 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
888 | + "TERM=linux", |
889 | + "DEVICE=none", |
890 | + "MOUNTPOINT=/sys/fs/cgroup", |
891 | + "TYPE=tmpfs", |
892 | + "OPTIONS=optional,uid=0,gid=0,mode=0755,size=1024", |
893 | + "UPSTART_EVENTS=mounted" |
894 | + ], |
895 | + "fds" : [], |
896 | + "path" : "/com/ubuntu/Upstart/jobs/cgroup_2dlite/_", |
897 | + "failed" : 0, |
898 | + "respawn_count" : 0, |
899 | + "respawn_time" : 0 |
900 | + } |
901 | + ], |
902 | + "expect" : "EXPECT_NONE", |
903 | + "kill_timeout" : 5, |
904 | + "description" : "mount available cgroup filesystems", |
905 | + "respawn" : 0, |
906 | + "chdir" : null, |
907 | + "process" : [ |
908 | + { |
909 | + "command" : null, |
910 | + "script" : 0 |
911 | + }, |
912 | + { |
913 | + "script" : 1, |
914 | + "command" : "test -x /bin/cgroups-mount || { stop; exit 0; }\ntest -d /sys/fs/cgroup || { stop; exit 0; }\n/bin/cgroups-mount\n" |
915 | + }, |
916 | + { |
917 | + "command" : null, |
918 | + "script" : 0 |
919 | + }, |
920 | + { |
921 | + "script" : 0, |
922 | + "command" : null |
923 | + }, |
924 | + { |
925 | + "script" : 1, |
926 | + "command" : "if [ -x /bin/cgroups-umount ]\nthen\n\t/bin/cgroups-umount\nfi\n" |
927 | + }, |
928 | + { |
929 | + "script" : 0, |
930 | + "command" : null |
931 | + }, |
932 | + { |
933 | + "command" : null, |
934 | + "script" : 0 |
935 | + } |
936 | + ], |
937 | + "apparmor_switch" : null, |
938 | + "author" : "Serge Hallyn <serge.hallyn@canonical.com>", |
939 | + "usage" : null, |
940 | + "chroot" : null, |
941 | + "deleted" : 0, |
942 | + "setgid" : null, |
943 | + "emits" : [] |
944 | + }, |
945 | + { |
946 | + "emits" : [], |
947 | + "chroot" : null, |
948 | + "usage" : null, |
949 | + "author" : null, |
950 | + "deleted" : 0, |
951 | + "setgid" : null, |
952 | + "apparmor_switch" : null, |
953 | + "kill_timeout" : 5, |
954 | + "expect" : "EXPECT_NONE", |
955 | + "process" : [ |
956 | + { |
957 | + "script" : 1, |
958 | + "command" : "PID=$(status mountall 2>/dev/null | sed -e '/start\\/running,/{s/.*,[^0-9]*//;q};d')\n[ -n \"$PID\" ] && kill -USR1 $PID || true\n" |
959 | + }, |
960 | + { |
961 | + "script" : 0, |
962 | + "command" : null |
963 | + }, |
964 | + { |
965 | + "command" : null, |
966 | + "script" : 0 |
967 | + }, |
968 | + { |
969 | + "command" : null, |
970 | + "script" : 0 |
971 | + }, |
972 | + { |
973 | + "script" : 0, |
974 | + "command" : null |
975 | + }, |
976 | + { |
977 | + "command" : null, |
978 | + "script" : 0 |
979 | + }, |
980 | + { |
981 | + "script" : 0, |
982 | + "command" : null |
983 | + } |
984 | + ], |
985 | + "respawn" : 0, |
986 | + "description" : "Mount network filesystems", |
987 | + "chdir" : null, |
988 | + "kill_signal" : 15, |
989 | + "task" : 1, |
990 | + "reload_signal" : 1, |
991 | + "session" : 0, |
992 | + "jobs" : [], |
993 | + "respawn_limit" : 10, |
994 | + "normalexit" : [], |
995 | + "setuid" : null, |
996 | + "nice" : -21, |
997 | + "oom_score_adj" : 0, |
998 | + "name" : "mountall-net", |
999 | + "debug" : 0, |
1000 | + "respawn_interval" : 5, |
1001 | + "path" : "/com/ubuntu/Upstart/jobs/mountall_2dnet", |
1002 | + "limits" : [ |
1003 | + { |
1004 | + "rlim_max" : 0, |
1005 | + "rlim_cur" : 0 |
1006 | + }, |
1007 | + { |
1008 | + "rlim_max" : 0, |
1009 | + "rlim_cur" : 0 |
1010 | + }, |
1011 | + { |
1012 | + "rlim_max" : 0, |
1013 | + "rlim_cur" : 0 |
1014 | + }, |
1015 | + { |
1016 | + "rlim_cur" : 0, |
1017 | + "rlim_max" : 0 |
1018 | + }, |
1019 | + { |
1020 | + "rlim_cur" : 0, |
1021 | + "rlim_max" : 0 |
1022 | + }, |
1023 | + { |
1024 | + "rlim_max" : 0, |
1025 | + "rlim_cur" : 0 |
1026 | + }, |
1027 | + { |
1028 | + "rlim_max" : 0, |
1029 | + "rlim_cur" : 0 |
1030 | + }, |
1031 | + { |
1032 | + "rlim_max" : 0, |
1033 | + "rlim_cur" : 0 |
1034 | + }, |
1035 | + { |
1036 | + "rlim_max" : 0, |
1037 | + "rlim_cur" : 0 |
1038 | + }, |
1039 | + { |
1040 | + "rlim_max" : 0, |
1041 | + "rlim_cur" : 0 |
1042 | + }, |
1043 | + { |
1044 | + "rlim_max" : 0, |
1045 | + "rlim_cur" : 0 |
1046 | + }, |
1047 | + { |
1048 | + "rlim_cur" : 0, |
1049 | + "rlim_max" : 0 |
1050 | + }, |
1051 | + { |
1052 | + "rlim_max" : 0, |
1053 | + "rlim_cur" : 0 |
1054 | + }, |
1055 | + { |
1056 | + "rlim_max" : 0, |
1057 | + "rlim_cur" : 0 |
1058 | + }, |
1059 | + { |
1060 | + "rlim_cur" : 0, |
1061 | + "rlim_max" : 0 |
1062 | + }, |
1063 | + { |
1064 | + "rlim_cur" : 0, |
1065 | + "rlim_max" : 0 |
1066 | + } |
1067 | + ], |
1068 | + "instance" : "", |
1069 | + "start_on" : [ |
1070 | + { |
1071 | + "name" : "net-device-up", |
1072 | + "value" : 0, |
1073 | + "type" : "EVENT_MATCH" |
1074 | + } |
1075 | + ], |
1076 | + "console" : "CONSOLE_LOG", |
1077 | + "export" : [], |
1078 | + "umask" : 18, |
1079 | + "env" : [], |
1080 | + "version" : null |
1081 | + }, |
1082 | + { |
1083 | + "respawn_limit" : 10, |
1084 | + "jobs" : [ |
1085 | + { |
1086 | + "exit_status" : 0, |
1087 | + "name" : "", |
1088 | + "stop_env" : [], |
1089 | + "failed_process" : "PROCESS_INVALID", |
1090 | + "log" : [ |
1091 | + { |
1092 | + "path" : null |
1093 | + }, |
1094 | + { |
1095 | + "path" : null |
1096 | + }, |
1097 | + { |
1098 | + "path" : null |
1099 | + }, |
1100 | + { |
1101 | + "path" : null |
1102 | + }, |
1103 | + { |
1104 | + "path" : null |
1105 | + }, |
1106 | + { |
1107 | + "path" : null |
1108 | + }, |
1109 | + { |
1110 | + "path" : null |
1111 | + } |
1112 | + ], |
1113 | + "goal" : "JOB_START", |
1114 | + "kill_process" : "PROCESS_INVALID", |
1115 | + "start_env" : [], |
1116 | + "pid" : [ |
1117 | + 0, |
1118 | + 0, |
1119 | + 0, |
1120 | + 0, |
1121 | + 0, |
1122 | + 0, |
1123 | + 0 |
1124 | + ], |
1125 | + "trace_state" : "TRACE_NONE", |
1126 | + "state" : "JOB_RUNNING", |
1127 | + "trace_forks" : 0, |
1128 | + "env" : [ |
1129 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
1130 | + "TERM=linux", |
1131 | + "UPSTART_EVENTS=virtual-filesystems" |
1132 | + ], |
1133 | + "fds" : [], |
1134 | + "path" : "/com/ubuntu/Upstart/jobs/mountnfs_2dbootclean_2esh/_", |
1135 | + "failed" : 0, |
1136 | + "respawn_count" : 0, |
1137 | + "respawn_time" : 0 |
1138 | + } |
1139 | + ], |
1140 | + "session" : 0, |
1141 | + "reload_signal" : 1, |
1142 | + "kill_signal" : 15, |
1143 | + "task" : 0, |
1144 | + "debug" : 0, |
1145 | + "name" : "mountnfs-bootclean.sh", |
1146 | + "nice" : -21, |
1147 | + "oom_score_adj" : 0, |
1148 | + "normalexit" : [], |
1149 | + "setuid" : null, |
1150 | + "export" : [], |
1151 | + "console" : "CONSOLE_LOG", |
1152 | + "instance" : "", |
1153 | + "limits" : [ |
1154 | + { |
1155 | + "rlim_max" : 0, |
1156 | + "rlim_cur" : 0 |
1157 | + }, |
1158 | + { |
1159 | + "rlim_cur" : 0, |
1160 | + "rlim_max" : 0 |
1161 | + }, |
1162 | + { |
1163 | + "rlim_max" : 0, |
1164 | + "rlim_cur" : 0 |
1165 | + }, |
1166 | + { |
1167 | + "rlim_max" : 0, |
1168 | + "rlim_cur" : 0 |
1169 | + }, |
1170 | + { |
1171 | + "rlim_cur" : 0, |
1172 | + "rlim_max" : 0 |
1173 | + }, |
1174 | + { |
1175 | + "rlim_max" : 0, |
1176 | + "rlim_cur" : 0 |
1177 | + }, |
1178 | + { |
1179 | + "rlim_max" : 0, |
1180 | + "rlim_cur" : 0 |
1181 | + }, |
1182 | + { |
1183 | + "rlim_max" : 0, |
1184 | + "rlim_cur" : 0 |
1185 | + }, |
1186 | + { |
1187 | + "rlim_cur" : 0, |
1188 | + "rlim_max" : 0 |
1189 | + }, |
1190 | + { |
1191 | + "rlim_cur" : 0, |
1192 | + "rlim_max" : 0 |
1193 | + }, |
1194 | + { |
1195 | + "rlim_cur" : 0, |
1196 | + "rlim_max" : 0 |
1197 | + }, |
1198 | + { |
1199 | + "rlim_max" : 0, |
1200 | + "rlim_cur" : 0 |
1201 | + }, |
1202 | + { |
1203 | + "rlim_max" : 0, |
1204 | + "rlim_cur" : 0 |
1205 | + }, |
1206 | + { |
1207 | + "rlim_cur" : 0, |
1208 | + "rlim_max" : 0 |
1209 | + }, |
1210 | + { |
1211 | + "rlim_cur" : 0, |
1212 | + "rlim_max" : 0 |
1213 | + }, |
1214 | + { |
1215 | + "rlim_cur" : 0, |
1216 | + "rlim_max" : 0 |
1217 | + } |
1218 | + ], |
1219 | + "start_on" : [ |
1220 | + { |
1221 | + "value" : 0, |
1222 | + "name" : "virtual-filesystems", |
1223 | + "type" : "EVENT_MATCH" |
1224 | + } |
1225 | + ], |
1226 | + "path" : "/com/ubuntu/Upstart/jobs/mountnfs_2dbootclean_2esh", |
1227 | + "respawn_interval" : 5, |
1228 | + "version" : null, |
1229 | + "env" : [], |
1230 | + "umask" : 18, |
1231 | + "emits" : [], |
1232 | + "setgid" : null, |
1233 | + "deleted" : 0, |
1234 | + "usage" : null, |
1235 | + "chroot" : null, |
1236 | + "author" : null, |
1237 | + "apparmor_switch" : null, |
1238 | + "respawn" : 0, |
1239 | + "description" : null, |
1240 | + "chdir" : null, |
1241 | + "process" : [ |
1242 | + { |
1243 | + "script" : 0, |
1244 | + "command" : null |
1245 | + }, |
1246 | + { |
1247 | + "command" : null, |
1248 | + "script" : 0 |
1249 | + }, |
1250 | + { |
1251 | + "command" : null, |
1252 | + "script" : 0 |
1253 | + }, |
1254 | + { |
1255 | + "command" : null, |
1256 | + "script" : 0 |
1257 | + }, |
1258 | + { |
1259 | + "command" : null, |
1260 | + "script" : 0 |
1261 | + }, |
1262 | + { |
1263 | + "script" : 0, |
1264 | + "command" : null |
1265 | + }, |
1266 | + { |
1267 | + "script" : 0, |
1268 | + "command" : null |
1269 | + } |
1270 | + ], |
1271 | + "expect" : "EXPECT_NONE", |
1272 | + "kill_timeout" : 5 |
1273 | + }, |
1274 | + { |
1275 | + "process" : [ |
1276 | + { |
1277 | + "command" : "rm -f /etc/gshadow.lock /etc/shadow.lock /etc/passwd.lock /etc/group.lock", |
1278 | + "script" : 0 |
1279 | + }, |
1280 | + { |
1281 | + "command" : null, |
1282 | + "script" : 0 |
1283 | + }, |
1284 | + { |
1285 | + "command" : null, |
1286 | + "script" : 0 |
1287 | + }, |
1288 | + { |
1289 | + "script" : 0, |
1290 | + "command" : null |
1291 | + }, |
1292 | + { |
1293 | + "script" : 0, |
1294 | + "command" : null |
1295 | + }, |
1296 | + { |
1297 | + "script" : 0, |
1298 | + "command" : null |
1299 | + }, |
1300 | + { |
1301 | + "script" : 0, |
1302 | + "command" : null |
1303 | + } |
1304 | + ], |
1305 | + "description" : "Clear passwd locks", |
1306 | + "chdir" : null, |
1307 | + "respawn" : 0, |
1308 | + "kill_timeout" : 5, |
1309 | + "expect" : "EXPECT_NONE", |
1310 | + "apparmor_switch" : null, |
1311 | + "deleted" : 0, |
1312 | + "setgid" : null, |
1313 | + "usage" : null, |
1314 | + "chroot" : null, |
1315 | + "author" : null, |
1316 | + "emits" : [], |
1317 | + "umask" : 18, |
1318 | + "env" : [], |
1319 | + "version" : null, |
1320 | + "console" : "CONSOLE_LOG", |
1321 | + "export" : [], |
1322 | + "respawn_interval" : 5, |
1323 | + "path" : "/com/ubuntu/Upstart/jobs/passwd", |
1324 | + "start_on" : [ |
1325 | + { |
1326 | + "value" : 0, |
1327 | + "name" : "filesystem", |
1328 | + "type" : "EVENT_MATCH" |
1329 | + } |
1330 | + ], |
1331 | + "limits" : [ |
1332 | + { |
1333 | + "rlim_max" : 0, |
1334 | + "rlim_cur" : 0 |
1335 | + }, |
1336 | + { |
1337 | + "rlim_cur" : 0, |
1338 | + "rlim_max" : 0 |
1339 | + }, |
1340 | + { |
1341 | + "rlim_cur" : 0, |
1342 | + "rlim_max" : 0 |
1343 | + }, |
1344 | + { |
1345 | + "rlim_max" : 0, |
1346 | + "rlim_cur" : 0 |
1347 | + }, |
1348 | + { |
1349 | + "rlim_cur" : 0, |
1350 | + "rlim_max" : 0 |
1351 | + }, |
1352 | + { |
1353 | + "rlim_cur" : 0, |
1354 | + "rlim_max" : 0 |
1355 | + }, |
1356 | + { |
1357 | + "rlim_max" : 0, |
1358 | + "rlim_cur" : 0 |
1359 | + }, |
1360 | + { |
1361 | + "rlim_cur" : 0, |
1362 | + "rlim_max" : 0 |
1363 | + }, |
1364 | + { |
1365 | + "rlim_max" : 0, |
1366 | + "rlim_cur" : 0 |
1367 | + }, |
1368 | + { |
1369 | + "rlim_cur" : 0, |
1370 | + "rlim_max" : 0 |
1371 | + }, |
1372 | + { |
1373 | + "rlim_max" : 0, |
1374 | + "rlim_cur" : 0 |
1375 | + }, |
1376 | + { |
1377 | + "rlim_cur" : 0, |
1378 | + "rlim_max" : 0 |
1379 | + }, |
1380 | + { |
1381 | + "rlim_cur" : 0, |
1382 | + "rlim_max" : 0 |
1383 | + }, |
1384 | + { |
1385 | + "rlim_max" : 0, |
1386 | + "rlim_cur" : 0 |
1387 | + }, |
1388 | + { |
1389 | + "rlim_cur" : 0, |
1390 | + "rlim_max" : 0 |
1391 | + }, |
1392 | + { |
1393 | + "rlim_cur" : 0, |
1394 | + "rlim_max" : 0 |
1395 | + } |
1396 | + ], |
1397 | + "instance" : "", |
1398 | + "nice" : -21, |
1399 | + "oom_score_adj" : 0, |
1400 | + "name" : "passwd", |
1401 | + "debug" : 0, |
1402 | + "normalexit" : [], |
1403 | + "setuid" : null, |
1404 | + "jobs" : [], |
1405 | + "respawn_limit" : 10, |
1406 | + "task" : 1, |
1407 | + "kill_signal" : 15, |
1408 | + "session" : 0, |
1409 | + "reload_signal" : 1 |
1410 | + }, |
1411 | + { |
1412 | + "debug" : 0, |
1413 | + "name" : "rc", |
1414 | + "nice" : -21, |
1415 | + "oom_score_adj" : 0, |
1416 | + "setuid" : null, |
1417 | + "normalexit" : [], |
1418 | + "respawn_limit" : 10, |
1419 | + "jobs" : [], |
1420 | + "session" : 0, |
1421 | + "reload_signal" : 1, |
1422 | + "task" : 1, |
1423 | + "kill_signal" : 15, |
1424 | + "version" : null, |
1425 | + "umask" : 18, |
1426 | + "env" : [ |
1427 | + "INIT_VERBOSE" |
1428 | + ], |
1429 | + "export" : [ |
1430 | + "RUNLEVEL", |
1431 | + "PREVLEVEL" |
1432 | + ], |
1433 | + "console" : "CONSOLE_OUTPUT", |
1434 | + "limits" : [ |
1435 | + { |
1436 | + "rlim_max" : 0, |
1437 | + "rlim_cur" : 0 |
1438 | + }, |
1439 | + { |
1440 | + "rlim_max" : 0, |
1441 | + "rlim_cur" : 0 |
1442 | + }, |
1443 | + { |
1444 | + "rlim_cur" : 0, |
1445 | + "rlim_max" : 0 |
1446 | + }, |
1447 | + { |
1448 | + "rlim_max" : 0, |
1449 | + "rlim_cur" : 0 |
1450 | + }, |
1451 | + { |
1452 | + "rlim_max" : 0, |
1453 | + "rlim_cur" : 0 |
1454 | + }, |
1455 | + { |
1456 | + "rlim_cur" : 0, |
1457 | + "rlim_max" : 0 |
1458 | + }, |
1459 | + { |
1460 | + "rlim_max" : 0, |
1461 | + "rlim_cur" : 0 |
1462 | + }, |
1463 | + { |
1464 | + "rlim_max" : 0, |
1465 | + "rlim_cur" : 0 |
1466 | + }, |
1467 | + { |
1468 | + "rlim_max" : 0, |
1469 | + "rlim_cur" : 0 |
1470 | + }, |
1471 | + { |
1472 | + "rlim_max" : 0, |
1473 | + "rlim_cur" : 0 |
1474 | + }, |
1475 | + { |
1476 | + "rlim_cur" : 0, |
1477 | + "rlim_max" : 0 |
1478 | + }, |
1479 | + { |
1480 | + "rlim_max" : 0, |
1481 | + "rlim_cur" : 0 |
1482 | + }, |
1483 | + { |
1484 | + "rlim_max" : 0, |
1485 | + "rlim_cur" : 0 |
1486 | + }, |
1487 | + { |
1488 | + "rlim_max" : 0, |
1489 | + "rlim_cur" : 0 |
1490 | + }, |
1491 | + { |
1492 | + "rlim_cur" : 0, |
1493 | + "rlim_max" : 0 |
1494 | + }, |
1495 | + { |
1496 | + "rlim_cur" : 0, |
1497 | + "rlim_max" : 0 |
1498 | + } |
1499 | + ], |
1500 | + "start_on" : [ |
1501 | + { |
1502 | + "env" : [ |
1503 | + "[0123456]" |
1504 | + ], |
1505 | + "type" : "EVENT_MATCH", |
1506 | + "name" : "runlevel", |
1507 | + "value" : 0 |
1508 | + } |
1509 | + ], |
1510 | + "instance" : "", |
1511 | + "path" : "/com/ubuntu/Upstart/jobs/rc", |
1512 | + "respawn_interval" : 5, |
1513 | + "deleted" : 0, |
1514 | + "setgid" : null, |
1515 | + "usage" : null, |
1516 | + "author" : "Scott James Remnant <scott@netsplit.com>", |
1517 | + "chroot" : null, |
1518 | + "stop_on" : [ |
1519 | + { |
1520 | + "env" : [ |
1521 | + "[!$RUNLEVEL]" |
1522 | + ], |
1523 | + "type" : "EVENT_MATCH", |
1524 | + "value" : 0, |
1525 | + "name" : "runlevel" |
1526 | + } |
1527 | + ], |
1528 | + "emits" : [ |
1529 | + "deconfiguring-networking", |
1530 | + "unmounted-remote-filesystems" |
1531 | + ], |
1532 | + "chdir" : null, |
1533 | + "respawn" : 0, |
1534 | + "description" : "System V runlevel compatibility", |
1535 | + "process" : [ |
1536 | + { |
1537 | + "script" : 0, |
1538 | + "command" : "/etc/init.d/rc $RUNLEVEL" |
1539 | + }, |
1540 | + { |
1541 | + "script" : 0, |
1542 | + "command" : null |
1543 | + }, |
1544 | + { |
1545 | + "command" : null, |
1546 | + "script" : 0 |
1547 | + }, |
1548 | + { |
1549 | + "script" : 0, |
1550 | + "command" : null |
1551 | + }, |
1552 | + { |
1553 | + "script" : 0, |
1554 | + "command" : null |
1555 | + }, |
1556 | + { |
1557 | + "script" : 0, |
1558 | + "command" : null |
1559 | + }, |
1560 | + { |
1561 | + "script" : 0, |
1562 | + "command" : null |
1563 | + } |
1564 | + ], |
1565 | + "expect" : "EXPECT_NONE", |
1566 | + "kill_timeout" : 5, |
1567 | + "apparmor_switch" : null |
1568 | + }, |
1569 | + { |
1570 | + "apparmor_switch" : null, |
1571 | + "kill_timeout" : 5, |
1572 | + "expect" : "EXPECT_FORK", |
1573 | + "process" : [ |
1574 | + { |
1575 | + "command" : ". /etc/default/rsyslog\nexec rsyslogd $RSYSLOGD_OPTIONS\n", |
1576 | + "script" : 1 |
1577 | + }, |
1578 | + { |
1579 | + "command" : "/lib/init/apparmor-profile-load usr.sbin.rsyslogd\n", |
1580 | + "script" : 1 |
1581 | + }, |
1582 | + { |
1583 | + "command" : null, |
1584 | + "script" : 0 |
1585 | + }, |
1586 | + { |
1587 | + "command" : null, |
1588 | + "script" : 0 |
1589 | + }, |
1590 | + { |
1591 | + "command" : null, |
1592 | + "script" : 0 |
1593 | + }, |
1594 | + { |
1595 | + "command" : null, |
1596 | + "script" : 0 |
1597 | + }, |
1598 | + { |
1599 | + "script" : 0, |
1600 | + "command" : null |
1601 | + } |
1602 | + ], |
1603 | + "respawn" : 1, |
1604 | + "chdir" : null, |
1605 | + "description" : "system logging daemon", |
1606 | + "emits" : [], |
1607 | + "stop_on" : [ |
1608 | + { |
1609 | + "env" : [ |
1610 | + "[06]" |
1611 | + ], |
1612 | + "name" : "runlevel", |
1613 | + "value" : 0, |
1614 | + "type" : "EVENT_MATCH" |
1615 | + } |
1616 | + ], |
1617 | + "author" : null, |
1618 | + "usage" : null, |
1619 | + "chroot" : null, |
1620 | + "setgid" : null, |
1621 | + "deleted" : 0, |
1622 | + "respawn_interval" : 5, |
1623 | + "instance" : "", |
1624 | + "limits" : [ |
1625 | + { |
1626 | + "rlim_max" : 0, |
1627 | + "rlim_cur" : 0 |
1628 | + }, |
1629 | + { |
1630 | + "rlim_max" : 0, |
1631 | + "rlim_cur" : 0 |
1632 | + }, |
1633 | + { |
1634 | + "rlim_cur" : 0, |
1635 | + "rlim_max" : 0 |
1636 | + }, |
1637 | + { |
1638 | + "rlim_max" : 0, |
1639 | + "rlim_cur" : 0 |
1640 | + }, |
1641 | + { |
1642 | + "rlim_cur" : 0, |
1643 | + "rlim_max" : 0 |
1644 | + }, |
1645 | + { |
1646 | + "rlim_cur" : 0, |
1647 | + "rlim_max" : 0 |
1648 | + }, |
1649 | + { |
1650 | + "rlim_cur" : 0, |
1651 | + "rlim_max" : 0 |
1652 | + }, |
1653 | + { |
1654 | + "rlim_max" : 0, |
1655 | + "rlim_cur" : 0 |
1656 | + }, |
1657 | + { |
1658 | + "rlim_cur" : 0, |
1659 | + "rlim_max" : 0 |
1660 | + }, |
1661 | + { |
1662 | + "rlim_max" : 0, |
1663 | + "rlim_cur" : 0 |
1664 | + }, |
1665 | + { |
1666 | + "rlim_cur" : 0, |
1667 | + "rlim_max" : 0 |
1668 | + }, |
1669 | + { |
1670 | + "rlim_max" : 0, |
1671 | + "rlim_cur" : 0 |
1672 | + }, |
1673 | + { |
1674 | + "rlim_max" : 0, |
1675 | + "rlim_cur" : 0 |
1676 | + }, |
1677 | + { |
1678 | + "rlim_cur" : 0, |
1679 | + "rlim_max" : 0 |
1680 | + }, |
1681 | + { |
1682 | + "rlim_cur" : 0, |
1683 | + "rlim_max" : 0 |
1684 | + }, |
1685 | + { |
1686 | + "rlim_max" : 0, |
1687 | + "rlim_cur" : 0 |
1688 | + } |
1689 | + ], |
1690 | + "start_on" : [ |
1691 | + { |
1692 | + "name" : "filesystem", |
1693 | + "value" : 0, |
1694 | + "type" : "EVENT_MATCH" |
1695 | + } |
1696 | + ], |
1697 | + "path" : "/com/ubuntu/Upstart/jobs/rsyslog", |
1698 | + "console" : "CONSOLE_LOG", |
1699 | + "export" : [], |
1700 | + "version" : null, |
1701 | + "env" : [], |
1702 | + "umask" : 18, |
1703 | + "task" : 0, |
1704 | + "kill_signal" : 15, |
1705 | + "session" : 0, |
1706 | + "reload_signal" : 1, |
1707 | + "respawn_limit" : 10, |
1708 | + "jobs" : [ |
1709 | + { |
1710 | + "trace_forks" : 1, |
1711 | + "stop_on" : [ |
1712 | + { |
1713 | + "env" : [ |
1714 | + "[06]" |
1715 | + ], |
1716 | + "name" : "runlevel", |
1717 | + "value" : 0, |
1718 | + "type" : "EVENT_MATCH" |
1719 | + } |
1720 | + ], |
1721 | + "trace_state" : "TRACE_NONE", |
1722 | + "state" : "JOB_RUNNING", |
1723 | + "start_env" : [], |
1724 | + "kill_process" : "PROCESS_INVALID", |
1725 | + "pid" : [ |
1726 | + 747, |
1727 | + 0, |
1728 | + 0, |
1729 | + 0, |
1730 | + 0, |
1731 | + 0, |
1732 | + 0 |
1733 | + ], |
1734 | + "goal" : "JOB_START", |
1735 | + "stop_env" : [], |
1736 | + "failed_process" : "PROCESS_INVALID", |
1737 | + "log" : [ |
1738 | + { |
1739 | + "path" : null |
1740 | + }, |
1741 | + { |
1742 | + "path" : null |
1743 | + }, |
1744 | + { |
1745 | + "path" : null |
1746 | + }, |
1747 | + { |
1748 | + "path" : null |
1749 | + }, |
1750 | + { |
1751 | + "path" : null |
1752 | + }, |
1753 | + { |
1754 | + "path" : null |
1755 | + }, |
1756 | + { |
1757 | + "path" : null |
1758 | + } |
1759 | + ], |
1760 | + "name" : "", |
1761 | + "exit_status" : 0, |
1762 | + "respawn_count" : 0, |
1763 | + "respawn_time" : 0, |
1764 | + "path" : "/com/ubuntu/Upstart/jobs/rsyslog/_", |
1765 | + "failed" : 0, |
1766 | + "fds" : [], |
1767 | + "env" : [ |
1768 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
1769 | + "TERM=linux", |
1770 | + "UPSTART_EVENTS=filesystem" |
1771 | + ] |
1772 | + } |
1773 | + ], |
1774 | + "normalexit" : [], |
1775 | + "setuid" : null, |
1776 | + "oom_score_adj" : 0, |
1777 | + "nice" : -21, |
1778 | + "debug" : 0, |
1779 | + "name" : "rsyslog" |
1780 | + }, |
1781 | + { |
1782 | + "respawn" : 0, |
1783 | + "description" : "GNU Screen Cleanup", |
1784 | + "chdir" : null, |
1785 | + "process" : [ |
1786 | + { |
1787 | + "command" : "SCREENDIR=/var/run/screen\nif [ -L $SCREENDIR ] || [ ! -d $SCREENDIR ]; then\n\trm -f $SCREENDIR\n\tmkdir $SCREENDIR\n\tchown root:utmp $SCREENDIR\nfi\nfind $SCREENDIR -type p -delete\n# If the local admin has used dpkg-statoverride to install the screen\n# binary with different set[ug]id bits, change the permissions of\n# $SCREENDIR accordingly\nBINARYPERM=`stat -c%a /usr/bin/screen`\nif [ \"$BINARYPERM\" -ge 4000 ]; then\n\tchmod 0755 $SCREENDIR\nelif [ \"$BINARYPERM\" -ge 2000 ]; then\n\tchmod 0775 $SCREENDIR\nelse\n\tchmod 0777 $SCREENDIR\nfi\n", |
1788 | + "script" : 1 |
1789 | + }, |
1790 | + { |
1791 | + "script" : 0, |
1792 | + "command" : null |
1793 | + }, |
1794 | + { |
1795 | + "script" : 0, |
1796 | + "command" : null |
1797 | + }, |
1798 | + { |
1799 | + "script" : 0, |
1800 | + "command" : null |
1801 | + }, |
1802 | + { |
1803 | + "script" : 0, |
1804 | + "command" : null |
1805 | + }, |
1806 | + { |
1807 | + "script" : 0, |
1808 | + "command" : null |
1809 | + }, |
1810 | + { |
1811 | + "script" : 0, |
1812 | + "command" : null |
1813 | + } |
1814 | + ], |
1815 | + "expect" : "EXPECT_NONE", |
1816 | + "kill_timeout" : 5, |
1817 | + "apparmor_switch" : null, |
1818 | + "deleted" : 0, |
1819 | + "setgid" : null, |
1820 | + "author" : "Dustin Kirkland <kirkland@canonical.com>", |
1821 | + "usage" : null, |
1822 | + "chroot" : null, |
1823 | + "emits" : [], |
1824 | + "version" : null, |
1825 | + "umask" : 18, |
1826 | + "env" : [], |
1827 | + "export" : [], |
1828 | + "console" : "CONSOLE_LOG", |
1829 | + "start_on" : [ |
1830 | + { |
1831 | + "value" : 0, |
1832 | + "name" : "filesystem", |
1833 | + "type" : "EVENT_MATCH" |
1834 | + } |
1835 | + ], |
1836 | + "limits" : [ |
1837 | + { |
1838 | + "rlim_cur" : 0, |
1839 | + "rlim_max" : 0 |
1840 | + }, |
1841 | + { |
1842 | + "rlim_max" : 0, |
1843 | + "rlim_cur" : 0 |
1844 | + }, |
1845 | + { |
1846 | + "rlim_cur" : 0, |
1847 | + "rlim_max" : 0 |
1848 | + }, |
1849 | + { |
1850 | + "rlim_max" : 0, |
1851 | + "rlim_cur" : 0 |
1852 | + }, |
1853 | + { |
1854 | + "rlim_cur" : 0, |
1855 | + "rlim_max" : 0 |
1856 | + }, |
1857 | + { |
1858 | + "rlim_max" : 0, |
1859 | + "rlim_cur" : 0 |
1860 | + }, |
1861 | + { |
1862 | + "rlim_cur" : 0, |
1863 | + "rlim_max" : 0 |
1864 | + }, |
1865 | + { |
1866 | + "rlim_cur" : 0, |
1867 | + "rlim_max" : 0 |
1868 | + }, |
1869 | + { |
1870 | + "rlim_max" : 0, |
1871 | + "rlim_cur" : 0 |
1872 | + }, |
1873 | + { |
1874 | + "rlim_max" : 0, |
1875 | + "rlim_cur" : 0 |
1876 | + }, |
1877 | + { |
1878 | + "rlim_max" : 0, |
1879 | + "rlim_cur" : 0 |
1880 | + }, |
1881 | + { |
1882 | + "rlim_max" : 0, |
1883 | + "rlim_cur" : 0 |
1884 | + }, |
1885 | + { |
1886 | + "rlim_cur" : 0, |
1887 | + "rlim_max" : 0 |
1888 | + }, |
1889 | + { |
1890 | + "rlim_cur" : 0, |
1891 | + "rlim_max" : 0 |
1892 | + }, |
1893 | + { |
1894 | + "rlim_cur" : 0, |
1895 | + "rlim_max" : 0 |
1896 | + }, |
1897 | + { |
1898 | + "rlim_cur" : 0, |
1899 | + "rlim_max" : 0 |
1900 | + } |
1901 | + ], |
1902 | + "instance" : "", |
1903 | + "path" : "/com/ubuntu/Upstart/jobs/screen_2dcleanup", |
1904 | + "respawn_interval" : 5, |
1905 | + "debug" : 0, |
1906 | + "name" : "screen-cleanup", |
1907 | + "oom_score_adj" : 0, |
1908 | + "nice" : -21, |
1909 | + "normalexit" : [], |
1910 | + "setuid" : null, |
1911 | + "respawn_limit" : 10, |
1912 | + "jobs" : [], |
1913 | + "session" : 0, |
1914 | + "reload_signal" : 1, |
1915 | + "kill_signal" : 15, |
1916 | + "task" : 1 |
1917 | + }, |
1918 | + { |
1919 | + "emits" : [], |
1920 | + "setgid" : null, |
1921 | + "deleted" : 0, |
1922 | + "author" : "Steve Langasek <steve.langasek@ubuntu.com>", |
1923 | + "usage" : null, |
1924 | + "chroot" : null, |
1925 | + "apparmor_switch" : null, |
1926 | + "chdir" : null, |
1927 | + "respawn" : 0, |
1928 | + "description" : "startpar bridge for notification of upstart job start/stop", |
1929 | + "process" : [ |
1930 | + { |
1931 | + "command" : "startpar-upstart-inject \"$JOB\" \"$INSTANCE\" \"$UPSTART_EVENTS\"", |
1932 | + "script" : 0 |
1933 | + }, |
1934 | + { |
1935 | + "command" : null, |
1936 | + "script" : 0 |
1937 | + }, |
1938 | + { |
1939 | + "command" : null, |
1940 | + "script" : 0 |
1941 | + }, |
1942 | + { |
1943 | + "command" : null, |
1944 | + "script" : 0 |
1945 | + }, |
1946 | + { |
1947 | + "command" : null, |
1948 | + "script" : 0 |
1949 | + }, |
1950 | + { |
1951 | + "command" : null, |
1952 | + "script" : 0 |
1953 | + }, |
1954 | + { |
1955 | + "command" : null, |
1956 | + "script" : 0 |
1957 | + } |
1958 | + ], |
1959 | + "expect" : "EXPECT_NONE", |
1960 | + "kill_timeout" : 5, |
1961 | + "jobs" : [], |
1962 | + "respawn_limit" : 10, |
1963 | + "session" : 0, |
1964 | + "reload_signal" : 1, |
1965 | + "kill_signal" : 15, |
1966 | + "task" : 1, |
1967 | + "name" : "startpar-bridge", |
1968 | + "debug" : 0, |
1969 | + "nice" : -21, |
1970 | + "oom_score_adj" : 0, |
1971 | + "normalexit" : [], |
1972 | + "setuid" : null, |
1973 | + "export" : [], |
1974 | + "console" : "CONSOLE_LOG", |
1975 | + "path" : "/com/ubuntu/Upstart/jobs/startpar_2dbridge", |
1976 | + "instance" : "$JOB-$INSTANCE-$UPSTART_EVENTS", |
1977 | + "limits" : [ |
1978 | + { |
1979 | + "rlim_cur" : 0, |
1980 | + "rlim_max" : 0 |
1981 | + }, |
1982 | + { |
1983 | + "rlim_cur" : 0, |
1984 | + "rlim_max" : 0 |
1985 | + }, |
1986 | + { |
1987 | + "rlim_max" : 0, |
1988 | + "rlim_cur" : 0 |
1989 | + }, |
1990 | + { |
1991 | + "rlim_max" : 0, |
1992 | + "rlim_cur" : 0 |
1993 | + }, |
1994 | + { |
1995 | + "rlim_cur" : 0, |
1996 | + "rlim_max" : 0 |
1997 | + }, |
1998 | + { |
1999 | + "rlim_cur" : 0, |
2000 | + "rlim_max" : 0 |
2001 | + }, |
2002 | + { |
2003 | + "rlim_cur" : 0, |
2004 | + "rlim_max" : 0 |
2005 | + }, |
2006 | + { |
2007 | + "rlim_cur" : 0, |
2008 | + "rlim_max" : 0 |
2009 | + }, |
2010 | + { |
2011 | + "rlim_cur" : 0, |
2012 | + "rlim_max" : 0 |
2013 | + }, |
2014 | + { |
2015 | + "rlim_cur" : 0, |
2016 | + "rlim_max" : 0 |
2017 | + }, |
2018 | + { |
2019 | + "rlim_cur" : 0, |
2020 | + "rlim_max" : 0 |
2021 | + }, |
2022 | + { |
2023 | + "rlim_cur" : 0, |
2024 | + "rlim_max" : 0 |
2025 | + }, |
2026 | + { |
2027 | + "rlim_max" : 0, |
2028 | + "rlim_cur" : 0 |
2029 | + }, |
2030 | + { |
2031 | + "rlim_cur" : 0, |
2032 | + "rlim_max" : 0 |
2033 | + }, |
2034 | + { |
2035 | + "rlim_cur" : 0, |
2036 | + "rlim_max" : 0 |
2037 | + }, |
2038 | + { |
2039 | + "rlim_cur" : 0, |
2040 | + "rlim_max" : 0 |
2041 | + } |
2042 | + ], |
2043 | + "start_on" : [ |
2044 | + { |
2045 | + "env" : [ |
2046 | + "JOB!=startpar-bridge" |
2047 | + ], |
2048 | + "name" : "started", |
2049 | + "value" : 0, |
2050 | + "type" : "EVENT_MATCH" |
2051 | + }, |
2052 | + { |
2053 | + "env" : [ |
2054 | + "JOB!=startpar-bridge" |
2055 | + ], |
2056 | + "name" : "stopped", |
2057 | + "value" : 0, |
2058 | + "type" : "EVENT_MATCH" |
2059 | + }, |
2060 | + { |
2061 | + "value" : 0, |
2062 | + "type" : "EVENT_OR" |
2063 | + } |
2064 | + ], |
2065 | + "respawn_interval" : 5, |
2066 | + "env" : [], |
2067 | + "umask" : 18, |
2068 | + "version" : null |
2069 | + }, |
2070 | + { |
2071 | + "apparmor_switch" : null, |
2072 | + "process" : [ |
2073 | + { |
2074 | + "script" : 0, |
2075 | + "command" : "/home/james/src/c/bin/test_daemon --daemon --debug --post-fork-child-wait-file /tmp/wait" |
2076 | + }, |
2077 | + { |
2078 | + "script" : 0, |
2079 | + "command" : null |
2080 | + }, |
2081 | + { |
2082 | + "command" : null, |
2083 | + "script" : 0 |
2084 | + }, |
2085 | + { |
2086 | + "command" : null, |
2087 | + "script" : 0 |
2088 | + }, |
2089 | + { |
2090 | + "script" : 0, |
2091 | + "command" : null |
2092 | + }, |
2093 | + { |
2094 | + "script" : 0, |
2095 | + "command" : null |
2096 | + }, |
2097 | + { |
2098 | + "command" : null, |
2099 | + "script" : 0 |
2100 | + } |
2101 | + ], |
2102 | + "description" : null, |
2103 | + "chdir" : null, |
2104 | + "respawn" : 0, |
2105 | + "kill_timeout" : 5, |
2106 | + "expect" : "EXPECT_DAEMON", |
2107 | + "emits" : [], |
2108 | + "setgid" : null, |
2109 | + "deleted" : 0, |
2110 | + "usage" : null, |
2111 | + "author" : null, |
2112 | + "chroot" : null, |
2113 | + "console" : "CONSOLE_LOG", |
2114 | + "export" : [], |
2115 | + "respawn_interval" : 5, |
2116 | + "limits" : [ |
2117 | + { |
2118 | + "rlim_max" : 0, |
2119 | + "rlim_cur" : 0 |
2120 | + }, |
2121 | + { |
2122 | + "rlim_max" : 0, |
2123 | + "rlim_cur" : 0 |
2124 | + }, |
2125 | + { |
2126 | + "rlim_cur" : 0, |
2127 | + "rlim_max" : 0 |
2128 | + }, |
2129 | + { |
2130 | + "rlim_cur" : 0, |
2131 | + "rlim_max" : 0 |
2132 | + }, |
2133 | + { |
2134 | + "rlim_cur" : 0, |
2135 | + "rlim_max" : 0 |
2136 | + }, |
2137 | + { |
2138 | + "rlim_cur" : 0, |
2139 | + "rlim_max" : 0 |
2140 | + }, |
2141 | + { |
2142 | + "rlim_max" : 0, |
2143 | + "rlim_cur" : 0 |
2144 | + }, |
2145 | + { |
2146 | + "rlim_cur" : 0, |
2147 | + "rlim_max" : 0 |
2148 | + }, |
2149 | + { |
2150 | + "rlim_cur" : 0, |
2151 | + "rlim_max" : 0 |
2152 | + }, |
2153 | + { |
2154 | + "rlim_max" : 0, |
2155 | + "rlim_cur" : 0 |
2156 | + }, |
2157 | + { |
2158 | + "rlim_max" : 0, |
2159 | + "rlim_cur" : 0 |
2160 | + }, |
2161 | + { |
2162 | + "rlim_max" : 0, |
2163 | + "rlim_cur" : 0 |
2164 | + }, |
2165 | + { |
2166 | + "rlim_max" : 0, |
2167 | + "rlim_cur" : 0 |
2168 | + }, |
2169 | + { |
2170 | + "rlim_max" : 0, |
2171 | + "rlim_cur" : 0 |
2172 | + }, |
2173 | + { |
2174 | + "rlim_cur" : 0, |
2175 | + "rlim_max" : 0 |
2176 | + }, |
2177 | + { |
2178 | + "rlim_max" : 0, |
2179 | + "rlim_cur" : 0 |
2180 | + } |
2181 | + ], |
2182 | + "start_on" : [ |
2183 | + { |
2184 | + "name" : "foo", |
2185 | + "value" : 0, |
2186 | + "type" : "EVENT_MATCH" |
2187 | + } |
2188 | + ], |
2189 | + "instance" : "", |
2190 | + "path" : "/com/ubuntu/Upstart/jobs/test_2ddaemon_2d2", |
2191 | + "version" : null, |
2192 | + "env" : [], |
2193 | + "umask" : 18, |
2194 | + "respawn_limit" : 10, |
2195 | + "jobs" : [ |
2196 | + { |
2197 | + "fds" : [], |
2198 | + "env" : [ |
2199 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
2200 | + "TERM=linux", |
2201 | + "UPSTART_EVENTS=foo" |
2202 | + ], |
2203 | + "blocking" : [ |
2204 | + { |
2205 | + "data" : { |
2206 | + "index" : 3 |
2207 | + }, |
2208 | + "type" : "BLOCKED_EVENT" |
2209 | + } |
2210 | + ], |
2211 | + "respawn_count" : 0, |
2212 | + "respawn_time" : 0, |
2213 | + "path" : "/com/ubuntu/Upstart/jobs/test_2ddaemon_2d2/_", |
2214 | + "failed" : 0, |
2215 | + "stop_env" : [], |
2216 | + "failed_process" : "PROCESS_INVALID", |
2217 | + "log" : [ |
2218 | + { |
2219 | + "uid" : 0, |
2220 | + "remote_closed" : 0, |
2221 | + "detached" : 0, |
2222 | + "path" : "/var/log/upstart/test-daemon-2.log", |
2223 | + "fd" : 9, |
2224 | + "open_errno" : 9, |
2225 | + "io_watch_fd" : 15 |
2226 | + }, |
2227 | + { |
2228 | + "path" : null |
2229 | + }, |
2230 | + { |
2231 | + "path" : null |
2232 | + }, |
2233 | + { |
2234 | + "path" : null |
2235 | + }, |
2236 | + { |
2237 | + "path" : null |
2238 | + }, |
2239 | + { |
2240 | + "path" : null |
2241 | + }, |
2242 | + { |
2243 | + "path" : null |
2244 | + } |
2245 | + ], |
2246 | + "name" : "", |
2247 | + "exit_status" : 0, |
2248 | + "trace_forks" : 1, |
2249 | + "trace_state" : "TRACE_NORMAL", |
2250 | + "state" : "JOB_SPAWNED", |
2251 | + "pid" : [ |
2252 | + 1910, |
2253 | + 0, |
2254 | + 0, |
2255 | + 0, |
2256 | + 0, |
2257 | + 0, |
2258 | + 0 |
2259 | + ], |
2260 | + "kill_process" : "PROCESS_INVALID", |
2261 | + "start_env" : [], |
2262 | + "goal" : "JOB_START" |
2263 | + } |
2264 | + ], |
2265 | + "kill_signal" : 15, |
2266 | + "task" : 0, |
2267 | + "session" : 0, |
2268 | + "reload_signal" : 1, |
2269 | + "oom_score_adj" : 0, |
2270 | + "nice" : -21, |
2271 | + "debug" : 0, |
2272 | + "name" : "test-daemon-2", |
2273 | + "setuid" : null, |
2274 | + "normalexit" : [] |
2275 | + }, |
2276 | + { |
2277 | + "version" : null, |
2278 | + "umask" : 18, |
2279 | + "env" : [], |
2280 | + "respawn_interval" : 5, |
2281 | + "limits" : [ |
2282 | + { |
2283 | + "rlim_cur" : 0, |
2284 | + "rlim_max" : 0 |
2285 | + }, |
2286 | + { |
2287 | + "rlim_cur" : 0, |
2288 | + "rlim_max" : 0 |
2289 | + }, |
2290 | + { |
2291 | + "rlim_cur" : 0, |
2292 | + "rlim_max" : 0 |
2293 | + }, |
2294 | + { |
2295 | + "rlim_cur" : 0, |
2296 | + "rlim_max" : 0 |
2297 | + }, |
2298 | + { |
2299 | + "rlim_max" : 0, |
2300 | + "rlim_cur" : 0 |
2301 | + }, |
2302 | + { |
2303 | + "rlim_max" : 0, |
2304 | + "rlim_cur" : 0 |
2305 | + }, |
2306 | + { |
2307 | + "rlim_cur" : 0, |
2308 | + "rlim_max" : 0 |
2309 | + }, |
2310 | + { |
2311 | + "rlim_max" : 0, |
2312 | + "rlim_cur" : 0 |
2313 | + }, |
2314 | + { |
2315 | + "rlim_max" : 0, |
2316 | + "rlim_cur" : 0 |
2317 | + }, |
2318 | + { |
2319 | + "rlim_cur" : 0, |
2320 | + "rlim_max" : 0 |
2321 | + }, |
2322 | + { |
2323 | + "rlim_max" : 0, |
2324 | + "rlim_cur" : 0 |
2325 | + }, |
2326 | + { |
2327 | + "rlim_cur" : 0, |
2328 | + "rlim_max" : 0 |
2329 | + }, |
2330 | + { |
2331 | + "rlim_max" : 0, |
2332 | + "rlim_cur" : 0 |
2333 | + }, |
2334 | + { |
2335 | + "rlim_max" : 0, |
2336 | + "rlim_cur" : 0 |
2337 | + }, |
2338 | + { |
2339 | + "rlim_cur" : 0, |
2340 | + "rlim_max" : 0 |
2341 | + }, |
2342 | + { |
2343 | + "rlim_cur" : 0, |
2344 | + "rlim_max" : 0 |
2345 | + } |
2346 | + ], |
2347 | + "start_on" : [ |
2348 | + { |
2349 | + "name" : "runlevel", |
2350 | + "value" : 0, |
2351 | + "type" : "EVENT_MATCH", |
2352 | + "env" : [ |
2353 | + "[23]" |
2354 | + ] |
2355 | + }, |
2356 | + { |
2357 | + "value" : 0, |
2358 | + "name" : "not-container", |
2359 | + "type" : "EVENT_MATCH" |
2360 | + }, |
2361 | + { |
2362 | + "type" : "EVENT_MATCH", |
2363 | + "name" : "container", |
2364 | + "value" : 0, |
2365 | + "env" : [ |
2366 | + "CONTAINER=lxc" |
2367 | + ] |
2368 | + }, |
2369 | + { |
2370 | + "value" : 0, |
2371 | + "type" : "EVENT_OR" |
2372 | + }, |
2373 | + { |
2374 | + "env" : [ |
2375 | + "CONTAINER=lxc-libvirt" |
2376 | + ], |
2377 | + "type" : "EVENT_MATCH", |
2378 | + "value" : 0, |
2379 | + "name" : "container" |
2380 | + }, |
2381 | + { |
2382 | + "type" : "EVENT_OR", |
2383 | + "value" : 0 |
2384 | + }, |
2385 | + { |
2386 | + "value" : 0, |
2387 | + "type" : "EVENT_AND" |
2388 | + } |
2389 | + ], |
2390 | + "instance" : "", |
2391 | + "path" : "/com/ubuntu/Upstart/jobs/tty4", |
2392 | + "console" : "CONSOLE_LOG", |
2393 | + "export" : [], |
2394 | + "setuid" : null, |
2395 | + "normalexit" : [], |
2396 | + "oom_score_adj" : 0, |
2397 | + "nice" : -21, |
2398 | + "debug" : 0, |
2399 | + "name" : "tty4", |
2400 | + "task" : 0, |
2401 | + "kill_signal" : 15, |
2402 | + "reload_signal" : 1, |
2403 | + "session" : 0, |
2404 | + "respawn_limit" : 10, |
2405 | + "jobs" : [ |
2406 | + { |
2407 | + "respawn_count" : 0, |
2408 | + "respawn_time" : 0, |
2409 | + "failed" : 0, |
2410 | + "path" : "/com/ubuntu/Upstart/jobs/tty4/_", |
2411 | + "fds" : [], |
2412 | + "env" : [ |
2413 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
2414 | + "TERM=linux", |
2415 | + "RUNLEVEL=2", |
2416 | + "PREVLEVEL=N", |
2417 | + "UPSTART_EVENTS=runlevel not-container" |
2418 | + ], |
2419 | + "stop_on" : [ |
2420 | + { |
2421 | + "env" : [ |
2422 | + "[!23]" |
2423 | + ], |
2424 | + "type" : "EVENT_MATCH", |
2425 | + "value" : 0, |
2426 | + "name" : "runlevel" |
2427 | + } |
2428 | + ], |
2429 | + "trace_forks" : 0, |
2430 | + "state" : "JOB_RUNNING", |
2431 | + "trace_state" : "TRACE_NONE", |
2432 | + "pid" : [ |
2433 | + 984, |
2434 | + 0, |
2435 | + 0, |
2436 | + 0, |
2437 | + 0, |
2438 | + 0, |
2439 | + 0 |
2440 | + ], |
2441 | + "kill_process" : "PROCESS_INVALID", |
2442 | + "start_env" : [], |
2443 | + "goal" : "JOB_START", |
2444 | + "log" : [ |
2445 | + { |
2446 | + "path" : null |
2447 | + }, |
2448 | + { |
2449 | + "path" : null |
2450 | + }, |
2451 | + { |
2452 | + "path" : null |
2453 | + }, |
2454 | + { |
2455 | + "path" : null |
2456 | + }, |
2457 | + { |
2458 | + "path" : null |
2459 | + }, |
2460 | + { |
2461 | + "path" : null |
2462 | + }, |
2463 | + { |
2464 | + "path" : null |
2465 | + } |
2466 | + ], |
2467 | + "failed_process" : "PROCESS_INVALID", |
2468 | + "stop_env" : [], |
2469 | + "name" : "", |
2470 | + "exit_status" : 0 |
2471 | + } |
2472 | + ], |
2473 | + "kill_timeout" : 5, |
2474 | + "expect" : "EXPECT_NONE", |
2475 | + "process" : [ |
2476 | + { |
2477 | + "script" : 0, |
2478 | + "command" : "/sbin/getty -8 38400 tty4" |
2479 | + }, |
2480 | + { |
2481 | + "script" : 0, |
2482 | + "command" : null |
2483 | + }, |
2484 | + { |
2485 | + "command" : null, |
2486 | + "script" : 0 |
2487 | + }, |
2488 | + { |
2489 | + "command" : null, |
2490 | + "script" : 0 |
2491 | + }, |
2492 | + { |
2493 | + "command" : null, |
2494 | + "script" : 0 |
2495 | + }, |
2496 | + { |
2497 | + "command" : null, |
2498 | + "script" : 0 |
2499 | + }, |
2500 | + { |
2501 | + "script" : 0, |
2502 | + "command" : null |
2503 | + } |
2504 | + ], |
2505 | + "chdir" : null, |
2506 | + "description" : null, |
2507 | + "respawn" : 1, |
2508 | + "apparmor_switch" : null, |
2509 | + "author" : null, |
2510 | + "usage" : null, |
2511 | + "chroot" : null, |
2512 | + "deleted" : 0, |
2513 | + "setgid" : null, |
2514 | + "emits" : [], |
2515 | + "stop_on" : [ |
2516 | + { |
2517 | + "value" : 0, |
2518 | + "name" : "runlevel", |
2519 | + "type" : "EVENT_MATCH", |
2520 | + "env" : [ |
2521 | + "[!23]" |
2522 | + ] |
2523 | + } |
2524 | + ] |
2525 | + }, |
2526 | + { |
2527 | + "apparmor_switch" : null, |
2528 | + "process" : [ |
2529 | + { |
2530 | + "command" : "/lib/systemd/systemd-udevd --daemon", |
2531 | + "script" : 0 |
2532 | + }, |
2533 | + { |
2534 | + "command" : null, |
2535 | + "script" : 0 |
2536 | + }, |
2537 | + { |
2538 | + "script" : 0, |
2539 | + "command" : null |
2540 | + }, |
2541 | + { |
2542 | + "script" : 0, |
2543 | + "command" : null |
2544 | + }, |
2545 | + { |
2546 | + "command" : null, |
2547 | + "script" : 0 |
2548 | + }, |
2549 | + { |
2550 | + "script" : 0, |
2551 | + "command" : null |
2552 | + }, |
2553 | + { |
2554 | + "command" : null, |
2555 | + "script" : 0 |
2556 | + } |
2557 | + ], |
2558 | + "chdir" : null, |
2559 | + "description" : "device node and kernel event manager", |
2560 | + "respawn" : 1, |
2561 | + "kill_timeout" : 5, |
2562 | + "expect" : "EXPECT_FORK", |
2563 | + "stop_on" : [ |
2564 | + { |
2565 | + "value" : 0, |
2566 | + "name" : "runlevel", |
2567 | + "type" : "EVENT_MATCH", |
2568 | + "env" : [ |
2569 | + "[06]" |
2570 | + ] |
2571 | + } |
2572 | + ], |
2573 | + "emits" : [], |
2574 | + "setgid" : null, |
2575 | + "deleted" : 0, |
2576 | + "usage" : null, |
2577 | + "chroot" : null, |
2578 | + "author" : null, |
2579 | + "console" : "CONSOLE_LOG", |
2580 | + "export" : [], |
2581 | + "respawn_interval" : 5, |
2582 | + "path" : "/com/ubuntu/Upstart/jobs/udev", |
2583 | + "start_on" : [ |
2584 | + { |
2585 | + "name" : "virtual-filesystems", |
2586 | + "value" : 0, |
2587 | + "type" : "EVENT_MATCH" |
2588 | + } |
2589 | + ], |
2590 | + "limits" : [ |
2591 | + { |
2592 | + "rlim_max" : 0, |
2593 | + "rlim_cur" : 0 |
2594 | + }, |
2595 | + { |
2596 | + "rlim_cur" : 0, |
2597 | + "rlim_max" : 0 |
2598 | + }, |
2599 | + { |
2600 | + "rlim_cur" : 0, |
2601 | + "rlim_max" : 0 |
2602 | + }, |
2603 | + { |
2604 | + "rlim_cur" : 0, |
2605 | + "rlim_max" : 0 |
2606 | + }, |
2607 | + { |
2608 | + "rlim_cur" : 0, |
2609 | + "rlim_max" : 0 |
2610 | + }, |
2611 | + { |
2612 | + "rlim_max" : 0, |
2613 | + "rlim_cur" : 0 |
2614 | + }, |
2615 | + { |
2616 | + "rlim_max" : 0, |
2617 | + "rlim_cur" : 0 |
2618 | + }, |
2619 | + { |
2620 | + "rlim_cur" : 0, |
2621 | + "rlim_max" : 0 |
2622 | + }, |
2623 | + { |
2624 | + "rlim_cur" : 0, |
2625 | + "rlim_max" : 0 |
2626 | + }, |
2627 | + { |
2628 | + "rlim_max" : 0, |
2629 | + "rlim_cur" : 0 |
2630 | + }, |
2631 | + { |
2632 | + "rlim_cur" : 0, |
2633 | + "rlim_max" : 0 |
2634 | + }, |
2635 | + { |
2636 | + "rlim_cur" : 0, |
2637 | + "rlim_max" : 0 |
2638 | + }, |
2639 | + { |
2640 | + "rlim_max" : 0, |
2641 | + "rlim_cur" : 0 |
2642 | + }, |
2643 | + { |
2644 | + "rlim_cur" : 0, |
2645 | + "rlim_max" : 0 |
2646 | + }, |
2647 | + { |
2648 | + "rlim_cur" : 0, |
2649 | + "rlim_max" : 0 |
2650 | + }, |
2651 | + { |
2652 | + "rlim_max" : 0, |
2653 | + "rlim_cur" : 0 |
2654 | + } |
2655 | + ], |
2656 | + "instance" : "", |
2657 | + "umask" : 18, |
2658 | + "env" : [], |
2659 | + "version" : null, |
2660 | + "jobs" : [ |
2661 | + { |
2662 | + "failed" : 0, |
2663 | + "path" : "/com/ubuntu/Upstart/jobs/udev/_", |
2664 | + "respawn_count" : 0, |
2665 | + "respawn_time" : 0, |
2666 | + "env" : [ |
2667 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
2668 | + "TERM=linux", |
2669 | + "UPSTART_EVENTS=virtual-filesystems" |
2670 | + ], |
2671 | + "fds" : [], |
2672 | + "goal" : "JOB_START", |
2673 | + "start_env" : [], |
2674 | + "kill_process" : "PROCESS_INVALID", |
2675 | + "pid" : [ |
2676 | + 513, |
2677 | + 0, |
2678 | + 0, |
2679 | + 0, |
2680 | + 0, |
2681 | + 0, |
2682 | + 0 |
2683 | + ], |
2684 | + "state" : "JOB_RUNNING", |
2685 | + "trace_state" : "TRACE_NONE", |
2686 | + "stop_on" : [ |
2687 | + { |
2688 | + "name" : "runlevel", |
2689 | + "value" : 0, |
2690 | + "type" : "EVENT_MATCH", |
2691 | + "env" : [ |
2692 | + "[06]" |
2693 | + ] |
2694 | + } |
2695 | + ], |
2696 | + "trace_forks" : 1, |
2697 | + "exit_status" : 0, |
2698 | + "name" : "", |
2699 | + "log" : [ |
2700 | + { |
2701 | + "path" : null |
2702 | + }, |
2703 | + { |
2704 | + "path" : null |
2705 | + }, |
2706 | + { |
2707 | + "path" : null |
2708 | + }, |
2709 | + { |
2710 | + "path" : null |
2711 | + }, |
2712 | + { |
2713 | + "path" : null |
2714 | + }, |
2715 | + { |
2716 | + "path" : null |
2717 | + }, |
2718 | + { |
2719 | + "path" : null |
2720 | + } |
2721 | + ], |
2722 | + "failed_process" : "PROCESS_INVALID", |
2723 | + "stop_env" : [] |
2724 | + } |
2725 | + ], |
2726 | + "respawn_limit" : 10, |
2727 | + "kill_signal" : 15, |
2728 | + "task" : 0, |
2729 | + "session" : 0, |
2730 | + "reload_signal" : 1, |
2731 | + "nice" : -21, |
2732 | + "oom_score_adj" : 0, |
2733 | + "name" : "udev", |
2734 | + "debug" : 0, |
2735 | + "normalexit" : [], |
2736 | + "setuid" : null |
2737 | + }, |
2738 | + { |
2739 | + "jobs" : [ |
2740 | + { |
2741 | + "respawn_count" : 0, |
2742 | + "respawn_time" : 0, |
2743 | + "failed" : 0, |
2744 | + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dudev_2dbridge/_", |
2745 | + "fds" : [], |
2746 | + "env" : [ |
2747 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
2748 | + "TERM=linux", |
2749 | + "JOB=udev", |
2750 | + "INSTANCE=", |
2751 | + "UPSTART_EVENTS=starting" |
2752 | + ], |
2753 | + "stop_on" : [ |
2754 | + { |
2755 | + "type" : "EVENT_MATCH", |
2756 | + "name" : "stopped", |
2757 | + "value" : 0, |
2758 | + "env" : [ |
2759 | + "udev" |
2760 | + ] |
2761 | + } |
2762 | + ], |
2763 | + "trace_forks" : 2, |
2764 | + "state" : "JOB_RUNNING", |
2765 | + "trace_state" : "TRACE_NONE", |
2766 | + "pid" : [ |
2767 | + 507, |
2768 | + 0, |
2769 | + 0, |
2770 | + 0, |
2771 | + 0, |
2772 | + 0, |
2773 | + 0 |
2774 | + ], |
2775 | + "kill_process" : "PROCESS_INVALID", |
2776 | + "start_env" : [], |
2777 | + "goal" : "JOB_START", |
2778 | + "log" : [ |
2779 | + { |
2780 | + "path" : null |
2781 | + }, |
2782 | + { |
2783 | + "path" : null |
2784 | + }, |
2785 | + { |
2786 | + "path" : null |
2787 | + }, |
2788 | + { |
2789 | + "path" : null |
2790 | + }, |
2791 | + { |
2792 | + "path" : null |
2793 | + }, |
2794 | + { |
2795 | + "path" : null |
2796 | + }, |
2797 | + { |
2798 | + "path" : null |
2799 | + } |
2800 | + ], |
2801 | + "stop_env" : [], |
2802 | + "failed_process" : "PROCESS_INVALID", |
2803 | + "name" : "", |
2804 | + "exit_status" : 0 |
2805 | + } |
2806 | + ], |
2807 | + "respawn_limit" : 10, |
2808 | + "kill_signal" : 15, |
2809 | + "task" : 0, |
2810 | + "session" : 0, |
2811 | + "reload_signal" : 1, |
2812 | + "oom_score_adj" : 0, |
2813 | + "nice" : -21, |
2814 | + "name" : "upstart-udev-bridge", |
2815 | + "debug" : 0, |
2816 | + "setuid" : null, |
2817 | + "normalexit" : [], |
2818 | + "console" : "CONSOLE_LOG", |
2819 | + "export" : [], |
2820 | + "respawn_interval" : 5, |
2821 | + "path" : "/com/ubuntu/Upstart/jobs/upstart_2dudev_2dbridge", |
2822 | + "start_on" : [ |
2823 | + { |
2824 | + "env" : [ |
2825 | + "udev" |
2826 | + ], |
2827 | + "value" : 0, |
2828 | + "name" : "starting", |
2829 | + "type" : "EVENT_MATCH" |
2830 | + } |
2831 | + ], |
2832 | + "limits" : [ |
2833 | + { |
2834 | + "rlim_cur" : 0, |
2835 | + "rlim_max" : 0 |
2836 | + }, |
2837 | + { |
2838 | + "rlim_max" : 0, |
2839 | + "rlim_cur" : 0 |
2840 | + }, |
2841 | + { |
2842 | + "rlim_cur" : 0, |
2843 | + "rlim_max" : 0 |
2844 | + }, |
2845 | + { |
2846 | + "rlim_cur" : 0, |
2847 | + "rlim_max" : 0 |
2848 | + }, |
2849 | + { |
2850 | + "rlim_cur" : 0, |
2851 | + "rlim_max" : 0 |
2852 | + }, |
2853 | + { |
2854 | + "rlim_cur" : 0, |
2855 | + "rlim_max" : 0 |
2856 | + }, |
2857 | + { |
2858 | + "rlim_max" : 0, |
2859 | + "rlim_cur" : 0 |
2860 | + }, |
2861 | + { |
2862 | + "rlim_max" : 0, |
2863 | + "rlim_cur" : 0 |
2864 | + }, |
2865 | + { |
2866 | + "rlim_max" : 0, |
2867 | + "rlim_cur" : 0 |
2868 | + }, |
2869 | + { |
2870 | + "rlim_max" : 0, |
2871 | + "rlim_cur" : 0 |
2872 | + }, |
2873 | + { |
2874 | + "rlim_max" : 0, |
2875 | + "rlim_cur" : 0 |
2876 | + }, |
2877 | + { |
2878 | + "rlim_max" : 0, |
2879 | + "rlim_cur" : 0 |
2880 | + }, |
2881 | + { |
2882 | + "rlim_cur" : 0, |
2883 | + "rlim_max" : 0 |
2884 | + }, |
2885 | + { |
2886 | + "rlim_max" : 0, |
2887 | + "rlim_cur" : 0 |
2888 | + }, |
2889 | + { |
2890 | + "rlim_cur" : 0, |
2891 | + "rlim_max" : 0 |
2892 | + }, |
2893 | + { |
2894 | + "rlim_cur" : 0, |
2895 | + "rlim_max" : 0 |
2896 | + } |
2897 | + ], |
2898 | + "instance" : "", |
2899 | + "env" : [], |
2900 | + "umask" : 18, |
2901 | + "version" : null, |
2902 | + "stop_on" : [ |
2903 | + { |
2904 | + "type" : "EVENT_MATCH", |
2905 | + "name" : "stopped", |
2906 | + "value" : 0, |
2907 | + "env" : [ |
2908 | + "udev" |
2909 | + ] |
2910 | + } |
2911 | + ], |
2912 | + "emits" : [ |
2913 | + "*-device-added", |
2914 | + "*-device-removed", |
2915 | + "*-device-changed", |
2916 | + "*-device-online", |
2917 | + "*-device-offline" |
2918 | + ], |
2919 | + "setgid" : null, |
2920 | + "deleted" : 0, |
2921 | + "usage" : null, |
2922 | + "author" : null, |
2923 | + "chroot" : null, |
2924 | + "apparmor_switch" : null, |
2925 | + "process" : [ |
2926 | + { |
2927 | + "command" : "upstart-udev-bridge --daemon", |
2928 | + "script" : 0 |
2929 | + }, |
2930 | + { |
2931 | + "script" : 0, |
2932 | + "command" : null |
2933 | + }, |
2934 | + { |
2935 | + "command" : null, |
2936 | + "script" : 0 |
2937 | + }, |
2938 | + { |
2939 | + "command" : null, |
2940 | + "script" : 0 |
2941 | + }, |
2942 | + { |
2943 | + "script" : 0, |
2944 | + "command" : null |
2945 | + }, |
2946 | + { |
2947 | + "script" : 0, |
2948 | + "command" : null |
2949 | + }, |
2950 | + { |
2951 | + "script" : 0, |
2952 | + "command" : null |
2953 | + } |
2954 | + ], |
2955 | + "chdir" : null, |
2956 | + "respawn" : 1, |
2957 | + "description" : "Bridge udev events into upstart", |
2958 | + "kill_timeout" : 5, |
2959 | + "expect" : "EXPECT_DAEMON" |
2960 | + }, |
2961 | + { |
2962 | + "version" : null, |
2963 | + "env" : [], |
2964 | + "umask" : 18, |
2965 | + "console" : "CONSOLE_LOG", |
2966 | + "export" : [], |
2967 | + "respawn_interval" : 5, |
2968 | + "instance" : "", |
2969 | + "limits" : [ |
2970 | + { |
2971 | + "rlim_cur" : 0, |
2972 | + "rlim_max" : 0 |
2973 | + }, |
2974 | + { |
2975 | + "rlim_max" : 0, |
2976 | + "rlim_cur" : 0 |
2977 | + }, |
2978 | + { |
2979 | + "rlim_cur" : 0, |
2980 | + "rlim_max" : 0 |
2981 | + }, |
2982 | + { |
2983 | + "rlim_max" : 0, |
2984 | + "rlim_cur" : 0 |
2985 | + }, |
2986 | + { |
2987 | + "rlim_cur" : 0, |
2988 | + "rlim_max" : 0 |
2989 | + }, |
2990 | + { |
2991 | + "rlim_max" : 0, |
2992 | + "rlim_cur" : 0 |
2993 | + }, |
2994 | + { |
2995 | + "rlim_max" : 0, |
2996 | + "rlim_cur" : 0 |
2997 | + }, |
2998 | + { |
2999 | + "rlim_cur" : 0, |
3000 | + "rlim_max" : 0 |
3001 | + }, |
3002 | + { |
3003 | + "rlim_max" : 0, |
3004 | + "rlim_cur" : 0 |
3005 | + }, |
3006 | + { |
3007 | + "rlim_cur" : 0, |
3008 | + "rlim_max" : 0 |
3009 | + }, |
3010 | + { |
3011 | + "rlim_cur" : 0, |
3012 | + "rlim_max" : 0 |
3013 | + }, |
3014 | + { |
3015 | + "rlim_max" : 0, |
3016 | + "rlim_cur" : 0 |
3017 | + }, |
3018 | + { |
3019 | + "rlim_cur" : 0, |
3020 | + "rlim_max" : 0 |
3021 | + }, |
3022 | + { |
3023 | + "rlim_max" : 0, |
3024 | + "rlim_cur" : 0 |
3025 | + }, |
3026 | + { |
3027 | + "rlim_max" : 0, |
3028 | + "rlim_cur" : 0 |
3029 | + }, |
3030 | + { |
3031 | + "rlim_max" : 0, |
3032 | + "rlim_cur" : 0 |
3033 | + } |
3034 | + ], |
3035 | + "start_on" : [ |
3036 | + { |
3037 | + "env" : [ |
3038 | + "DEVICE=[/UL]*", |
3039 | + "MOUNTPOINT=/?*" |
3040 | + ], |
3041 | + "type" : "EVENT_MATCH", |
3042 | + "name" : "mounted", |
3043 | + "value" : 0 |
3044 | + } |
3045 | + ], |
3046 | + "path" : "/com/ubuntu/Upstart/jobs/ureadahead_2dother", |
3047 | + "oom_score_adj" : 0, |
3048 | + "nice" : -21, |
3049 | + "debug" : 0, |
3050 | + "name" : "ureadahead-other", |
3051 | + "setuid" : null, |
3052 | + "normalexit" : [ |
3053 | + 0, |
3054 | + 4 |
3055 | + ], |
3056 | + "respawn_limit" : 10, |
3057 | + "jobs" : [], |
3058 | + "task" : 0, |
3059 | + "kill_signal" : 15, |
3060 | + "session" : 0, |
3061 | + "reload_signal" : 1, |
3062 | + "process" : [ |
3063 | + { |
3064 | + "command" : "/sbin/ureadahead --daemon $MOUNTPOINT", |
3065 | + "script" : 0 |
3066 | + }, |
3067 | + { |
3068 | + "script" : 0, |
3069 | + "command" : null |
3070 | + }, |
3071 | + { |
3072 | + "command" : null, |
3073 | + "script" : 0 |
3074 | + }, |
3075 | + { |
3076 | + "script" : 0, |
3077 | + "command" : null |
3078 | + }, |
3079 | + { |
3080 | + "command" : null, |
3081 | + "script" : 0 |
3082 | + }, |
3083 | + { |
3084 | + "script" : 0, |
3085 | + "command" : null |
3086 | + }, |
3087 | + { |
3088 | + "script" : 0, |
3089 | + "command" : null |
3090 | + } |
3091 | + ], |
3092 | + "respawn" : 0, |
3093 | + "chdir" : null, |
3094 | + "description" : "Read required files in advance (for other mountpoints)", |
3095 | + "kill_timeout" : 5, |
3096 | + "expect" : "EXPECT_FORK", |
3097 | + "apparmor_switch" : null, |
3098 | + "deleted" : 0, |
3099 | + "setgid" : null, |
3100 | + "usage" : null, |
3101 | + "author" : null, |
3102 | + "chroot" : null, |
3103 | + "emits" : [] |
3104 | + }, |
3105 | + { |
3106 | + "process" : [ |
3107 | + { |
3108 | + "command" : "whoopsie", |
3109 | + "script" : 0 |
3110 | + }, |
3111 | + { |
3112 | + "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", |
3113 | + "script" : 1 |
3114 | + }, |
3115 | + { |
3116 | + "script" : 0, |
3117 | + "command" : null |
3118 | + }, |
3119 | + { |
3120 | + "command" : null, |
3121 | + "script" : 0 |
3122 | + }, |
3123 | + { |
3124 | + "script" : 0, |
3125 | + "command" : null |
3126 | + }, |
3127 | + { |
3128 | + "script" : 0, |
3129 | + "command" : null |
3130 | + }, |
3131 | + { |
3132 | + "script" : 0, |
3133 | + "command" : null |
3134 | + } |
3135 | + ], |
3136 | + "description" : "crash report submission daemon", |
3137 | + "chdir" : null, |
3138 | + "respawn" : 1, |
3139 | + "kill_timeout" : 5, |
3140 | + "expect" : "EXPECT_FORK", |
3141 | + "apparmor_switch" : null, |
3142 | + "setgid" : null, |
3143 | + "deleted" : 0, |
3144 | + "author" : null, |
3145 | + "usage" : null, |
3146 | + "chroot" : null, |
3147 | + "stop_on" : [ |
3148 | + { |
3149 | + "value" : 0, |
3150 | + "name" : "runlevel", |
3151 | + "type" : "EVENT_MATCH", |
3152 | + "env" : [ |
3153 | + "[!2345]" |
3154 | + ] |
3155 | + } |
3156 | + ], |
3157 | + "emits" : [], |
3158 | + "env" : [ |
3159 | + "CRASH_DB_URL=https://daisy.ubuntu.com" |
3160 | + ], |
3161 | + "umask" : 18, |
3162 | + "version" : null, |
3163 | + "console" : "CONSOLE_LOG", |
3164 | + "export" : [], |
3165 | + "respawn_interval" : 5, |
3166 | + "path" : "/com/ubuntu/Upstart/jobs/whoopsie", |
3167 | + "start_on" : [ |
3168 | + { |
3169 | + "name" : "runlevel", |
3170 | + "value" : 0, |
3171 | + "type" : "EVENT_MATCH", |
3172 | + "env" : [ |
3173 | + "[2345]" |
3174 | + ] |
3175 | + } |
3176 | + ], |
3177 | + "limits" : [ |
3178 | + { |
3179 | + "rlim_max" : 0, |
3180 | + "rlim_cur" : 0 |
3181 | + }, |
3182 | + { |
3183 | + "rlim_cur" : 0, |
3184 | + "rlim_max" : 0 |
3185 | + }, |
3186 | + { |
3187 | + "rlim_cur" : 0, |
3188 | + "rlim_max" : 0 |
3189 | + }, |
3190 | + { |
3191 | + "rlim_cur" : 0, |
3192 | + "rlim_max" : 0 |
3193 | + }, |
3194 | + { |
3195 | + "rlim_cur" : 0, |
3196 | + "rlim_max" : 0 |
3197 | + }, |
3198 | + { |
3199 | + "rlim_cur" : 0, |
3200 | + "rlim_max" : 0 |
3201 | + }, |
3202 | + { |
3203 | + "rlim_max" : 0, |
3204 | + "rlim_cur" : 0 |
3205 | + }, |
3206 | + { |
3207 | + "rlim_max" : 0, |
3208 | + "rlim_cur" : 0 |
3209 | + }, |
3210 | + { |
3211 | + "rlim_max" : 0, |
3212 | + "rlim_cur" : 0 |
3213 | + }, |
3214 | + { |
3215 | + "rlim_max" : 0, |
3216 | + "rlim_cur" : 0 |
3217 | + }, |
3218 | + { |
3219 | + "rlim_max" : 0, |
3220 | + "rlim_cur" : 0 |
3221 | + }, |
3222 | + { |
3223 | + "rlim_cur" : 0, |
3224 | + "rlim_max" : 0 |
3225 | + }, |
3226 | + { |
3227 | + "rlim_max" : 0, |
3228 | + "rlim_cur" : 0 |
3229 | + }, |
3230 | + { |
3231 | + "rlim_cur" : 0, |
3232 | + "rlim_max" : 0 |
3233 | + }, |
3234 | + { |
3235 | + "rlim_max" : 0, |
3236 | + "rlim_cur" : 0 |
3237 | + }, |
3238 | + { |
3239 | + "rlim_cur" : 0, |
3240 | + "rlim_max" : 0 |
3241 | + } |
3242 | + ], |
3243 | + "instance" : "", |
3244 | + "oom_score_adj" : 0, |
3245 | + "nice" : -21, |
3246 | + "name" : "whoopsie", |
3247 | + "debug" : 0, |
3248 | + "setuid" : null, |
3249 | + "normalexit" : [], |
3250 | + "jobs" : [ |
3251 | + { |
3252 | + "exit_status" : 0, |
3253 | + "name" : "", |
3254 | + "failed_process" : "PROCESS_INVALID", |
3255 | + "stop_env" : [], |
3256 | + "log" : [ |
3257 | + { |
3258 | + "path" : null |
3259 | + }, |
3260 | + { |
3261 | + "path" : null |
3262 | + }, |
3263 | + { |
3264 | + "path" : null |
3265 | + }, |
3266 | + { |
3267 | + "path" : null |
3268 | + }, |
3269 | + { |
3270 | + "path" : null |
3271 | + }, |
3272 | + { |
3273 | + "path" : null |
3274 | + }, |
3275 | + { |
3276 | + "path" : null |
3277 | + } |
3278 | + ], |
3279 | + "goal" : "JOB_START", |
3280 | + "start_env" : [], |
3281 | + "kill_process" : "PROCESS_INVALID", |
3282 | + "pid" : [ |
3283 | + 1204, |
3284 | + 0, |
3285 | + 0, |
3286 | + 0, |
3287 | + 0, |
3288 | + 0, |
3289 | + 0 |
3290 | + ], |
3291 | + "trace_state" : "TRACE_NONE", |
3292 | + "state" : "JOB_RUNNING", |
3293 | + "trace_forks" : 1, |
3294 | + "stop_on" : [ |
3295 | + { |
3296 | + "type" : "EVENT_MATCH", |
3297 | + "value" : 0, |
3298 | + "name" : "runlevel", |
3299 | + "env" : [ |
3300 | + "[!2345]" |
3301 | + ] |
3302 | + } |
3303 | + ], |
3304 | + "env" : [ |
3305 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
3306 | + "TERM=linux", |
3307 | + "CRASH_DB_URL=https://daisy.ubuntu.com", |
3308 | + "RUNLEVEL=2", |
3309 | + "PREVLEVEL=N", |
3310 | + "UPSTART_EVENTS=runlevel" |
3311 | + ], |
3312 | + "fds" : [], |
3313 | + "path" : "/com/ubuntu/Upstart/jobs/whoopsie/_", |
3314 | + "failed" : 0, |
3315 | + "respawn_time" : 0, |
3316 | + "respawn_count" : 0 |
3317 | + } |
3318 | + ], |
3319 | + "respawn_limit" : 10, |
3320 | + "task" : 0, |
3321 | + "kill_signal" : 15, |
3322 | + "session" : 0, |
3323 | + "reload_signal" : 1 |
3324 | + }, |
3325 | + { |
3326 | + "usage" : null, |
3327 | + "author" : null, |
3328 | + "chroot" : null, |
3329 | + "setgid" : null, |
3330 | + "deleted" : 0, |
3331 | + "emits" : [], |
3332 | + "stop_on" : [ |
3333 | + { |
3334 | + "env" : [ |
3335 | + "[!2345]" |
3336 | + ], |
3337 | + "name" : "runlevel", |
3338 | + "value" : 0, |
3339 | + "type" : "EVENT_MATCH" |
3340 | + } |
3341 | + ], |
3342 | + "kill_timeout" : 5, |
3343 | + "expect" : "EXPECT_NONE", |
3344 | + "process" : [ |
3345 | + { |
3346 | + "command" : null, |
3347 | + "script" : 0 |
3348 | + }, |
3349 | + { |
3350 | + "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 echo 2 > /proc/sys/fs/suid_dumpable\n", |
3351 | + "script" : 1 |
3352 | + }, |
3353 | + { |
3354 | + "script" : 0, |
3355 | + "command" : null |
3356 | + }, |
3357 | + { |
3358 | + "command" : null, |
3359 | + "script" : 0 |
3360 | + }, |
3361 | + { |
3362 | + "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 0 > /proc/sys/fs/suid_dumpable\n\techo \"core\" > /proc/sys/kernel/core_pattern\n fi\n", |
3363 | + "script" : 1 |
3364 | + }, |
3365 | + { |
3366 | + "command" : null, |
3367 | + "script" : 0 |
3368 | + }, |
3369 | + { |
3370 | + "script" : 0, |
3371 | + "command" : null |
3372 | + } |
3373 | + ], |
3374 | + "respawn" : 0, |
3375 | + "chdir" : null, |
3376 | + "description" : "automatic crash report generation", |
3377 | + "apparmor_switch" : null, |
3378 | + "normalexit" : [], |
3379 | + "setuid" : null, |
3380 | + "nice" : -21, |
3381 | + "oom_score_adj" : 0, |
3382 | + "name" : "apport", |
3383 | + "debug" : 0, |
3384 | + "task" : 0, |
3385 | + "kill_signal" : 15, |
3386 | + "session" : 0, |
3387 | + "reload_signal" : 1, |
3388 | + "jobs" : [ |
3389 | + { |
3390 | + "goal" : "JOB_START", |
3391 | + "kill_process" : "PROCESS_INVALID", |
3392 | + "start_env" : [], |
3393 | + "pid" : [ |
3394 | + 0, |
3395 | + 0, |
3396 | + 0, |
3397 | + 0, |
3398 | + 0, |
3399 | + 0, |
3400 | + 0 |
3401 | + ], |
3402 | + "state" : "JOB_RUNNING", |
3403 | + "trace_state" : "TRACE_NONE", |
3404 | + "stop_on" : [ |
3405 | + { |
3406 | + "value" : 0, |
3407 | + "name" : "runlevel", |
3408 | + "type" : "EVENT_MATCH", |
3409 | + "env" : [ |
3410 | + "[!2345]" |
3411 | + ] |
3412 | + } |
3413 | + ], |
3414 | + "trace_forks" : 0, |
3415 | + "exit_status" : 0, |
3416 | + "name" : "", |
3417 | + "log" : [ |
3418 | + { |
3419 | + "path" : null |
3420 | + }, |
3421 | + { |
3422 | + "path" : null |
3423 | + }, |
3424 | + { |
3425 | + "path" : null |
3426 | + }, |
3427 | + { |
3428 | + "path" : null |
3429 | + }, |
3430 | + { |
3431 | + "path" : null |
3432 | + }, |
3433 | + { |
3434 | + "path" : null |
3435 | + }, |
3436 | + { |
3437 | + "path" : null |
3438 | + } |
3439 | + ], |
3440 | + "failed_process" : "PROCESS_INVALID", |
3441 | + "stop_env" : [], |
3442 | + "failed" : 0, |
3443 | + "path" : "/com/ubuntu/Upstart/jobs/apport/_", |
3444 | + "respawn_count" : 0, |
3445 | + "respawn_time" : 0, |
3446 | + "env" : [ |
3447 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
3448 | + "TERM=linux", |
3449 | + "enabled=1", |
3450 | + "RUNLEVEL=2", |
3451 | + "PREVLEVEL=N", |
3452 | + "UPSTART_EVENTS=runlevel" |
3453 | + ], |
3454 | + "fds" : [] |
3455 | + } |
3456 | + ], |
3457 | + "respawn_limit" : 10, |
3458 | + "umask" : 18, |
3459 | + "env" : [ |
3460 | + "enabled=1" |
3461 | + ], |
3462 | + "version" : null, |
3463 | + "respawn_interval" : 5, |
3464 | + "path" : "/com/ubuntu/Upstart/jobs/apport", |
3465 | + "limits" : [ |
3466 | + { |
3467 | + "rlim_max" : 0, |
3468 | + "rlim_cur" : 0 |
3469 | + }, |
3470 | + { |
3471 | + "rlim_max" : 0, |
3472 | + "rlim_cur" : 0 |
3473 | + }, |
3474 | + { |
3475 | + "rlim_max" : 0, |
3476 | + "rlim_cur" : 0 |
3477 | + }, |
3478 | + { |
3479 | + "rlim_cur" : 0, |
3480 | + "rlim_max" : 0 |
3481 | + }, |
3482 | + { |
3483 | + "rlim_cur" : 0, |
3484 | + "rlim_max" : 0 |
3485 | + }, |
3486 | + { |
3487 | + "rlim_max" : 0, |
3488 | + "rlim_cur" : 0 |
3489 | + }, |
3490 | + { |
3491 | + "rlim_max" : 0, |
3492 | + "rlim_cur" : 0 |
3493 | + }, |
3494 | + { |
3495 | + "rlim_max" : 0, |
3496 | + "rlim_cur" : 0 |
3497 | + }, |
3498 | + { |
3499 | + "rlim_cur" : 0, |
3500 | + "rlim_max" : 0 |
3501 | + }, |
3502 | + { |
3503 | + "rlim_cur" : 0, |
3504 | + "rlim_max" : 0 |
3505 | + }, |
3506 | + { |
3507 | + "rlim_max" : 0, |
3508 | + "rlim_cur" : 0 |
3509 | + }, |
3510 | + { |
3511 | + "rlim_max" : 0, |
3512 | + "rlim_cur" : 0 |
3513 | + }, |
3514 | + { |
3515 | + "rlim_cur" : 0, |
3516 | + "rlim_max" : 0 |
3517 | + }, |
3518 | + { |
3519 | + "rlim_max" : 0, |
3520 | + "rlim_cur" : 0 |
3521 | + }, |
3522 | + { |
3523 | + "rlim_max" : 0, |
3524 | + "rlim_cur" : 0 |
3525 | + }, |
3526 | + { |
3527 | + "rlim_max" : 0, |
3528 | + "rlim_cur" : 0 |
3529 | + } |
3530 | + ], |
3531 | + "instance" : "", |
3532 | + "start_on" : [ |
3533 | + { |
3534 | + "env" : [ |
3535 | + "[2345]" |
3536 | + ], |
3537 | + "name" : "runlevel", |
3538 | + "value" : 0, |
3539 | + "type" : "EVENT_MATCH" |
3540 | + } |
3541 | + ], |
3542 | + "console" : "CONSOLE_LOG", |
3543 | + "export" : [] |
3544 | + }, |
3545 | + { |
3546 | + "respawn" : 0, |
3547 | + "description" : "set console keymap", |
3548 | + "chdir" : null, |
3549 | + "process" : [ |
3550 | + { |
3551 | + "command" : "loadkeys /etc/console-setup/cached.kmap.gz", |
3552 | + "script" : 0 |
3553 | + }, |
3554 | + { |
3555 | + "script" : 0, |
3556 | + "command" : null |
3557 | + }, |
3558 | + { |
3559 | + "command" : null, |
3560 | + "script" : 0 |
3561 | + }, |
3562 | + { |
3563 | + "command" : null, |
3564 | + "script" : 0 |
3565 | + }, |
3566 | + { |
3567 | + "command" : null, |
3568 | + "script" : 0 |
3569 | + }, |
3570 | + { |
3571 | + "script" : 0, |
3572 | + "command" : null |
3573 | + }, |
3574 | + { |
3575 | + "command" : null, |
3576 | + "script" : 0 |
3577 | + } |
3578 | + ], |
3579 | + "expect" : "EXPECT_NONE", |
3580 | + "kill_timeout" : 5, |
3581 | + "apparmor_switch" : null, |
3582 | + "setgid" : null, |
3583 | + "deleted" : 0, |
3584 | + "usage" : null, |
3585 | + "author" : null, |
3586 | + "chroot" : null, |
3587 | + "emits" : [], |
3588 | + "env" : [], |
3589 | + "umask" : 18, |
3590 | + "version" : null, |
3591 | + "export" : [], |
3592 | + "console" : "CONSOLE_LOG", |
3593 | + "path" : "/com/ubuntu/Upstart/jobs/console_2dsetup", |
3594 | + "instance" : "", |
3595 | + "limits" : [ |
3596 | + { |
3597 | + "rlim_max" : 0, |
3598 | + "rlim_cur" : 0 |
3599 | + }, |
3600 | + { |
3601 | + "rlim_max" : 0, |
3602 | + "rlim_cur" : 0 |
3603 | + }, |
3604 | + { |
3605 | + "rlim_max" : 0, |
3606 | + "rlim_cur" : 0 |
3607 | + }, |
3608 | + { |
3609 | + "rlim_max" : 0, |
3610 | + "rlim_cur" : 0 |
3611 | + }, |
3612 | + { |
3613 | + "rlim_max" : 0, |
3614 | + "rlim_cur" : 0 |
3615 | + }, |
3616 | + { |
3617 | + "rlim_max" : 0, |
3618 | + "rlim_cur" : 0 |
3619 | + }, |
3620 | + { |
3621 | + "rlim_max" : 0, |
3622 | + "rlim_cur" : 0 |
3623 | + }, |
3624 | + { |
3625 | + "rlim_max" : 0, |
3626 | + "rlim_cur" : 0 |
3627 | + }, |
3628 | + { |
3629 | + "rlim_cur" : 0, |
3630 | + "rlim_max" : 0 |
3631 | + }, |
3632 | + { |
3633 | + "rlim_cur" : 0, |
3634 | + "rlim_max" : 0 |
3635 | + }, |
3636 | + { |
3637 | + "rlim_cur" : 0, |
3638 | + "rlim_max" : 0 |
3639 | + }, |
3640 | + { |
3641 | + "rlim_max" : 0, |
3642 | + "rlim_cur" : 0 |
3643 | + }, |
3644 | + { |
3645 | + "rlim_cur" : 0, |
3646 | + "rlim_max" : 0 |
3647 | + }, |
3648 | + { |
3649 | + "rlim_cur" : 0, |
3650 | + "rlim_max" : 0 |
3651 | + }, |
3652 | + { |
3653 | + "rlim_cur" : 0, |
3654 | + "rlim_max" : 0 |
3655 | + }, |
3656 | + { |
3657 | + "rlim_cur" : 0, |
3658 | + "rlim_max" : 0 |
3659 | + } |
3660 | + ], |
3661 | + "start_on" : [ |
3662 | + { |
3663 | + "value" : 0, |
3664 | + "name" : "virtual-filesystems", |
3665 | + "type" : "EVENT_MATCH" |
3666 | + }, |
3667 | + { |
3668 | + "value" : 0, |
3669 | + "name" : "starting", |
3670 | + "type" : "EVENT_MATCH", |
3671 | + "env" : [ |
3672 | + "rcS" |
3673 | + ] |
3674 | + }, |
3675 | + { |
3676 | + "value" : 0, |
3677 | + "type" : "EVENT_OR" |
3678 | + }, |
3679 | + { |
3680 | + "env" : [ |
3681 | + "mountall-shell" |
3682 | + ], |
3683 | + "name" : "starting", |
3684 | + "value" : 0, |
3685 | + "type" : "EVENT_MATCH" |
3686 | + }, |
3687 | + { |
3688 | + "type" : "EVENT_OR", |
3689 | + "value" : 0 |
3690 | + } |
3691 | + ], |
3692 | + "respawn_interval" : 5, |
3693 | + "name" : "console-setup", |
3694 | + "debug" : 0, |
3695 | + "oom_score_adj" : 0, |
3696 | + "nice" : -21, |
3697 | + "normalexit" : [], |
3698 | + "setuid" : null, |
3699 | + "jobs" : [], |
3700 | + "respawn_limit" : 10, |
3701 | + "reload_signal" : 1, |
3702 | + "session" : 0, |
3703 | + "task" : 1, |
3704 | + "kill_signal" : 15 |
3705 | + }, |
3706 | + { |
3707 | + "setuid" : null, |
3708 | + "normalexit" : [], |
3709 | + "oom_score_adj" : 0, |
3710 | + "nice" : -21, |
3711 | + "debug" : 0, |
3712 | + "name" : "hwclock-save", |
3713 | + "kill_signal" : 15, |
3714 | + "task" : 1, |
3715 | + "reload_signal" : 1, |
3716 | + "session" : 0, |
3717 | + "respawn_limit" : 10, |
3718 | + "jobs" : [], |
3719 | + "version" : null, |
3720 | + "env" : [], |
3721 | + "umask" : 18, |
3722 | + "respawn_interval" : 5, |
3723 | + "instance" : "", |
3724 | + "limits" : [ |
3725 | + { |
3726 | + "rlim_max" : 0, |
3727 | + "rlim_cur" : 0 |
3728 | + }, |
3729 | + { |
3730 | + "rlim_max" : 0, |
3731 | + "rlim_cur" : 0 |
3732 | + }, |
3733 | + { |
3734 | + "rlim_max" : 0, |
3735 | + "rlim_cur" : 0 |
3736 | + }, |
3737 | + { |
3738 | + "rlim_max" : 0, |
3739 | + "rlim_cur" : 0 |
3740 | + }, |
3741 | + { |
3742 | + "rlim_cur" : 0, |
3743 | + "rlim_max" : 0 |
3744 | + }, |
3745 | + { |
3746 | + "rlim_cur" : 0, |
3747 | + "rlim_max" : 0 |
3748 | + }, |
3749 | + { |
3750 | + "rlim_max" : 0, |
3751 | + "rlim_cur" : 0 |
3752 | + }, |
3753 | + { |
3754 | + "rlim_max" : 0, |
3755 | + "rlim_cur" : 0 |
3756 | + }, |
3757 | + { |
3758 | + "rlim_max" : 0, |
3759 | + "rlim_cur" : 0 |
3760 | + }, |
3761 | + { |
3762 | + "rlim_cur" : 0, |
3763 | + "rlim_max" : 0 |
3764 | + }, |
3765 | + { |
3766 | + "rlim_cur" : 0, |
3767 | + "rlim_max" : 0 |
3768 | + }, |
3769 | + { |
3770 | + "rlim_cur" : 0, |
3771 | + "rlim_max" : 0 |
3772 | + }, |
3773 | + { |
3774 | + "rlim_cur" : 0, |
3775 | + "rlim_max" : 0 |
3776 | + }, |
3777 | + { |
3778 | + "rlim_max" : 0, |
3779 | + "rlim_cur" : 0 |
3780 | + }, |
3781 | + { |
3782 | + "rlim_cur" : 0, |
3783 | + "rlim_max" : 0 |
3784 | + }, |
3785 | + { |
3786 | + "rlim_cur" : 0, |
3787 | + "rlim_max" : 0 |
3788 | + } |
3789 | + ], |
3790 | + "start_on" : [ |
3791 | + { |
3792 | + "env" : [ |
3793 | + "[06]" |
3794 | + ], |
3795 | + "value" : 0, |
3796 | + "name" : "runlevel", |
3797 | + "type" : "EVENT_MATCH" |
3798 | + } |
3799 | + ], |
3800 | + "path" : "/com/ubuntu/Upstart/jobs/hwclock_2dsave", |
3801 | + "console" : "CONSOLE_LOG", |
3802 | + "export" : [], |
3803 | + "author" : null, |
3804 | + "usage" : null, |
3805 | + "chroot" : null, |
3806 | + "deleted" : 0, |
3807 | + "setgid" : null, |
3808 | + "emits" : [], |
3809 | + "kill_timeout" : 5, |
3810 | + "expect" : "EXPECT_NONE", |
3811 | + "process" : [ |
3812 | + { |
3813 | + "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", |
3814 | + "script" : 1 |
3815 | + }, |
3816 | + { |
3817 | + "command" : null, |
3818 | + "script" : 0 |
3819 | + }, |
3820 | + { |
3821 | + "command" : null, |
3822 | + "script" : 0 |
3823 | + }, |
3824 | + { |
3825 | + "command" : null, |
3826 | + "script" : 0 |
3827 | + }, |
3828 | + { |
3829 | + "script" : 0, |
3830 | + "command" : null |
3831 | + }, |
3832 | + { |
3833 | + "command" : null, |
3834 | + "script" : 0 |
3835 | + }, |
3836 | + { |
3837 | + "script" : 0, |
3838 | + "command" : null |
3839 | + } |
3840 | + ], |
3841 | + "description" : "save system clock to hardware clock", |
3842 | + "chdir" : null, |
3843 | + "respawn" : 0, |
3844 | + "apparmor_switch" : null |
3845 | + }, |
3846 | + { |
3847 | + "version" : null, |
3848 | + "umask" : 18, |
3849 | + "env" : [], |
3850 | + "respawn_interval" : 5, |
3851 | + "start_on" : [ |
3852 | + { |
3853 | + "env" : [ |
3854 | + "[2345]" |
3855 | + ], |
3856 | + "name" : "runlevel", |
3857 | + "value" : 0, |
3858 | + "type" : "EVENT_MATCH" |
3859 | + } |
3860 | + ], |
3861 | + "limits" : [ |
3862 | + { |
3863 | + "rlim_cur" : 0, |
3864 | + "rlim_max" : 0 |
3865 | + }, |
3866 | + { |
3867 | + "rlim_cur" : 0, |
3868 | + "rlim_max" : 0 |
3869 | + }, |
3870 | + { |
3871 | + "rlim_max" : 0, |
3872 | + "rlim_cur" : 0 |
3873 | + }, |
3874 | + { |
3875 | + "rlim_cur" : 0, |
3876 | + "rlim_max" : 0 |
3877 | + }, |
3878 | + { |
3879 | + "rlim_cur" : 0, |
3880 | + "rlim_max" : 0 |
3881 | + }, |
3882 | + { |
3883 | + "rlim_max" : 0, |
3884 | + "rlim_cur" : 0 |
3885 | + }, |
3886 | + { |
3887 | + "rlim_cur" : 0, |
3888 | + "rlim_max" : 0 |
3889 | + }, |
3890 | + { |
3891 | + "rlim_max" : 0, |
3892 | + "rlim_cur" : 0 |
3893 | + }, |
3894 | + { |
3895 | + "rlim_cur" : 0, |
3896 | + "rlim_max" : 0 |
3897 | + }, |
3898 | + { |
3899 | + "rlim_max" : 0, |
3900 | + "rlim_cur" : 0 |
3901 | + }, |
3902 | + { |
3903 | + "rlim_cur" : 0, |
3904 | + "rlim_max" : 0 |
3905 | + }, |
3906 | + { |
3907 | + "rlim_max" : 0, |
3908 | + "rlim_cur" : 0 |
3909 | + }, |
3910 | + { |
3911 | + "rlim_cur" : 0, |
3912 | + "rlim_max" : 0 |
3913 | + }, |
3914 | + { |
3915 | + "rlim_cur" : 0, |
3916 | + "rlim_max" : 0 |
3917 | + }, |
3918 | + { |
3919 | + "rlim_max" : 0, |
3920 | + "rlim_cur" : 0 |
3921 | + }, |
3922 | + { |
3923 | + "rlim_cur" : 0, |
3924 | + "rlim_max" : 0 |
3925 | + } |
3926 | + ], |
3927 | + "instance" : "", |
3928 | + "path" : "/com/ubuntu/Upstart/jobs/irqbalance", |
3929 | + "console" : "CONSOLE_LOG", |
3930 | + "export" : [], |
3931 | + "setuid" : null, |
3932 | + "normalexit" : [], |
3933 | + "nice" : -21, |
3934 | + "oom_score_adj" : 0, |
3935 | + "debug" : 0, |
3936 | + "name" : "irqbalance", |
3937 | + "task" : 0, |
3938 | + "kill_signal" : 15, |
3939 | + "session" : 0, |
3940 | + "reload_signal" : 1, |
3941 | + "respawn_limit" : 10, |
3942 | + "jobs" : [], |
3943 | + "kill_timeout" : 5, |
3944 | + "expect" : "EXPECT_FORK", |
3945 | + "process" : [ |
3946 | + { |
3947 | + "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", |
3948 | + "script" : 1 |
3949 | + }, |
3950 | + { |
3951 | + "script" : 0, |
3952 | + "command" : null |
3953 | + }, |
3954 | + { |
3955 | + "script" : 0, |
3956 | + "command" : null |
3957 | + }, |
3958 | + { |
3959 | + "script" : 0, |
3960 | + "command" : null |
3961 | + }, |
3962 | + { |
3963 | + "command" : null, |
3964 | + "script" : 0 |
3965 | + }, |
3966 | + { |
3967 | + "command" : null, |
3968 | + "script" : 0 |
3969 | + }, |
3970 | + { |
3971 | + "command" : null, |
3972 | + "script" : 0 |
3973 | + } |
3974 | + ], |
3975 | + "respawn" : 0, |
3976 | + "description" : "CPU interrupts balancing daemon", |
3977 | + "chdir" : null, |
3978 | + "apparmor_switch" : null, |
3979 | + "usage" : null, |
3980 | + "author" : "Chuck Short <zulcss@ubuntu.com>", |
3981 | + "chroot" : null, |
3982 | + "setgid" : null, |
3983 | + "deleted" : 0, |
3984 | + "emits" : [], |
3985 | + "stop_on" : [ |
3986 | + { |
3987 | + "type" : "EVENT_MATCH", |
3988 | + "name" : "runlevel", |
3989 | + "value" : 0, |
3990 | + "env" : [ |
3991 | + "[!2345]" |
3992 | + ] |
3993 | + } |
3994 | + ] |
3995 | + }, |
3996 | + { |
3997 | + "expect" : "EXPECT_NONE", |
3998 | + "kill_timeout" : 5, |
3999 | + "respawn" : 0, |
4000 | + "description" : "Flush boot log to disk", |
4001 | + "chdir" : null, |
4002 | + "process" : [ |
4003 | + { |
4004 | + "command" : "/bin/plymouth update-root-fs --read-write", |
4005 | + "script" : 0 |
4006 | + }, |
4007 | + { |
4008 | + "script" : 0, |
4009 | + "command" : null |
4010 | + }, |
4011 | + { |
4012 | + "script" : 0, |
4013 | + "command" : null |
4014 | + }, |
4015 | + { |
4016 | + "command" : null, |
4017 | + "script" : 0 |
4018 | + }, |
4019 | + { |
4020 | + "command" : null, |
4021 | + "script" : 0 |
4022 | + }, |
4023 | + { |
4024 | + "command" : null, |
4025 | + "script" : 0 |
4026 | + }, |
4027 | + { |
4028 | + "script" : 0, |
4029 | + "command" : null |
4030 | + } |
4031 | + ], |
4032 | + "apparmor_switch" : null, |
4033 | + "usage" : null, |
4034 | + "author" : null, |
4035 | + "chroot" : null, |
4036 | + "deleted" : 0, |
4037 | + "setgid" : null, |
4038 | + "emits" : [], |
4039 | + "umask" : 18, |
4040 | + "env" : [], |
4041 | + "version" : null, |
4042 | + "path" : "/com/ubuntu/Upstart/jobs/plymouth_2dlog", |
4043 | + "limits" : [ |
4044 | + { |
4045 | + "rlim_cur" : 0, |
4046 | + "rlim_max" : 0 |
4047 | + }, |
4048 | + { |
4049 | + "rlim_max" : 0, |
4050 | + "rlim_cur" : 0 |
4051 | + }, |
4052 | + { |
4053 | + "rlim_max" : 0, |
4054 | + "rlim_cur" : 0 |
4055 | + }, |
4056 | + { |
4057 | + "rlim_max" : 0, |
4058 | + "rlim_cur" : 0 |
4059 | + }, |
4060 | + { |
4061 | + "rlim_max" : 0, |
4062 | + "rlim_cur" : 0 |
4063 | + }, |
4064 | + { |
4065 | + "rlim_cur" : 0, |
4066 | + "rlim_max" : 0 |
4067 | + }, |
4068 | + { |
4069 | + "rlim_cur" : 0, |
4070 | + "rlim_max" : 0 |
4071 | + }, |
4072 | + { |
4073 | + "rlim_cur" : 0, |
4074 | + "rlim_max" : 0 |
4075 | + }, |
4076 | + { |
4077 | + "rlim_cur" : 0, |
4078 | + "rlim_max" : 0 |
4079 | + }, |
4080 | + { |
4081 | + "rlim_cur" : 0, |
4082 | + "rlim_max" : 0 |
4083 | + }, |
4084 | + { |
4085 | + "rlim_max" : 0, |
4086 | + "rlim_cur" : 0 |
4087 | + }, |
4088 | + { |
4089 | + "rlim_cur" : 0, |
4090 | + "rlim_max" : 0 |
4091 | + }, |
4092 | + { |
4093 | + "rlim_cur" : 0, |
4094 | + "rlim_max" : 0 |
4095 | + }, |
4096 | + { |
4097 | + "rlim_cur" : 0, |
4098 | + "rlim_max" : 0 |
4099 | + }, |
4100 | + { |
4101 | + "rlim_cur" : 0, |
4102 | + "rlim_max" : 0 |
4103 | + }, |
4104 | + { |
4105 | + "rlim_max" : 0, |
4106 | + "rlim_cur" : 0 |
4107 | + } |
4108 | + ], |
4109 | + "instance" : "", |
4110 | + "start_on" : [ |
4111 | + { |
4112 | + "value" : 0, |
4113 | + "name" : "filesystem", |
4114 | + "type" : "EVENT_MATCH" |
4115 | + } |
4116 | + ], |
4117 | + "respawn_interval" : 5, |
4118 | + "export" : [], |
4119 | + "console" : "CONSOLE_LOG", |
4120 | + "normalexit" : [], |
4121 | + "setuid" : null, |
4122 | + "name" : "plymouth-log", |
4123 | + "debug" : 0, |
4124 | + "oom_score_adj" : 0, |
4125 | + "nice" : -21, |
4126 | + "session" : 0, |
4127 | + "reload_signal" : 1, |
4128 | + "kill_signal" : 15, |
4129 | + "task" : 1, |
4130 | + "jobs" : [], |
4131 | + "respawn_limit" : 10 |
4132 | + }, |
4133 | + { |
4134 | + "respawn_limit" : 10, |
4135 | + "jobs" : [ |
4136 | + { |
4137 | + "name" : "", |
4138 | + "log" : [ |
4139 | + { |
4140 | + "path" : "/var/log/upstart/systemd-logind.log", |
4141 | + "detached" : 0, |
4142 | + "remote_closed" : 0, |
4143 | + "uid" : 0, |
4144 | + "io_watch_fd" : 16, |
4145 | + "open_errno" : 9, |
4146 | + "fd" : 11 |
4147 | + }, |
4148 | + { |
4149 | + "path" : null |
4150 | + }, |
4151 | + { |
4152 | + "path" : null |
4153 | + }, |
4154 | + { |
4155 | + "path" : null |
4156 | + }, |
4157 | + { |
4158 | + "path" : null |
4159 | + }, |
4160 | + { |
4161 | + "path" : null |
4162 | + }, |
4163 | + { |
4164 | + "path" : null |
4165 | + } |
4166 | + ], |
4167 | + "failed_process" : "PROCESS_INVALID", |
4168 | + "stop_env" : [], |
4169 | + "exit_status" : 0, |
4170 | + "state" : "JOB_RUNNING", |
4171 | + "trace_state" : "TRACE_NONE", |
4172 | + "stop_on" : [ |
4173 | + { |
4174 | + "env" : [ |
4175 | + "dbus" |
4176 | + ], |
4177 | + "name" : "stopping", |
4178 | + "value" : 0, |
4179 | + "type" : "EVENT_MATCH" |
4180 | + } |
4181 | + ], |
4182 | + "trace_forks" : 0, |
4183 | + "goal" : "JOB_START", |
4184 | + "kill_process" : "PROCESS_INVALID", |
4185 | + "pid" : [ |
4186 | + 667, |
4187 | + 0, |
4188 | + 0, |
4189 | + 0, |
4190 | + 0, |
4191 | + 0, |
4192 | + 0 |
4193 | + ], |
4194 | + "start_env" : [], |
4195 | + "fds" : [], |
4196 | + "env" : [ |
4197 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
4198 | + "TERM=linux", |
4199 | + "SYSTEMD_LOG_TARGET=syslog", |
4200 | + "JOB=dbus", |
4201 | + "INSTANCE=", |
4202 | + "UPSTART_EVENTS=started" |
4203 | + ], |
4204 | + "failed" : 0, |
4205 | + "path" : "/com/ubuntu/Upstart/jobs/systemd_2dlogind/_", |
4206 | + "respawn_count" : 0, |
4207 | + "respawn_time" : 0 |
4208 | + } |
4209 | + ], |
4210 | + "task" : 0, |
4211 | + "kill_signal" : 15, |
4212 | + "session" : 0, |
4213 | + "reload_signal" : 1, |
4214 | + "oom_score_adj" : 0, |
4215 | + "nice" : -21, |
4216 | + "debug" : 0, |
4217 | + "name" : "systemd-logind", |
4218 | + "setuid" : null, |
4219 | + "normalexit" : [], |
4220 | + "console" : "CONSOLE_LOG", |
4221 | + "export" : [], |
4222 | + "respawn_interval" : 5, |
4223 | + "instance" : "", |
4224 | + "limits" : [ |
4225 | + { |
4226 | + "rlim_max" : 0, |
4227 | + "rlim_cur" : 0 |
4228 | + }, |
4229 | + { |
4230 | + "rlim_cur" : 0, |
4231 | + "rlim_max" : 0 |
4232 | + }, |
4233 | + { |
4234 | + "rlim_cur" : 0, |
4235 | + "rlim_max" : 0 |
4236 | + }, |
4237 | + { |
4238 | + "rlim_cur" : 0, |
4239 | + "rlim_max" : 0 |
4240 | + }, |
4241 | + { |
4242 | + "rlim_max" : 0, |
4243 | + "rlim_cur" : 0 |
4244 | + }, |
4245 | + { |
4246 | + "rlim_max" : 0, |
4247 | + "rlim_cur" : 0 |
4248 | + }, |
4249 | + { |
4250 | + "rlim_max" : 0, |
4251 | + "rlim_cur" : 0 |
4252 | + }, |
4253 | + { |
4254 | + "rlim_cur" : 16384, |
4255 | + "rlim_max" : 16384 |
4256 | + }, |
4257 | + { |
4258 | + "rlim_max" : 0, |
4259 | + "rlim_cur" : 0 |
4260 | + }, |
4261 | + { |
4262 | + "rlim_cur" : 0, |
4263 | + "rlim_max" : 0 |
4264 | + }, |
4265 | + { |
4266 | + "rlim_cur" : 0, |
4267 | + "rlim_max" : 0 |
4268 | + }, |
4269 | + { |
4270 | + "rlim_cur" : 0, |
4271 | + "rlim_max" : 0 |
4272 | + }, |
4273 | + { |
4274 | + "rlim_cur" : 0, |
4275 | + "rlim_max" : 0 |
4276 | + }, |
4277 | + { |
4278 | + "rlim_max" : 0, |
4279 | + "rlim_cur" : 0 |
4280 | + }, |
4281 | + { |
4282 | + "rlim_cur" : 0, |
4283 | + "rlim_max" : 0 |
4284 | + }, |
4285 | + { |
4286 | + "rlim_cur" : 0, |
4287 | + "rlim_max" : 0 |
4288 | + } |
4289 | + ], |
4290 | + "start_on" : [ |
4291 | + { |
4292 | + "env" : [ |
4293 | + "dbus" |
4294 | + ], |
4295 | + "value" : 0, |
4296 | + "name" : "started", |
4297 | + "type" : "EVENT_MATCH" |
4298 | + } |
4299 | + ], |
4300 | + "path" : "/com/ubuntu/Upstart/jobs/systemd_2dlogind", |
4301 | + "version" : null, |
4302 | + "env" : [ |
4303 | + "SYSTEMD_LOG_TARGET=syslog" |
4304 | + ], |
4305 | + "umask" : 18, |
4306 | + "stop_on" : [ |
4307 | + { |
4308 | + "env" : [ |
4309 | + "dbus" |
4310 | + ], |
4311 | + "name" : "stopping", |
4312 | + "value" : 0, |
4313 | + "type" : "EVENT_MATCH" |
4314 | + } |
4315 | + ], |
4316 | + "emits" : [], |
4317 | + "setgid" : null, |
4318 | + "deleted" : 0, |
4319 | + "usage" : null, |
4320 | + "author" : null, |
4321 | + "chroot" : null, |
4322 | + "apparmor_switch" : null, |
4323 | + "process" : [ |
4324 | + { |
4325 | + "command" : "/lib/systemd/systemd-logind", |
4326 | + "script" : 0 |
4327 | + }, |
4328 | + { |
4329 | + "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", |
4330 | + "script" : 1 |
4331 | + }, |
4332 | + { |
4333 | + "command" : null, |
4334 | + "script" : 0 |
4335 | + }, |
4336 | + { |
4337 | + "script" : 0, |
4338 | + "command" : null |
4339 | + }, |
4340 | + { |
4341 | + "script" : 0, |
4342 | + "command" : null |
4343 | + }, |
4344 | + { |
4345 | + "command" : null, |
4346 | + "script" : 0 |
4347 | + }, |
4348 | + { |
4349 | + "script" : 0, |
4350 | + "command" : null |
4351 | + } |
4352 | + ], |
4353 | + "description" : "SystemD login management service", |
4354 | + "chdir" : null, |
4355 | + "respawn" : 1, |
4356 | + "kill_timeout" : 5, |
4357 | + "expect" : "EXPECT_NONE" |
4358 | + }, |
4359 | + { |
4360 | + "apparmor_switch" : null, |
4361 | + "kill_timeout" : 5, |
4362 | + "expect" : "EXPECT_NONE", |
4363 | + "process" : [ |
4364 | + { |
4365 | + "script" : 0, |
4366 | + "command" : "/sbin/getty -8 38400 tty5" |
4367 | + }, |
4368 | + { |
4369 | + "script" : 0, |
4370 | + "command" : null |
4371 | + }, |
4372 | + { |
4373 | + "command" : null, |
4374 | + "script" : 0 |
4375 | + }, |
4376 | + { |
4377 | + "command" : null, |
4378 | + "script" : 0 |
4379 | + }, |
4380 | + { |
4381 | + "script" : 0, |
4382 | + "command" : null |
4383 | + }, |
4384 | + { |
4385 | + "script" : 0, |
4386 | + "command" : null |
4387 | + }, |
4388 | + { |
4389 | + "command" : null, |
4390 | + "script" : 0 |
4391 | + } |
4392 | + ], |
4393 | + "chdir" : null, |
4394 | + "respawn" : 1, |
4395 | + "description" : null, |
4396 | + "emits" : [], |
4397 | + "stop_on" : [ |
4398 | + { |
4399 | + "name" : "runlevel", |
4400 | + "value" : 0, |
4401 | + "type" : "EVENT_MATCH", |
4402 | + "env" : [ |
4403 | + "[!23]" |
4404 | + ] |
4405 | + } |
4406 | + ], |
4407 | + "usage" : null, |
4408 | + "author" : null, |
4409 | + "chroot" : null, |
4410 | + "deleted" : 0, |
4411 | + "setgid" : null, |
4412 | + "respawn_interval" : 5, |
4413 | + "instance" : "", |
4414 | + "limits" : [ |
4415 | + { |
4416 | + "rlim_cur" : 0, |
4417 | + "rlim_max" : 0 |
4418 | + }, |
4419 | + { |
4420 | + "rlim_cur" : 0, |
4421 | + "rlim_max" : 0 |
4422 | + }, |
4423 | + { |
4424 | + "rlim_cur" : 0, |
4425 | + "rlim_max" : 0 |
4426 | + }, |
4427 | + { |
4428 | + "rlim_max" : 0, |
4429 | + "rlim_cur" : 0 |
4430 | + }, |
4431 | + { |
4432 | + "rlim_max" : 0, |
4433 | + "rlim_cur" : 0 |
4434 | + }, |
4435 | + { |
4436 | + "rlim_max" : 0, |
4437 | + "rlim_cur" : 0 |
4438 | + }, |
4439 | + { |
4440 | + "rlim_max" : 0, |
4441 | + "rlim_cur" : 0 |
4442 | + }, |
4443 | + { |
4444 | + "rlim_max" : 0, |
4445 | + "rlim_cur" : 0 |
4446 | + }, |
4447 | + { |
4448 | + "rlim_max" : 0, |
4449 | + "rlim_cur" : 0 |
4450 | + }, |
4451 | + { |
4452 | + "rlim_max" : 0, |
4453 | + "rlim_cur" : 0 |
4454 | + }, |
4455 | + { |
4456 | + "rlim_cur" : 0, |
4457 | + "rlim_max" : 0 |
4458 | + }, |
4459 | + { |
4460 | + "rlim_max" : 0, |
4461 | + "rlim_cur" : 0 |
4462 | + }, |
4463 | + { |
4464 | + "rlim_cur" : 0, |
4465 | + "rlim_max" : 0 |
4466 | + }, |
4467 | + { |
4468 | + "rlim_cur" : 0, |
4469 | + "rlim_max" : 0 |
4470 | + }, |
4471 | + { |
4472 | + "rlim_cur" : 0, |
4473 | + "rlim_max" : 0 |
4474 | + }, |
4475 | + { |
4476 | + "rlim_cur" : 0, |
4477 | + "rlim_max" : 0 |
4478 | + } |
4479 | + ], |
4480 | + "start_on" : [ |
4481 | + { |
4482 | + "type" : "EVENT_MATCH", |
4483 | + "value" : 0, |
4484 | + "name" : "runlevel", |
4485 | + "env" : [ |
4486 | + "[23]" |
4487 | + ] |
4488 | + }, |
4489 | + { |
4490 | + "name" : "not-container", |
4491 | + "value" : 0, |
4492 | + "type" : "EVENT_MATCH" |
4493 | + }, |
4494 | + { |
4495 | + "type" : "EVENT_AND", |
4496 | + "value" : 0 |
4497 | + } |
4498 | + ], |
4499 | + "path" : "/com/ubuntu/Upstart/jobs/tty5", |
4500 | + "console" : "CONSOLE_LOG", |
4501 | + "export" : [], |
4502 | + "version" : null, |
4503 | + "env" : [], |
4504 | + "umask" : 18, |
4505 | + "task" : 0, |
4506 | + "kill_signal" : 15, |
4507 | + "session" : 0, |
4508 | + "reload_signal" : 1, |
4509 | + "respawn_limit" : 10, |
4510 | + "jobs" : [ |
4511 | + { |
4512 | + "trace_forks" : 0, |
4513 | + "stop_on" : [ |
4514 | + { |
4515 | + "value" : 0, |
4516 | + "name" : "runlevel", |
4517 | + "type" : "EVENT_MATCH", |
4518 | + "env" : [ |
4519 | + "[!23]" |
4520 | + ] |
4521 | + } |
4522 | + ], |
4523 | + "trace_state" : "TRACE_NONE", |
4524 | + "state" : "JOB_RUNNING", |
4525 | + "kill_process" : "PROCESS_INVALID", |
4526 | + "pid" : [ |
4527 | + 1010, |
4528 | + 0, |
4529 | + 0, |
4530 | + 0, |
4531 | + 0, |
4532 | + 0, |
4533 | + 0 |
4534 | + ], |
4535 | + "start_env" : [], |
4536 | + "goal" : "JOB_START", |
4537 | + "failed_process" : "PROCESS_INVALID", |
4538 | + "stop_env" : [], |
4539 | + "log" : [ |
4540 | + { |
4541 | + "path" : null |
4542 | + }, |
4543 | + { |
4544 | + "path" : null |
4545 | + }, |
4546 | + { |
4547 | + "path" : null |
4548 | + }, |
4549 | + { |
4550 | + "path" : null |
4551 | + }, |
4552 | + { |
4553 | + "path" : null |
4554 | + }, |
4555 | + { |
4556 | + "path" : null |
4557 | + }, |
4558 | + { |
4559 | + "path" : null |
4560 | + } |
4561 | + ], |
4562 | + "name" : "", |
4563 | + "exit_status" : 0, |
4564 | + "respawn_time" : 0, |
4565 | + "respawn_count" : 0, |
4566 | + "path" : "/com/ubuntu/Upstart/jobs/tty5/_", |
4567 | + "failed" : 0, |
4568 | + "fds" : [], |
4569 | + "env" : [ |
4570 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
4571 | + "TERM=linux", |
4572 | + "RUNLEVEL=2", |
4573 | + "PREVLEVEL=N", |
4574 | + "UPSTART_EVENTS=runlevel not-container" |
4575 | + ] |
4576 | + } |
4577 | + ], |
4578 | + "normalexit" : [], |
4579 | + "setuid" : null, |
4580 | + "nice" : -21, |
4581 | + "oom_score_adj" : 0, |
4582 | + "debug" : 0, |
4583 | + "name" : "tty5" |
4584 | + }, |
4585 | + { |
4586 | + "chroot" : null, |
4587 | + "usage" : null, |
4588 | + "author" : "Clint Byrum <clint@ubuntu.com>", |
4589 | + "setgid" : null, |
4590 | + "deleted" : 0, |
4591 | + "emits" : [ |
4592 | + "failsafe-boot" |
4593 | + ], |
4594 | + "stop_on" : [ |
4595 | + { |
4596 | + "type" : "EVENT_MATCH", |
4597 | + "name" : "static-network-up", |
4598 | + "value" : 0 |
4599 | + }, |
4600 | + { |
4601 | + "type" : "EVENT_MATCH", |
4602 | + "name" : "starting", |
4603 | + "value" : 0, |
4604 | + "env" : [ |
4605 | + "rc-sysinit" |
4606 | + ] |
4607 | + }, |
4608 | + { |
4609 | + "type" : "EVENT_OR", |
4610 | + "value" : 0 |
4611 | + } |
4612 | + ], |
4613 | + "kill_timeout" : 5, |
4614 | + "expect" : "EXPECT_NONE", |
4615 | + "process" : [ |
4616 | + { |
4617 | + "script" : 1, |
4618 | + "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" |
4619 | + }, |
4620 | + { |
4621 | + "command" : null, |
4622 | + "script" : 0 |
4623 | + }, |
4624 | + { |
4625 | + "command" : "logger -t 'failsafe' -p daemon.warning \"Failsafe of 120 seconds reached.\"", |
4626 | + "script" : 0 |
4627 | + }, |
4628 | + { |
4629 | + "command" : null, |
4630 | + "script" : 0 |
4631 | + }, |
4632 | + { |
4633 | + "script" : 0, |
4634 | + "command" : null |
4635 | + }, |
4636 | + { |
4637 | + "script" : 0, |
4638 | + "command" : null |
4639 | + }, |
4640 | + { |
4641 | + "script" : 0, |
4642 | + "command" : null |
4643 | + } |
4644 | + ], |
4645 | + "respawn" : 0, |
4646 | + "description" : "Failsafe Boot Delay", |
4647 | + "chdir" : null, |
4648 | + "apparmor_switch" : null, |
4649 | + "setuid" : null, |
4650 | + "normalexit" : [], |
4651 | + "nice" : -21, |
4652 | + "oom_score_adj" : 0, |
4653 | + "name" : "failsafe", |
4654 | + "debug" : 0, |
4655 | + "kill_signal" : 15, |
4656 | + "task" : 0, |
4657 | + "reload_signal" : 1, |
4658 | + "session" : 0, |
4659 | + "jobs" : [ |
4660 | + { |
4661 | + "failed" : 0, |
4662 | + "path" : "/com/ubuntu/Upstart/jobs/failsafe/_", |
4663 | + "respawn_count" : 0, |
4664 | + "respawn_time" : 0, |
4665 | + "env" : [ |
4666 | + "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin", |
4667 | + "TERM=linux", |
4668 | + "IFACE=lo", |
4669 | + "LOGICAL=lo", |
4670 | + "ADDRFAM=inet", |
4671 | + "METHOD=loopback", |
4672 | + "UPSTART_EVENTS=filesystem net-device-up" |
4673 | + ], |
4674 | + "fds" : [], |
4675 | + "goal" : "JOB_START", |
4676 | + "pid" : [ |
4677 | + 1213, |
4678 | + 0, |
4679 | + 0, |
4680 | + 0, |
4681 | + 0, |
4682 | + 0, |
4683 | + 0 |
4684 | + ], |
4685 | + "kill_process" : "PROCESS_INVALID", |
4686 | + "start_env" : [], |
4687 | + "state" : "JOB_RUNNING", |
4688 | + "trace_state" : "TRACE_NONE", |
4689 | + "stop_on" : [ |
4690 | + { |
4691 | + "value" : 0, |
4692 | + "name" : "static-network-up", |
4693 | + "type" : "EVENT_MATCH" |
4694 | + }, |
4695 | + { |
4696 | + "env" : [ |
4697 | + "rc-sysinit" |
4698 | + ], |
4699 | + "type" : "EVENT_MATCH", |
4700 | + "value" : 0, |
4701 | + "name" : "starting" |
4702 | + }, |
4703 | + { |
4704 | + "type" : "EVENT_OR", |
4705 | + "value" : 0 |
4706 | + } |
4707 | + ], |
4708 | + "trace_forks" : 0, |
4709 | + "exit_status" : 0, |
4710 | + "name" : "", |
4711 | + "log" : [ |
4712 | + { |
4713 | + "path" : null |
4714 | + }, |
4715 | + { |
4716 | + "path" : null |
4717 | + }, |
4718 | + { |
4719 | + "path" : null |
4720 | + }, |
4721 | + { |
4722 | + "path" : null |
4723 | + }, |
4724 | + { |
4725 | + "path" : null |
4726 | + }, |
4727 | + { |
4728 | + "path" : null |
4729 | + }, |
4730 | + { |
4731 | + "path" : null |
4732 | + } |
4733 | + ], |
4734 | + "failed_process" : "PROCESS_INVALID", |
4735 | + "stop_env" : [] |
4736 | + } |
4737 | + ], |
4738 | + "respawn_limit" : 10, |
4739 | + "umask" : 18, |
4740 | + "env" : [], |
4741 | + "version" : null, |
4742 | + "respawn_interval" : 5, |
4743 | + "path" : "/com/ubuntu/Upstart/jobs/failsafe", |
4744 | + "instance" : "", |
4745 | + "limits" : [ |
4746 | + { |
4747 | + "rlim_max" : 0, |
4748 | + "rlim_cur" : 0 |
4749 | + }, |
4750 | + { |
4751 | + "rlim_cur" : 0, |
4752 | + "rlim_max" : 0 |
4753 | + }, |
4754 | + { |
4755 | + "rlim_max" : 0, |
4756 | + "rlim_cur" : 0 |
4757 | + }, |
4758 | + { |
4759 | + "rlim_cur" : 0, |
4760 | + "rlim_max" : 0 |
4761 | + }, |
4762 | + { |
4763 | + "rlim_max" : 0, |
4764 | + "rlim_cur" : 0 |
4765 | + }, |
4766 | + { |
4767 | + "rlim_cur" : 0, |
4768 | + "rlim_max" : 0 |
4769 | + }, |
4770 | + { |
4771 | + "rlim_max" : 0, |
4772 | + "rlim_cur" : 0 |
4773 | + }, |
4774 | + { |
4775 | + "rlim_max" : 0, |
4776 | + "rlim_cur" : 0 |
4777 | + }, |
4778 | + { |
4779 | + "rlim_cur" : 0, |
4780 | + "rlim_max" : 0 |
4781 | + }, |
4782 | + { |
4783 | + "rlim_max" : 0, |
4784 | + "rlim_cur" : 0 |
4785 | + }, |
4786 | + { |
4787 | + "rlim_max" : 0, |
4788 | + "rlim_cur" : 0 |
4789 | + }, |
4790 | + { |
4791 | + "rlim_max" : 0, |
4792 | + "rlim_cur" : 0 |
4793 | + }, |
4794 | + { |
4795 | + "rlim_max" : 0, |
4796 | + "rlim_cur" : 0 |
4797 | + }, |
4798 | + { |
4799 | + "rlim_max" : 0, |
4800 | + "rlim_cur" : 0 |
4801 | + }, |
4802 | + { |
4803 | + "rlim_cur" : 0, |
4804 | + "rlim_max" : 0 |
4805 | + }, |
4806 | + { |
4807 | + "rlim_cur" : 0, |
4808 | + "rlim_max" : 0 |
4809 | + } |
4810 | + ], |
4811 | + "start_on" : [ |
4812 | + { |
4813 | + "name" : "filesystem", |
4814 | + "value" : 0, |
4815 | + "type" : "EVENT_MATCH" |
4816 | + }, |
4817 | + { |
4818 | + "name" : "net-device-up", |
4819 | + "value" : 0, |
4820 | + "type" : "EVENT_MATCH", |
4821 | + "env" : [ |
4822 | + "IFACE=lo" |
4823 | + ] |
4824 | + }, |
4825 | + { |
4826 | + "value" : 0, |
4827 | + "type" : "EVENT_AND" |
4828 | + } |
4829 | + ], |
4830 | + "console" : "CONSOLE_OUTPUT", |
4831 | + "export" : [] |
4832 | + }, |
4833 | + { |
4834 | + "respawn" : 0, |
4835 | + "chdir" : null, |
4836 | + "description" : null, |
4837 | + "process" : [ |
4838 | + { |
4839 | + "command" : "hybrid-detect", |
4840 | + "script" : 0 |
4841 | + }, |
4842 | + { |
4843 | + "command" : null, |
4844 | + "script" : 0 |
4845 | + }, |
4846 | + { |
4847 | + "command" : null, |
4848 | + "script" : 0 |
4849 | + }, |
4850 | + { |
4851 | + "script" : 0, |
4852 | + "command" : null |
4853 | + }, |
4854 | + { |
4855 | + "command" : null, |
4856 | + "script" : 0 |
4857 | + }, |
4858 | + { |
4859 | + "command" : null, |
4860 | + "script" : 0 |
4861 | + }, |
4862 | + { |
4863 | + "command" : null, |
4864 | + "script" : 0 |
4865 | + } |
4866 | + ], |
4867 | + "expect" : "EXPECT_NONE", |
4868 | + "kill_timeout" : 5, |
4869 | + "apparmor_switch" : null, |
4870 | + "setgid" : null, |
4871 | + "deleted" : 0, |
4872 | + "chroot" : null, |
4873 | + "usage" : null, |
4874 | + "author" : null, |
4875 | + "emits" : [], |
4876 | + "env" : [], |
4877 | + "umask" : 18, |
4878 | + "version" : null, |
4879 | + "export" : [], |
4880 | + "console" : "CONSOLE_LOG", |
4881 | + "path" : "/com/ubuntu/Upstart/jobs/hybrid_2dgfx", |
4882 | + "start_on" : [ |
4883 | + { |
4884 | + "type" : "EVENT_MATCH", |
4885 | + "name" : "starting", |
4886 | + "value" : 0, |
4887 | + "env" : [ |
4888 | + "lightdm" |
4889 | + ] |
4890 | + }, |
4891 | + { |
4892 | + "env" : [ |
4893 | + "kdm" |
4894 | + ], |
4895 | + "name" : "starting", |
4896 | + "value" : 0, |
4897 | + "type" : "EVENT_MATCH" |
4898 | + }, |
4899 | + { |
4900 | + "value" : 0, |
4901 | + "type" : "EVENT_OR" |
4902 | + }, |
4903 | + { |
4904 | + "env" : [ |
4905 | + "xdm" |
4906 | + ], |
4907 | + "type" : "EVENT_MATCH", |
4908 | + "name" : "starting", |
4909 | + "value" : 0 |
4910 | + }, |
4911 | + { |
4912 | + "type" : "EVENT_OR", |
4913 | + "value" : 0 |
4914 | + }, |
4915 | + { |
4916 | + "env" : [ |
4917 | + "lxdm" |
4918 | + ], |
4919 | + "name" : "starting", |
4920 | + "value" : 0, |
4921 | + "type" : "EVENT_MATCH" |
4922 | + }, |
4923 | + { |
4924 | + "type" : "EVENT_OR", |
4925 | + "value" : 0 |
4926 | + } |
4927 | + ], |
4928 | + "limits" : [ |
4929 | + { |
4930 | + "rlim_max" : 0, |
4931 | + "rlim_cur" : 0 |
4932 | + }, |
4933 | + { |
4934 | + "rlim_max" : 0, |
4935 | + "rlim_cur" : 0 |
4936 | + }, |
4937 | + { |
4938 | + "rlim_max" : 0, |
4939 | + "rlim_cur" : 0 |
4940 | + }, |
4941 | + { |
4942 | + "rlim_cur" : 0, |
4943 | + "rlim_max" : 0 |
4944 | + }, |
4945 | + { |
4946 | + "rlim_max" : 0, |
4947 | + "rlim_cur" : 0 |
4948 | + }, |
4949 | + { |
4950 | + "rlim_cur" : 0, |
4951 | + "rlim_max" : 0 |
4952 | + }, |
4953 | + { |
4954 | + "rlim_max" : 0, |
4955 | + "rlim_cur" : 0 |
4956 | + }, |
4957 | + { |
4958 | + "rlim_max" : 0, |
4959 | + "rlim_cur" : 0 |
4960 | + }, |
4961 | + { |
4962 | + "rlim_max" : 0, |
4963 | + "rlim_cur" : 0 |
4964 | + }, |
4965 | + { |
4966 | + "rlim_cur" : 0, |
4967 | + "rlim_max" : 0 |
4968 | + }, |
4969 | + { |
4970 | + "rlim_cur" : 0, |
4971 | + "rlim_max" : 0 |
4972 | + }, |
4973 | + { |
4974 | + "rlim_cur" : 0, |
4975 | + "rlim_max" : 0 |
4976 | + }, |
4977 | + { |
4978 | + "rlim_cur" : 0, |
4979 | + "rlim_max" : 0 |
4980 | + }, |
4981 | + { |
4982 | + "rlim_max" : 0, |
4983 | + "rlim_cur" : 0 |
4984 | + }, |
4985 | + { |
4986 | + "rlim_cur" : 0, |
4987 | + "rlim_max" : 0 |
4988 | + }, |
4989 | + { |
4990 | + "rlim_max" : 0, |
4991 | + "rlim_cur" : 0 |
4992 | + } |
4993 | + ], |
4994 | + "instance" : "", |
4995 | + "respawn_interval" : 5, |
4996 | + "name" : "hybrid-gfx", |
4997 | + "debug" : 0, |
4998 | + "nice" : -21, |
4999 | + "oom_score_adj" : 0, |
5000 | + "setuid" : null, |
@@ -275,7 +280,18 @@ json_type (json_processes, array))
goto error;
if (! state_check_
- for (i = 0; i < json_object_ array_length (json_processes); i++) { array_length (json_processes);
json_ object *json_process;
+ len = json_object_
+
+ if (len > PROCESS_LAST) {
+ /* Detected a downgrade on re-exec scenario (where we
+ * are attempting to restore state from a newer init
+ * which contains additional processes
+ */
+ nih_warn ("%s", _("Detected unsupported downgrade on re-exec"));
+ goto error;
+ }
+
+ for (i = 0; i < len; i++) {
The result of this is that, instead of deserializing those processes that are known, on any downgrade to a version that tracked fewer processes, all information will be discarded about all processes associated with jobs. This is effectively equivalent to a stateless reexec, and is not a very graceful handling of this case.
I don't feel very strongly in general about supporting downgrades; but in a case such as this where you need to explicitly handle the difference in the number of related processes, it seems to me that a graceful handling is as easy to accomplish as the ungraceful alternative.