]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/service.c
doc: utilize the DocBook markup for some literals
[thirdparty/systemd.git] / src / core / service.c
CommitLineData
d6c9574f 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
5cb5a6ff 2
a7334b09
LP
3/***
4 This file is part of systemd.
5
6 Copyright 2010 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
a7334b09
LP
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 16 Lesser General Public License for more details.
a7334b09 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
5cb5a6ff 22#include <errno.h>
034c6ed7 23#include <signal.h>
2c4104f0
LP
24#include <dirent.h>
25#include <unistd.h>
4b939747 26#include <sys/reboot.h>
5cb5a6ff 27
4b939747 28#include "manager.h"
87f0e418 29#include "unit.h"
5cb5a6ff
LP
30#include "service.h"
31#include "load-fragment.h"
32#include "load-dropin.h"
034c6ed7 33#include "log.h"
2c4104f0 34#include "strv.h"
9e2f7c11 35#include "unit-name.h"
41f9172f 36#include "unit-printf.h"
4139c1b2 37#include "dbus-service.h"
514f4ef5 38#include "special.h"
9a57c629 39#include "exit-status.h"
f6a6225e 40#include "def.h"
9eb977db 41#include "path-util.h"
f6a6225e 42#include "util.h"
7f110ff9 43#include "utf8.h"
4d1a6904 44#include "env-util.h"
a5c32cff 45#include "fileio.h"
718db961
LP
46#include "bus-error.h"
47#include "bus-util.h"
034c6ed7 48
07459bb6 49#ifdef HAVE_SYSV_COMPAT
f34277d9 50
f6a6225e 51#define DEFAULT_SYSV_TIMEOUT_USEC (5*USEC_PER_MINUTE)
f34277d9 52
09cd1ab1
LP
53typedef enum RunlevelType {
54 RUNLEVEL_UP,
3cdebc21 55 RUNLEVEL_DOWN
09cd1ab1
LP
56} RunlevelType;
57
58static const struct {
59 const char *path;
60 const char *target;
61 const RunlevelType type;
62} rcnd_table[] = {
9d25f5ed 63 /* Standard SysV runlevels for start-up */
514f4ef5 64 { "rc1.d", SPECIAL_RESCUE_TARGET, RUNLEVEL_UP },
fbe9f3a9
LP
65 { "rc2.d", SPECIAL_RUNLEVEL2_TARGET, RUNLEVEL_UP },
66 { "rc3.d", SPECIAL_RUNLEVEL3_TARGET, RUNLEVEL_UP },
67 { "rc4.d", SPECIAL_RUNLEVEL4_TARGET, RUNLEVEL_UP },
68 { "rc5.d", SPECIAL_RUNLEVEL5_TARGET, RUNLEVEL_UP },
fbe9f3a9 69
9d25f5ed
LP
70 /* Standard SysV runlevels for shutdown */
71 { "rc0.d", SPECIAL_POWEROFF_TARGET, RUNLEVEL_DOWN },
72 { "rc6.d", SPECIAL_REBOOT_TARGET, RUNLEVEL_DOWN }
73
74 /* Note that the order here matters, as we read the
75 directories in this order, and we want to make sure that
76 sysv_start_priority is known when we first load the
77 unit. And that value we only know from S links. Hence
3cdebc21 78 UP must be read before DOWN */
23a177ef
LP
79};
80
09cd1ab1 81#define RUNLEVELS_UP "12345"
07459bb6 82#endif
09cd1ab1 83
acbb0225 84static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
87f0e418
LP
85 [SERVICE_DEAD] = UNIT_INACTIVE,
86 [SERVICE_START_PRE] = UNIT_ACTIVATING,
87 [SERVICE_START] = UNIT_ACTIVATING,
88 [SERVICE_START_POST] = UNIT_ACTIVATING,
89 [SERVICE_RUNNING] = UNIT_ACTIVE,
80876c20 90 [SERVICE_EXITED] = UNIT_ACTIVE,
032ff4af 91 [SERVICE_RELOAD] = UNIT_RELOADING,
87f0e418
LP
92 [SERVICE_STOP] = UNIT_DEACTIVATING,
93 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
94 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
95 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
96 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
97 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
fdf20a31 98 [SERVICE_FAILED] = UNIT_FAILED,
6124958c 99 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
034c6ed7 100};
5cb5a6ff 101
e056b01d
LP
102/* For Type=idle we never want to delay any other jobs, hence we
103 * consider idle jobs active as soon as we start working on them */
104static const UnitActiveState state_translation_table_idle[_SERVICE_STATE_MAX] = {
105 [SERVICE_DEAD] = UNIT_INACTIVE,
106 [SERVICE_START_PRE] = UNIT_ACTIVE,
107 [SERVICE_START] = UNIT_ACTIVE,
108 [SERVICE_START_POST] = UNIT_ACTIVE,
109 [SERVICE_RUNNING] = UNIT_ACTIVE,
110 [SERVICE_EXITED] = UNIT_ACTIVE,
111 [SERVICE_RELOAD] = UNIT_RELOADING,
112 [SERVICE_STOP] = UNIT_DEACTIVATING,
113 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
114 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
115 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
116 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
117 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
118 [SERVICE_FAILED] = UNIT_FAILED,
119 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
120};
121
718db961
LP
122static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata);
123static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata);
124static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata);
125
842129f5
LP
126static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
127
a16e1123
LP
128static void service_init(Unit *u) {
129 Service *s = SERVICE(u);
130
131 assert(u);
ac155bb8 132 assert(u->load_state == UNIT_STUB);
a16e1123 133
1f19a534
OS
134 s->timeout_start_usec = u->manager->default_timeout_start_usec;
135 s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
136 s->restart_usec = u->manager->default_restart_usec;
0b86feac 137 s->type = _SERVICE_TYPE_INVALID;
bb242b7b 138
07459bb6 139#ifdef HAVE_SYSV_COMPAT
a16e1123 140 s->sysv_start_priority = -1;
ea87ca5a 141 s->sysv_start_priority_from_rcnd = -1;
07459bb6 142#endif
a16e1123 143 s->socket_fd = -1;
3185a36b 144 s->guess_main_pid = true;
a16e1123
LP
145
146 exec_context_init(&s->exec_context);
4819ff03 147 kill_context_init(&s->kill_context);
4ad49000 148 cgroup_context_init(&s->cgroup_context);
a16e1123 149
3f41e1e5
LN
150 RATELIMIT_INIT(s->start_limit,
151 u->manager->default_start_limit_interval,
152 u->manager->default_start_limit_burst);
a16e1123
LP
153
154 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
155}
156
5e94833f
LP
157static void service_unwatch_control_pid(Service *s) {
158 assert(s);
159
160 if (s->control_pid <= 0)
161 return;
162
163 unit_unwatch_pid(UNIT(s), s->control_pid);
164 s->control_pid = 0;
165}
166
167static void service_unwatch_main_pid(Service *s) {
168 assert(s);
169
170 if (s->main_pid <= 0)
171 return;
172
173 unit_unwatch_pid(UNIT(s), s->main_pid);
174 s->main_pid = 0;
175}
176
3e52541e
MS
177static void service_unwatch_pid_file(Service *s) {
178 if (!s->pid_file_pathspec)
179 return;
180
66870f90
ZJS
181 log_debug_unit(UNIT(s)->id, "Stopping watch for %s's PID file %s",
182 UNIT(s)->id, s->pid_file_pathspec->path);
718db961 183 path_spec_unwatch(s->pid_file_pathspec);
3e52541e
MS
184 path_spec_done(s->pid_file_pathspec);
185 free(s->pid_file_pathspec);
186 s->pid_file_pathspec = NULL;
187}
188
5925dd3c 189static int service_set_main_pid(Service *s, pid_t pid) {
e55224ca
LP
190 pid_t ppid;
191
5925dd3c
LP
192 assert(s);
193
194 if (pid <= 1)
195 return -EINVAL;
196
197 if (pid == getpid())
198 return -EINVAL;
199
7400b9d2
LP
200 if (s->main_pid == pid && s->main_pid_known)
201 return 0;
202
203 if (s->main_pid != pid) {
204 service_unwatch_main_pid(s);
205 exec_status_start(&s->main_exec_status, pid);
206 }
41efeaec 207
6dfa5494
LP
208 s->main_pid = pid;
209 s->main_pid_known = true;
210
211 if (get_parent_of_pid(pid, &ppid) >= 0 && ppid != getpid()) {
66870f90 212 log_warning_unit(UNIT(s)->id,
ccd06097
ZJS
213 "%s: Supervising process "PID_FMT" which is not our child. We'll most likely not notice when it exits.",
214 UNIT(s)->id, pid);
e55224ca 215
6dfa5494
LP
216 s->main_pid_alien = true;
217 } else
218 s->main_pid_alien = false;
5925dd3c
LP
219
220 return 0;
221}
222
4f2d528d
LP
223static void service_close_socket_fd(Service *s) {
224 assert(s);
225
226 if (s->socket_fd < 0)
227 return;
228
229 close_nointr_nofail(s->socket_fd);
230 s->socket_fd = -1;
231}
232
6cf6bbc2
LP
233static void service_connection_unref(Service *s) {
234 assert(s);
235
9444b1f2 236 if (!UNIT_ISSET(s->accept_socket))
6cf6bbc2
LP
237 return;
238
57020a3a
LP
239 socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
240 unit_ref_unset(&s->accept_socket);
6cf6bbc2
LP
241}
242
a6927d7f
MO
243static void service_stop_watchdog(Service *s) {
244 assert(s);
245
718db961 246 s->watchdog_event_source = sd_event_source_unref(s->watchdog_event_source);
842129f5 247 s->watchdog_timestamp = DUAL_TIMESTAMP_NULL;
a6927d7f
MO
248}
249
842129f5 250static void service_start_watchdog(Service *s) {
bb242b7b
MO
251 int r;
252
253 assert(s);
254
842129f5 255 if (s->watchdog_usec <= 0)
bb242b7b
MO
256 return;
257
718db961
LP
258 if (s->watchdog_event_source) {
259 r = sd_event_source_set_time(s->watchdog_event_source, s->watchdog_timestamp.monotonic + s->watchdog_usec);
260 if (r < 0) {
261 log_warning_unit(UNIT(s)->id, "%s failed to reset watchdog timer: %s", UNIT(s)->id, strerror(-r));
262 return;
263 }
264
842129f5 265 r = sd_event_source_set_enabled(s->watchdog_event_source, SD_EVENT_ONESHOT);
c4ef3317 266 } else {
718db961 267 r = sd_event_add_monotonic(UNIT(s)->manager->event, s->watchdog_timestamp.monotonic + s->watchdog_usec, 0, service_dispatch_watchdog, s, &s->watchdog_event_source);
c4ef3317
LP
268 if (r < 0) {
269 log_warning_unit(UNIT(s)->id, "%s failed to add watchdog timer: %s", UNIT(s)->id, strerror(-r));
270 return;
271 }
272
273 /* Let's process everything else which might be a sign
274 * of living before we consider a service died. */
275 r = sd_event_source_set_priority(s->watchdog_event_source, SD_EVENT_PRIORITY_IDLE);
276 }
718db961 277
bb242b7b 278 if (r < 0)
842129f5 279 log_warning_unit(UNIT(s)->id, "%s failed to install watchdog timer: %s", UNIT(s)->id, strerror(-r));
bb242b7b
MO
280}
281
a6927d7f
MO
282static void service_reset_watchdog(Service *s) {
283 assert(s);
284
285 dual_timestamp_get(&s->watchdog_timestamp);
842129f5 286 service_start_watchdog(s);
a6927d7f
MO
287}
288
87f0e418
LP
289static void service_done(Unit *u) {
290 Service *s = SERVICE(u);
44d8db9e
LP
291
292 assert(s);
293
294 free(s->pid_file);
295 s->pid_file = NULL;
296
07459bb6 297#ifdef HAVE_SYSV_COMPAT
8309400a
LP
298 free(s->sysv_runlevels);
299 s->sysv_runlevels = NULL;
07459bb6 300#endif
8309400a 301
8c47c732
LP
302 free(s->status_text);
303 s->status_text = NULL;
304
4ad49000 305 cgroup_context_done(&s->cgroup_context);
613b411c
LP
306 exec_context_done(&s->exec_context);
307 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
e537352b 308 exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
44d8db9e 309 s->control_command = NULL;
867b3b7d 310 s->main_command = NULL;
44d8db9e 311
96342de6
LN
312 set_free(s->restart_ignore_status.code);
313 s->restart_ignore_status.code = NULL;
314 set_free(s->restart_ignore_status.signal);
315 s->restart_ignore_status.signal = NULL;
316
317 set_free(s->success_status.code);
318 s->success_status.code = NULL;
319 set_free(s->success_status.signal);
320 s->success_status.signal = NULL;
321
44d8db9e
LP
322 /* This will leak a process, but at least no memory or any of
323 * our resources */
5e94833f
LP
324 service_unwatch_main_pid(s);
325 service_unwatch_control_pid(s);
3e52541e 326 service_unwatch_pid_file(s);
44d8db9e 327
05e343b7 328 if (s->bus_name) {
ac155bb8 329 unit_unwatch_bus_name(u, s->bus_name);
05e343b7
LP
330 free(s->bus_name);
331 s->bus_name = NULL;
332 }
333
4f2d528d 334 service_close_socket_fd(s);
6cf6bbc2 335 service_connection_unref(s);
4f2d528d 336
57020a3a 337 unit_ref_unset(&s->accept_socket);
f976f3f6 338
bb242b7b
MO
339 service_stop_watchdog(s);
340
718db961
LP
341 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
342}
343
344static int service_arm_timer(Service *s, usec_t usec) {
345 int r;
346
347 assert(s);
348
718db961
LP
349 if (s->timer_event_source) {
350 r = sd_event_source_set_time(s->timer_event_source, now(CLOCK_MONOTONIC) + usec);
351 if (r < 0)
352 return r;
353
354 return sd_event_source_set_enabled(s->timer_event_source, SD_EVENT_ONESHOT);
355 }
356
357 return sd_event_add_monotonic(UNIT(s)->manager->event, now(CLOCK_MONOTONIC) + usec, 0, service_dispatch_timer, s, &s->timer_event_source);
44d8db9e
LP
358}
359
07459bb6 360#ifdef HAVE_SYSV_COMPAT
b7ccee3c
LP
361static char *sysv_translate_name(const char *name) {
362 char *r;
363
5d4caf56
LP
364 r = new(char, strlen(name) + sizeof(".service"));
365 if (!r)
b7ccee3c
LP
366 return NULL;
367
5b819198 368 if (endswith(name, ".sh"))
85a3fa0e 369 /* Drop .sh suffix */
5b819198 370 strcpy(stpcpy(r, name) - 3, ".service");
b7ccee3c 371 else
85a3fa0e 372 /* Normal init script name */
b7ccee3c
LP
373 strcpy(stpcpy(r, name), ".service");
374
375 return r;
376}
377
ee95669f 378static int sysv_translate_facility(const char *name, const char *filename, char **_r) {
2c4104f0 379
a7d3cc26
LP
380 /* We silently ignore the $ prefix here. According to the LSB
381 * spec it simply indicates whether something is a
382 * standardized name or a distribution-specific one. Since we
383 * just follow what already exists and do not introduce new
384 * uses or names we don't care who introduced a new name. */
385
2c4104f0 386 static const char * const table[] = {
6464aa08 387 /* LSB defined facilities */
5d4caf56 388 "local_fs", NULL,
a7d3cc26
LP
389 "network", SPECIAL_NETWORK_TARGET,
390 "named", SPECIAL_NSS_LOOKUP_TARGET,
391 "portmap", SPECIAL_RPCBIND_TARGET,
392 "remote_fs", SPECIAL_REMOTE_FS_TARGET,
5d4caf56 393 "syslog", NULL,
4466194c 394 "time", SPECIAL_TIME_SYNC_TARGET,
2c4104f0
LP
395 };
396
397 unsigned i;
398 char *r;
ee95669f 399 const char *n;
2c4104f0 400
ee95669f
LP
401 assert(name);
402 assert(_r);
a7d3cc26 403
ee95669f 404 n = *name == '$' ? name + 1 : name;
a7d3cc26 405
ee95669f 406 for (i = 0; i < ELEMENTSOF(table); i += 2) {
a7d3cc26 407
ee95669f
LP
408 if (!streq(table[i], n))
409 continue;
2c4104f0 410
ee95669f
LP
411 if (!table[i+1])
412 return 0;
413
5d4caf56
LP
414 r = strdup(table[i+1]);
415 if (!r)
416 return log_oom();
ee95669f
LP
417
418 goto finish;
419 }
2c4104f0 420
a7d3cc26 421 /* If we don't know this name, fallback heuristics to figure
0003d1ab 422 * out whether something is a target or a service alias. */
a7d3cc26 423
e83c7c0b
LP
424 if (*name == '$') {
425 if (!unit_prefix_is_valid(n))
426 return -EINVAL;
427
ee95669f
LP
428 /* Facilities starting with $ are most likely targets */
429 r = unit_name_build(n, NULL, ".target");
e83c7c0b 430 } else if (filename && streq(name, filename))
35b8ca3a 431 /* Names equaling the file name of the services are redundant */
ee95669f 432 return 0;
32159d3a 433 else
ee95669f
LP
434 /* Everything else we assume to be normal service names */
435 r = sysv_translate_name(n);
2c4104f0 436
32159d3a 437 if (!r)
2c4104f0
LP
438 return -ENOMEM;
439
440finish:
b4353094 441 *_r = r;
2c4104f0
LP
442
443 return 1;
444}
445
56d748b4 446static int sysv_fix_order(Service *s) {
ac155bb8 447 Unit *other;
2c4104f0
LP
448 int r;
449
450 assert(s);
451
452 if (s->sysv_start_priority < 0)
453 return 0;
454
23a177ef
LP
455 /* For each pair of services where at least one lacks a LSB
456 * header, we use the start priority value to order things. */
2c4104f0 457
1124fe6f 458 LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_SERVICE]) {
2c4104f0
LP
459 Service *t;
460 UnitDependency d;
eeaafddc 461 bool special_s, special_t;
2c4104f0 462
595ed347 463 t = SERVICE(other);
2c4104f0
LP
464
465 if (s == t)
466 continue;
9f151f29 467
1124fe6f 468 if (UNIT(t)->load_state != UNIT_LOADED)
9f151f29 469 continue;
2c4104f0
LP
470
471 if (t->sysv_start_priority < 0)
472 continue;
473
51a1a79d
LP
474 /* If both units have modern headers we don't care
475 * about the priorities */
1124fe6f
MS
476 if ((UNIT(s)->fragment_path || s->sysv_has_lsb) &&
477 (UNIT(t)->fragment_path || t->sysv_has_lsb))
23a177ef
LP
478 continue;
479
eeaafddc
LP
480 special_s = s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels);
481 special_t = t->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, t->sysv_runlevels);
482
483 if (special_t && !special_s)
484 d = UNIT_AFTER;
485 else if (special_s && !special_t)
486 d = UNIT_BEFORE;
487 else if (t->sysv_start_priority < s->sysv_start_priority)
2c4104f0
LP
488 d = UNIT_AFTER;
489 else if (t->sysv_start_priority > s->sysv_start_priority)
490 d = UNIT_BEFORE;
491 else
492 continue;
493
494 /* FIXME: Maybe we should compare the name here lexicographically? */
495
da19d5c1 496 if ((r = unit_add_dependency(UNIT(s), d, UNIT(t), true)) < 0)
2c4104f0
LP
497 return r;
498 }
499
500 return 0;
501}
502
503static ExecCommand *exec_command_new(const char *path, const char *arg1) {
504 ExecCommand *c;
505
506 if (!(c = new0(ExecCommand, 1)))
507 return NULL;
508
509 if (!(c->path = strdup(path))) {
510 free(c);
511 return NULL;
512 }
513
514 if (!(c->argv = strv_new(path, arg1, NULL))) {
515 free(c->path);
516 free(c);
517 return NULL;
518 }
519
520 return c;
521}
522
37e2941d 523static int sysv_exec_commands(Service *s, const bool supports_reload) {
2c4104f0
LP
524 ExecCommand *c;
525
526 assert(s);
1b64d026
LP
527 assert(s->is_sysv);
528 assert(UNIT(s)->source_path);
2c4104f0 529
1b64d026
LP
530 c = exec_command_new(UNIT(s)->source_path, "start");
531 if (!c)
2c4104f0
LP
532 return -ENOMEM;
533 exec_command_append_list(s->exec_command+SERVICE_EXEC_START, c);
534
1b64d026
LP
535 c = exec_command_new(UNIT(s)->source_path, "stop");
536 if (!c)
2c4104f0
LP
537 return -ENOMEM;
538 exec_command_append_list(s->exec_command+SERVICE_EXEC_STOP, c);
539
37e2941d
MS
540 if (supports_reload) {
541 c = exec_command_new(UNIT(s)->source_path, "reload");
542 if (!c)
543 return -ENOMEM;
544 exec_command_append_list(s->exec_command+SERVICE_EXEC_RELOAD, c);
545 }
2c4104f0
LP
546
547 return 0;
548}
549
37e2941d
MS
550static bool usage_contains_reload(const char *line) {
551 return (strcasestr(line, "{reload|") ||
552 strcasestr(line, "{reload}") ||
553 strcasestr(line, "{reload\"") ||
554 strcasestr(line, "|reload|") ||
555 strcasestr(line, "|reload}") ||
556 strcasestr(line, "|reload\""));
557}
558
e537352b 559static int service_load_sysv_path(Service *s, const char *path) {
2c4104f0
LP
560 FILE *f;
561 Unit *u;
562 unsigned line = 0;
563 int r;
564 enum {
565 NORMAL,
566 DESCRIPTION,
567 LSB,
37e2941d
MS
568 LSB_DESCRIPTION,
569 USAGE_CONTINUATION
2c4104f0 570 } state = NORMAL;
0b5d26f9 571 char *short_description = NULL, *long_description = NULL, *chkconfig_description = NULL, *description;
5f4b19f4 572 struct stat st;
37e2941d 573 bool supports_reload = false;
23a177ef
LP
574
575 assert(s);
576 assert(path);
2c4104f0
LP
577
578 u = UNIT(s);
579
1b64d026
LP
580 f = fopen(path, "re");
581 if (!f) {
2c4104f0
LP
582 r = errno == ENOENT ? 0 : -errno;
583 goto finish;
584 }
585
5f4b19f4
LP
586 if (fstat(fileno(f), &st) < 0) {
587 r = -errno;
588 goto finish;
589 }
590
1b64d026
LP
591 free(u->source_path);
592 u->source_path = strdup(path);
593 if (!u->source_path) {
2c4104f0
LP
594 r = -ENOMEM;
595 goto finish;
596 }
1b64d026 597 u->source_mtime = timespec_load(&st.st_mtim);
5f4b19f4
LP
598
599 if (null_or_empty(&st)) {
ac155bb8 600 u->load_state = UNIT_MASKED;
5f4b19f4
LP
601 r = 0;
602 goto finish;
603 }
604
1b64d026
LP
605 s->is_sysv = true;
606
2c4104f0
LP
607 while (!feof(f)) {
608 char l[LINE_MAX], *t;
609
610 if (!fgets(l, sizeof(l), f)) {
611 if (feof(f))
612 break;
613
614 r = -errno;
66870f90
ZJS
615 log_error_unit(u->id,
616 "Failed to read configuration file '%s': %s",
617 path, strerror(-r));
2c4104f0
LP
618 goto finish;
619 }
620
621 line++;
622
623 t = strstrip(l);
37e2941d
MS
624 if (*t != '#') {
625 /* Try to figure out whether this init script supports
626 * the reload operation. This heuristic looks for
627 * "Usage" lines which include the reload option. */
628 if ( state == USAGE_CONTINUATION ||
629 (state == NORMAL && strcasestr(t, "usage"))) {
630 if (usage_contains_reload(t)) {
631 supports_reload = true;
632 state = NORMAL;
633 } else if (t[strlen(t)-1] == '\\')
634 state = USAGE_CONTINUATION;
635 else
636 state = NORMAL;
637 }
638
2c4104f0 639 continue;
37e2941d 640 }
2c4104f0
LP
641
642 if (state == NORMAL && streq(t, "### BEGIN INIT INFO")) {
643 state = LSB;
23a177ef 644 s->sysv_has_lsb = true;
2c4104f0
LP
645 continue;
646 }
647
648 if ((state == LSB_DESCRIPTION || state == LSB) && streq(t, "### END INIT INFO")) {
649 state = NORMAL;
650 continue;
651 }
652
653 t++;
654 t += strspn(t, WHITESPACE);
655
656 if (state == NORMAL) {
657
658 /* Try to parse Red Hat style chkconfig headers */
659
c2b35af6 660 if (startswith_no_case(t, "chkconfig:")) {
2c4104f0 661 int start_priority;
8309400a 662 char runlevels[16], *k;
2c4104f0
LP
663
664 state = NORMAL;
665
8309400a
LP
666 if (sscanf(t+10, "%15s %i %*i",
667 runlevels,
668 &start_priority) != 2) {
2c4104f0 669
66870f90
ZJS
670 log_warning_unit(u->id,
671 "[%s:%u] Failed to parse chkconfig line. Ignoring.",
672 path, line);
2c4104f0
LP
673 continue;
674 }
675
fbe9f3a9
LP
676 /* A start priority gathered from the
677 * symlink farms is preferred over the
678 * data from the LSB header. */
8309400a 679 if (start_priority < 0 || start_priority > 99)
66870f90
ZJS
680 log_warning_unit(u->id,
681 "[%s:%u] Start priority out of range. Ignoring.",
682 path, line);
ea87ca5a 683 else
8309400a
LP
684 s->sysv_start_priority = start_priority;
685
686 char_array_0(runlevels);
687 k = delete_chars(runlevels, WHITESPACE "-");
688
689 if (k[0]) {
690 char *d;
691
692 if (!(d = strdup(k))) {
693 r = -ENOMEM;
694 goto finish;
695 }
696
697 free(s->sysv_runlevels);
698 s->sysv_runlevels = d;
2c4104f0
LP
699 }
700
0b5d26f9 701 } else if (startswith_no_case(t, "description:")) {
2c4104f0
LP
702
703 size_t k = strlen(t);
704 char *d;
0b5d26f9 705 const char *j;
2c4104f0
LP
706
707 if (t[k-1] == '\\') {
708 state = DESCRIPTION;
709 t[k-1] = 0;
710 }
711
0b5d26f9
LP
712 if ((j = strstrip(t+12)) && *j) {
713 if (!(d = strdup(j))) {
714 r = -ENOMEM;
715 goto finish;
716 }
717 } else
718 d = NULL;
2c4104f0 719
0b5d26f9
LP
720 free(chkconfig_description);
721 chkconfig_description = d;
2c4104f0 722
c2b35af6 723 } else if (startswith_no_case(t, "pidfile:")) {
2c4104f0
LP
724
725 char *fn;
726
727 state = NORMAL;
728
729 fn = strstrip(t+8);
730 if (!path_is_absolute(fn)) {
66870f90
ZJS
731 log_warning_unit(u->id,
732 "[%s:%u] PID file not absolute. Ignoring.",
733 path, line);
2c4104f0
LP
734 continue;
735 }
736
737 if (!(fn = strdup(fn))) {
738 r = -ENOMEM;
739 goto finish;
740 }
741
742 free(s->pid_file);
743 s->pid_file = fn;
744 }
745
746 } else if (state == DESCRIPTION) {
747
748 /* Try to parse Red Hat style description
749 * continuation */
750
751 size_t k = strlen(t);
0b5d26f9 752 char *j;
2c4104f0
LP
753
754 if (t[k-1] == '\\')
755 t[k-1] = 0;
756 else
757 state = NORMAL;
758
0b5d26f9
LP
759 if ((j = strstrip(t)) && *j) {
760 char *d = NULL;
761
762 if (chkconfig_description)
b7def684 763 d = strjoin(chkconfig_description, " ", j, NULL);
0b5d26f9
LP
764 else
765 d = strdup(j);
2c4104f0 766
0b5d26f9
LP
767 if (!d) {
768 r = -ENOMEM;
769 goto finish;
770 }
771
772 free(chkconfig_description);
773 chkconfig_description = d;
774 }
2c4104f0
LP
775
776 } else if (state == LSB || state == LSB_DESCRIPTION) {
777
c2b35af6 778 if (startswith_no_case(t, "Provides:")) {
2c4104f0
LP
779 char *i, *w;
780 size_t z;
781
782 state = LSB;
783
f60f22df 784 FOREACH_WORD_QUOTED(w, z, t+9, i) {
2c4104f0
LP
785 char *n, *m;
786
787 if (!(n = strndup(w, z))) {
788 r = -ENOMEM;
789 goto finish;
790 }
791
2b6bf07d 792 r = sysv_translate_facility(n, basename(path), &m);
2c4104f0
LP
793 free(n);
794
795 if (r < 0)
796 goto finish;
797
798 if (r == 0)
799 continue;
800
bd77d0fc 801 if (unit_name_to_type(m) == UNIT_SERVICE)
ce2c2265 802 r = unit_merge_by_name(u, m);
9700edb4
LP
803 else
804 /* NB: SysV targets
805 * which are provided
806 * by a service are
807 * pulled in by the
808 * services, as an
809 * indication that the
810 * generic service is
811 * now available. This
812 * is strictly
813 * one-way. The
814 * targets do NOT pull
815 * in the SysV
816 * services! */
817 r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, UNIT_WANTS, m, NULL, true);
bd77d0fc 818
2c4104f0 819 if (r < 0)
66870f90
ZJS
820 log_error_unit(u->id,
821 "[%s:%u] Failed to add LSB Provides name %s, ignoring: %s",
822 path, line, m, strerror(-r));
42a097a2
LP
823
824 free(m);
2c4104f0
LP
825 }
826
c2b35af6
LP
827 } else if (startswith_no_case(t, "Required-Start:") ||
828 startswith_no_case(t, "Should-Start:") ||
829 startswith_no_case(t, "X-Start-Before:") ||
830 startswith_no_case(t, "X-Start-After:")) {
2c4104f0
LP
831 char *i, *w;
832 size_t z;
833
834 state = LSB;
835
f60f22df 836 FOREACH_WORD_QUOTED(w, z, strchr(t, ':')+1, i) {
2c4104f0
LP
837 char *n, *m;
838
839 if (!(n = strndup(w, z))) {
840 r = -ENOMEM;
841 goto finish;
842 }
843
2b6bf07d 844 r = sysv_translate_facility(n, basename(path), &m);
e83c7c0b 845 if (r < 0) {
66870f90
ZJS
846 log_error_unit(u->id,
847 "[%s:%u] Failed to translate LSB dependency %s, ignoring: %s",
848 path, line, n, strerror(-r));
e83c7c0b
LP
849 free(n);
850 continue;
851 }
852
853 free(n);
2c4104f0
LP
854
855 if (r == 0)
856 continue;
857
c2b35af6 858 r = unit_add_dependency_by_name(u, startswith_no_case(t, "X-Start-Before:") ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true);
2c4104f0
LP
859
860 if (r < 0)
66870f90
ZJS
861 log_error_unit(u->id, "[%s:%u] Failed to add dependency on %s, ignoring: %s",
862 path, line, m, strerror(-r));
42a097a2
LP
863
864 free(m);
2c4104f0 865 }
c2b35af6 866 } else if (startswith_no_case(t, "Default-Start:")) {
8309400a
LP
867 char *k, *d;
868
869 state = LSB;
870
871 k = delete_chars(t+14, WHITESPACE "-");
872
873 if (k[0] != 0) {
874 if (!(d = strdup(k))) {
875 r = -ENOMEM;
876 goto finish;
877 }
878
879 free(s->sysv_runlevels);
880 s->sysv_runlevels = d;
881 }
2c4104f0 882
0b5d26f9
LP
883 } else if (startswith_no_case(t, "Description:")) {
884 char *d, *j;
ed4c1cc6 885
2c4104f0
LP
886 state = LSB_DESCRIPTION;
887
0b5d26f9
LP
888 if ((j = strstrip(t+12)) && *j) {
889 if (!(d = strdup(j))) {
890 r = -ENOMEM;
891 goto finish;
892 }
893 } else
894 d = NULL;
2c4104f0 895
0b5d26f9
LP
896 free(long_description);
897 long_description = d;
2c4104f0 898
ed4c1cc6 899 } else if (startswith_no_case(t, "Short-Description:")) {
0b5d26f9 900 char *d, *j;
2c4104f0 901
2c4104f0
LP
902 state = LSB;
903
0b5d26f9
LP
904 if ((j = strstrip(t+18)) && *j) {
905 if (!(d = strdup(j))) {
906 r = -ENOMEM;
907 goto finish;
908 }
909 } else
910 d = NULL;
2c4104f0 911
0b5d26f9
LP
912 free(short_description);
913 short_description = d;
2c4104f0
LP
914
915 } else if (state == LSB_DESCRIPTION) {
916
917 if (startswith(l, "#\t") || startswith(l, "# ")) {
0b5d26f9 918 char *j;
2c4104f0 919
0b5d26f9
LP
920 if ((j = strstrip(t)) && *j) {
921 char *d = NULL;
922
923 if (long_description)
b7def684 924 d = strjoin(long_description, " ", t, NULL);
0b5d26f9
LP
925 else
926 d = strdup(j);
927
928 if (!d) {
929 r = -ENOMEM;
930 goto finish;
931 }
932
933 free(long_description);
934 long_description = d;
2c4104f0
LP
935 }
936
2c4104f0
LP
937 } else
938 state = LSB;
939 }
940 }
941 }
942
37e2941d 943 if ((r = sysv_exec_commands(s, supports_reload)) < 0)
2c4104f0
LP
944 goto finish;
945
a40eb732 946 if (s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels)) {
0bc824be
LP
947 /* If there a runlevels configured for this service
948 * but none of the standard ones, then we assume this
949 * is some special kind of service (which might be
950 * needed for early boot) and don't create any links
951 * to it. */
952
1124fe6f 953 UNIT(s)->default_dependencies = false;
09cd1ab1 954
09cd1ab1 955 /* Don't timeout special services during boot (like fsck) */
d568a335
MS
956 s->timeout_start_usec = 0;
957 s->timeout_stop_usec = 0;
958 } else {
959 s->timeout_start_usec = DEFAULT_SYSV_TIMEOUT_USEC;
960 s->timeout_stop_usec = DEFAULT_SYSV_TIMEOUT_USEC;
961 }
962
80876c20 963 /* Special setting for all SysV services */
1f48cf56 964 s->type = SERVICE_FORKING;
f8788303 965 s->remain_after_exit = !s->pid_file;
1835f23c 966 s->guess_main_pid = false;
525ee6f4 967 s->restart = SERVICE_RESTART_NO;
353e12c2 968 s->exec_context.ignore_sigpipe = false;
4819ff03 969 s->kill_context.kill_mode = KILL_PROCESS;
80876c20 970
0b5d26f9
LP
971 /* We use the long description only if
972 * no short description is set. */
973
974 if (short_description)
975 description = short_description;
976 else if (chkconfig_description)
977 description = chkconfig_description;
978 else if (long_description)
979 description = long_description;
980 else
981 description = NULL;
982
983 if (description) {
984 char *d;
985
e527618d 986 if (!(d = strappend(s->sysv_has_lsb ? "LSB: " : "SYSV: ", description))) {
0b5d26f9
LP
987 r = -ENOMEM;
988 goto finish;
989 }
990
ac155bb8 991 u->description = d;
0b5d26f9
LP
992 }
993
ea87ca5a
LP
994 /* The priority that has been set in /etc/rcN.d/ hierarchies
995 * takes precedence over what is stored as default in the LSB
996 * header */
997 if (s->sysv_start_priority_from_rcnd >= 0)
998 s->sysv_start_priority = s->sysv_start_priority_from_rcnd;
999
ac155bb8 1000 u->load_state = UNIT_LOADED;
23a177ef 1001 r = 0;
2c4104f0
LP
1002
1003finish:
1004
1005 if (f)
1006 fclose(f);
1007
0b5d26f9
LP
1008 free(short_description);
1009 free(long_description);
1010 free(chkconfig_description);
1011
2c4104f0
LP
1012 return r;
1013}
1014
e537352b 1015static int service_load_sysv_name(Service *s, const char *name) {
2c4104f0
LP
1016 char **p;
1017
1018 assert(s);
1019 assert(name);
1020
c2756a68 1021 /* For SysV services we strip the *.sh suffixes. */
3f95f83c 1022 if (endswith(name, ".sh.service"))
d017c6ca
LP
1023 return -ENOENT;
1024
1124fe6f 1025 STRV_FOREACH(p, UNIT(s)->manager->lookup_paths.sysvinit_path) {
2c4104f0
LP
1026 char *path;
1027 int r;
1028
b7def684 1029 path = strjoin(*p, "/", name, NULL);
44d91056 1030 if (!path)
2c4104f0
LP
1031 return -ENOMEM;
1032
1033 assert(endswith(path, ".service"));
1034 path[strlen(path)-8] = 0;
1035
e537352b 1036 r = service_load_sysv_path(s, path);
fbe9f3a9 1037
1124fe6f 1038 if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) {
20771ae3 1039 /* Try *.sh source'able init scripts */
fbe9f3a9
LP
1040 strcat(path, ".sh");
1041 r = service_load_sysv_path(s, path);
1042 }
2c4104f0
LP
1043 free(path);
1044
23a177ef 1045 if (r < 0)
2c4104f0 1046 return r;
23a177ef 1047
88516c0c 1048 if (UNIT(s)->load_state != UNIT_STUB)
23a177ef 1049 break;
2c4104f0
LP
1050 }
1051
1052 return 0;
1053}
1054
e537352b 1055static int service_load_sysv(Service *s) {
2c4104f0
LP
1056 const char *t;
1057 Iterator i;
1058 int r;
1059
5cb5a6ff
LP
1060 assert(s);
1061
1062 /* Load service data from SysV init scripts, preferably with
1063 * LSB headers ... */
1064
1124fe6f 1065 if (strv_isempty(UNIT(s)->manager->lookup_paths.sysvinit_path))
2c4104f0
LP
1066 return 0;
1067
1124fe6f 1068 if ((t = UNIT(s)->id))
e537352b 1069 if ((r = service_load_sysv_name(s, t)) < 0)
2c4104f0
LP
1070 return r;
1071
1124fe6f
MS
1072 if (UNIT(s)->load_state == UNIT_STUB)
1073 SET_FOREACH(t, UNIT(s)->names, i) {
1074 if (t == UNIT(s)->id)
e537352b
LP
1075 continue;
1076
e364ad06 1077 if ((r = service_load_sysv_name(s, t)) < 0)
23a177ef
LP
1078 return r;
1079
1124fe6f 1080 if (UNIT(s)->load_state != UNIT_STUB)
23a177ef
LP
1081 break;
1082 }
2c4104f0
LP
1083
1084 return 0;
5cb5a6ff 1085}
07459bb6 1086#endif
5cb5a6ff 1087
243b1432
LP
1088static int service_verify(Service *s) {
1089 assert(s);
1090
1124fe6f 1091 if (UNIT(s)->load_state != UNIT_LOADED)
243b1432
LP
1092 return 0;
1093
1094 if (!s->exec_command[SERVICE_EXEC_START]) {
ebc2259d 1095 log_error_unit(UNIT(s)->id, "%s lacks ExecStart setting. Refusing.", UNIT(s)->id);
243b1432
LP
1096 return -EINVAL;
1097 }
1098
34e9ba66
LP
1099 if (s->type != SERVICE_ONESHOT &&
1100 s->exec_command[SERVICE_EXEC_START]->command_next) {
ebc2259d 1101 log_error_unit(UNIT(s)->id, "%s has more than one ExecStart setting, which is only allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
6cf6bbc2
LP
1102 return -EINVAL;
1103 }
1104
b0693d30 1105 if (s->type == SERVICE_ONESHOT && s->restart != SERVICE_RESTART_NO) {
ebc2259d 1106 log_error_unit(UNIT(s)->id, "%s has Restart setting other than no, which isn't allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
b0693d30
MW
1107 return -EINVAL;
1108 }
1109
05e343b7 1110 if (s->type == SERVICE_DBUS && !s->bus_name) {
ebc2259d 1111 log_error_unit(UNIT(s)->id, "%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", UNIT(s)->id);
4d0e5dbd
LP
1112 return -EINVAL;
1113 }
1114
7e2668c6 1115 if (s->bus_name && s->type != SERVICE_DBUS)
ebc2259d 1116 log_warning_unit(UNIT(s)->id, "%s has a D-Bus service name specified, but is not of type dbus. Ignoring.", UNIT(s)->id);
7e2668c6 1117
ebc2259d
LP
1118 if (s->exec_context.pam_name && !(s->kill_context.kill_mode == KILL_CONTROL_GROUP || s->kill_context.kill_mode == KILL_MIXED)) {
1119 log_error_unit(UNIT(s)->id, "%s has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.", UNIT(s)->id);
05e343b7
LP
1120 return -EINVAL;
1121 }
1122
243b1432
LP
1123 return 0;
1124}
1125
a40eb732
LP
1126static int service_add_default_dependencies(Service *s) {
1127 int r;
1128
1129 assert(s);
1130
1131 /* Add a number of automatic dependencies useful for the
1132 * majority of services. */
1133
1134 /* First, pull in base system */
fccd44ec
KS
1135 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
1136 SPECIAL_BASIC_TARGET, NULL, true);
1137 if (r < 0)
1138 return r;
a40eb732
LP
1139
1140 /* Second, activate normal shutdown */
117dcc57
ZJS
1141 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS,
1142 SPECIAL_SHUTDOWN_TARGET, NULL, true);
1143 return r;
a40eb732
LP
1144}
1145
4dfc092a
LP
1146static void service_fix_output(Service *s) {
1147 assert(s);
1148
1149 /* If nothing has been explicitly configured, patch default
1150 * output in. If input is socket/tty we avoid this however,
1151 * since in that case we want output to default to the same
1152 * place as we read input from. */
1153
1154 if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
1155 s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1156 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 1157 s->exec_context.std_error = UNIT(s)->manager->default_std_error;
4dfc092a
LP
1158
1159 if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1160 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 1161 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
4dfc092a
LP
1162}
1163
e537352b
LP
1164static int service_load(Unit *u) {
1165 int r;
1166 Service *s = SERVICE(u);
1167
1168 assert(s);
1e2e8133 1169
5cb5a6ff 1170 /* Load a .service file */
c2756a68
LP
1171 r = unit_load_fragment(u);
1172 if (r < 0)
5cb5a6ff
LP
1173 return r;
1174
07459bb6 1175#ifdef HAVE_SYSV_COMPAT
bd77d0fc 1176 /* Load a classic init script as a fallback, if we couldn't find anything */
c2756a68
LP
1177 if (u->load_state == UNIT_STUB) {
1178 r = service_load_sysv(s);
1179 if (r < 0)
23a177ef 1180 return r;
c2756a68 1181 }
07459bb6 1182#endif
d46de8a1 1183
23a177ef 1184 /* Still nothing found? Then let's give up */
ac155bb8 1185 if (u->load_state == UNIT_STUB)
23a177ef 1186 return -ENOENT;
034c6ed7 1187
23a177ef 1188 /* This is a new unit? Then let's add in some extras */
ac155bb8 1189 if (u->load_state == UNIT_LOADED) {
c2756a68
LP
1190
1191 /* We were able to load something, then let's add in
1192 * the dropin directories. */
1193 r = unit_load_dropin(u);
1194 if (r < 0)
1195 return r;
1196
0b86feac
LP
1197 if (s->type == _SERVICE_TYPE_INVALID)
1198 s->type = s->bus_name ? SERVICE_DBUS : SERVICE_SIMPLE;
1199
d568a335
MS
1200 /* Oneshot services have disabled start timeout by default */
1201 if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
1202 s->timeout_start_usec = 0;
98709151 1203
4e2b0f9b
LP
1204 service_fix_output(s);
1205
117dcc57
ZJS
1206 r = unit_add_exec_dependencies(u, &s->exec_context);
1207 if (r < 0)
23a177ef
LP
1208 return r;
1209
a016b922
LP
1210 r = unit_add_default_slice(u);
1211 if (r < 0)
1212 return r;
1213
07459bb6 1214#ifdef HAVE_SYSV_COMPAT
117dcc57
ZJS
1215 r = sysv_fix_order(s);
1216 if (r < 0)
23a177ef 1217 return r;
07459bb6 1218#endif
05e343b7 1219
718db961
LP
1220 if (s->bus_name) {
1221 r = unit_watch_bus_name(u, s->bus_name);
1222 if (r < 0)
a40eb732 1223 return r;
718db961 1224 }
c952c6ec
LP
1225
1226 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
1227 s->notify_access = NOTIFY_MAIN;
a40eb732 1228
02c4ef9c
LP
1229 if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
1230 s->notify_access = NOTIFY_MAIN;
1231
117dcc57
ZJS
1232 if (UNIT(s)->default_dependencies) {
1233 r = service_add_default_dependencies(s);
1234 if (r < 0)
a40eb732 1235 return r;
117dcc57 1236 }
e06c73cc 1237
cba6e062 1238 r = unit_exec_context_defaults(u, &s->exec_context);
e06c73cc
LP
1239 if (r < 0)
1240 return r;
8e274523
LP
1241 }
1242
243b1432 1243 return service_verify(s);
034c6ed7
LP
1244}
1245
87f0e418 1246static void service_dump(Unit *u, FILE *f, const char *prefix) {
5cb5a6ff 1247
5cb5a6ff 1248 ServiceExecCommand c;
87f0e418 1249 Service *s = SERVICE(u);
47be870b 1250 const char *prefix2;
7fd1b19b 1251 _cleanup_free_ char *p2 = NULL;
5cb5a6ff
LP
1252
1253 assert(s);
1254
47be870b
LP
1255 p2 = strappend(prefix, "\t");
1256 prefix2 = p2 ? p2 : prefix;
44d8db9e 1257
5cb5a6ff 1258 fprintf(f,
81a2b7ce 1259 "%sService State: %s\n"
f42806df
LP
1260 "%sResult: %s\n"
1261 "%sReload Result: %s\n"
81a2b7ce 1262 "%sPermissionsStartOnly: %s\n"
8e274523 1263 "%sRootDirectoryStartOnly: %s\n"
02ee865a 1264 "%sRemainAfterExit: %s\n"
3185a36b 1265 "%sGuessMainPID: %s\n"
c952c6ec 1266 "%sType: %s\n"
2cf3143a 1267 "%sRestart: %s\n"
c952c6ec 1268 "%sNotifyAccess: %s\n",
81a2b7ce 1269 prefix, service_state_to_string(s->state),
f42806df
LP
1270 prefix, service_result_to_string(s->result),
1271 prefix, service_result_to_string(s->reload_result),
81a2b7ce 1272 prefix, yes_no(s->permissions_start_only),
8e274523 1273 prefix, yes_no(s->root_directory_start_only),
02ee865a 1274 prefix, yes_no(s->remain_after_exit),
3185a36b 1275 prefix, yes_no(s->guess_main_pid),
c952c6ec 1276 prefix, service_type_to_string(s->type),
2cf3143a 1277 prefix, service_restart_to_string(s->restart),
c952c6ec 1278 prefix, notify_access_to_string(s->notify_access));
5cb5a6ff 1279
70123e68
LP
1280 if (s->control_pid > 0)
1281 fprintf(f,
ccd06097
ZJS
1282 "%sControl PID: "PID_FMT"\n",
1283 prefix, s->control_pid);
70123e68
LP
1284
1285 if (s->main_pid > 0)
1286 fprintf(f,
ccd06097 1287 "%sMain PID: "PID_FMT"\n"
6dfa5494
LP
1288 "%sMain PID Known: %s\n"
1289 "%sMain PID Alien: %s\n",
ccd06097 1290 prefix, s->main_pid,
6dfa5494
LP
1291 prefix, yes_no(s->main_pid_known),
1292 prefix, yes_no(s->main_pid_alien));
70123e68 1293
034c6ed7
LP
1294 if (s->pid_file)
1295 fprintf(f,
1296 "%sPIDFile: %s\n",
1297 prefix, s->pid_file);
1298
05e343b7
LP
1299 if (s->bus_name)
1300 fprintf(f,
1301 "%sBusName: %s\n"
1302 "%sBus Name Good: %s\n",
1303 prefix, s->bus_name,
1304 prefix, yes_no(s->bus_name_good));
1305
4819ff03 1306 kill_context_dump(&s->kill_context, f, prefix);
5cb5a6ff
LP
1307 exec_context_dump(&s->exec_context, f, prefix);
1308
e537352b 1309 for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
5cb5a6ff 1310
44d8db9e
LP
1311 if (!s->exec_command[c])
1312 continue;
1313
40d50879 1314 fprintf(f, "%s-> %s:\n",
94f04347 1315 prefix, service_exec_command_to_string(c));
44d8db9e
LP
1316
1317 exec_command_dump_list(s->exec_command[c], f, prefix2);
5cb5a6ff 1318 }
44d8db9e 1319
07459bb6 1320#ifdef HAVE_SYSV_COMPAT
1b64d026 1321 if (s->is_sysv)
2c4104f0 1322 fprintf(f,
9fff8a1f
LP
1323 "%sSysV Init Script has LSB Header: %s\n"
1324 "%sSysVEnabled: %s\n",
9fff8a1f
LP
1325 prefix, yes_no(s->sysv_has_lsb),
1326 prefix, yes_no(s->sysv_enabled));
2c4104f0
LP
1327
1328 if (s->sysv_start_priority >= 0)
1329 fprintf(f,
9fff8a1f
LP
1330 "%sSysVStartPriority: %i\n",
1331 prefix, s->sysv_start_priority);
2c4104f0 1332
8309400a
LP
1333 if (s->sysv_runlevels)
1334 fprintf(f, "%sSysVRunLevels: %s\n",
1335 prefix, s->sysv_runlevels);
07459bb6 1336#endif
23a177ef 1337
8c47c732
LP
1338 if (s->status_text)
1339 fprintf(f, "%sStatus Text: %s\n",
1340 prefix, s->status_text);
5cb5a6ff
LP
1341}
1342
c5419d42 1343static int service_load_pid_file(Service *s, bool may_warn) {
7fd1b19b 1344 _cleanup_free_ char *k = NULL;
034c6ed7 1345 int r;
5925dd3c 1346 pid_t pid;
034c6ed7
LP
1347
1348 assert(s);
1349
034c6ed7 1350 if (!s->pid_file)
13230d5d 1351 return -ENOENT;
034c6ed7 1352
117dcc57
ZJS
1353 r = read_one_line_file(s->pid_file, &k);
1354 if (r < 0) {
c5419d42 1355 if (may_warn)
66870f90
ZJS
1356 log_info_unit(UNIT(s)->id,
1357 "PID file %s not readable (yet?) after %s.",
1358 s->pid_file, service_state_to_string(s->state));
034c6ed7 1359 return r;
5375410b 1360 }
034c6ed7 1361
5925dd3c 1362 r = parse_pid(k, &pid);
bc41f93e
ZJS
1363 if (r < 0) {
1364 if (may_warn)
1365 log_info_unit(UNIT(s)->id,
1366 "Failed to read PID from file %s: %s",
1367 s->pid_file, strerror(-r));
5925dd3c 1368 return r;
bc41f93e 1369 }
406eaf93 1370
5925dd3c 1371 if (kill(pid, 0) < 0 && errno != EPERM) {
c5419d42 1372 if (may_warn)
66870f90 1373 log_info_unit(UNIT(s)->id,
ccd06097
ZJS
1374 "PID "PID_FMT" read from file %s does not exist.",
1375 pid, s->pid_file);
b8c597d5
LP
1376 return -ESRCH;
1377 }
1378
e3025da1
YS
1379 r = get_process_state(pid);
1380 if (r < 0) {
1381 if (may_warn)
1382 log_info_unit(UNIT(s)->id, "Failed to read /proc/%d/stat: %s",
1383 pid, strerror(-r));
1384 return r;
1385 } else if (r == 'Z') {
e10c9985
YS
1386 if (may_warn)
1387 log_info_unit(UNIT(s)->id,
1388 "PID "PID_FMT" read from file %s is a zombie.",
1389 pid, s->pid_file);
1390 return -ESRCH;
1391 }
1392
db01f8b3
MS
1393 if (s->main_pid_known) {
1394 if (pid == s->main_pid)
1395 return 0;
1396
66870f90 1397 log_debug_unit(UNIT(s)->id,
ccd06097
ZJS
1398 "Main PID changing: "PID_FMT" -> "PID_FMT,
1399 s->main_pid, pid);
db01f8b3
MS
1400 service_unwatch_main_pid(s);
1401 s->main_pid_known = false;
3a111838 1402 } else
66870f90 1403 log_debug_unit(UNIT(s)->id,
ccd06097 1404 "Main PID loaded: "PID_FMT, pid);
db01f8b3 1405
117dcc57
ZJS
1406 r = service_set_main_pid(s, pid);
1407 if (r < 0)
16f6025e
LP
1408 return r;
1409
117dcc57 1410 r = unit_watch_pid(UNIT(s), pid);
bc41f93e 1411 if (r < 0) {
5925dd3c 1412 /* FIXME: we need to do something here */
bc41f93e 1413 log_warning_unit(UNIT(s)->id,
ccd06097
ZJS
1414 "Failed to watch PID "PID_FMT" from service %s",
1415 pid, UNIT(s)->id);
5925dd3c 1416 return r;
bc41f93e 1417 }
034c6ed7
LP
1418
1419 return 0;
1420}
1421
4fbf50b3
LP
1422static int service_search_main_pid(Service *s) {
1423 pid_t pid;
1424 int r;
1425
1426 assert(s);
1427
3185a36b
LP
1428 /* If we know it anyway, don't ever fallback to unreliable
1429 * heuristics */
4fbf50b3
LP
1430 if (s->main_pid_known)
1431 return 0;
1432
3185a36b
LP
1433 if (!s->guess_main_pid)
1434 return 0;
1435
4fbf50b3
LP
1436 assert(s->main_pid <= 0);
1437
4ad49000 1438 pid = unit_search_main_pid(UNIT(s));
117dcc57 1439 if (pid <= 0)
4fbf50b3
LP
1440 return -ENOENT;
1441
66870f90 1442 log_debug_unit(UNIT(s)->id,
ccd06097 1443 "Main PID guessed: "PID_FMT, pid);
117dcc57
ZJS
1444 r = service_set_main_pid(s, pid);
1445 if (r < 0)
4fbf50b3
LP
1446 return r;
1447
117dcc57
ZJS
1448 r = unit_watch_pid(UNIT(s), pid);
1449 if (r < 0)
4fbf50b3 1450 /* FIXME: we need to do something here */
a827e373 1451 log_warning_unit(UNIT(s)->id,
ccd06097
ZJS
1452 "Failed to watch PID "PID_FMT" from service %s",
1453 pid, UNIT(s)->id);
4fbf50b3
LP
1454 return r;
1455
1456 return 0;
1457}
1458
034c6ed7
LP
1459static void service_set_state(Service *s, ServiceState state) {
1460 ServiceState old_state;
e056b01d 1461 const UnitActiveState *table;
842129f5 1462
5cb5a6ff
LP
1463 assert(s);
1464
e056b01d
LP
1465 table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1466
034c6ed7 1467 old_state = s->state;
5cb5a6ff 1468 s->state = state;
034c6ed7 1469
3a111838
MS
1470 service_unwatch_pid_file(s);
1471
842129f5
LP
1472 if (!IN_SET(state,
1473 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1474 SERVICE_RELOAD,
bf108e55
LP
1475 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1476 SERVICE_STOP_POST,
842129f5
LP
1477 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
1478 SERVICE_AUTO_RESTART))
718db961 1479 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 1480
842129f5
LP
1481 if (!IN_SET(state,
1482 SERVICE_START, SERVICE_START_POST,
1483 SERVICE_RUNNING, SERVICE_RELOAD,
bf108e55
LP
1484 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1485 SERVICE_STOP_POST,
1486 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1487 service_unwatch_main_pid(s);
867b3b7d
LP
1488 s->main_command = NULL;
1489 }
034c6ed7 1490
842129f5
LP
1491 if (!IN_SET(state,
1492 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1493 SERVICE_RELOAD,
bf108e55
LP
1494 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1495 SERVICE_STOP_POST,
842129f5 1496 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1497 service_unwatch_control_pid(s);
034c6ed7 1498 s->control_command = NULL;
a16e1123 1499 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
e537352b 1500 }
034c6ed7 1501
a911bb9a
LP
1502 if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1503 unit_unwatch_all_pids(UNIT(s));
1504
842129f5
LP
1505 if (!IN_SET(state,
1506 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1507 SERVICE_RUNNING, SERVICE_RELOAD,
1508 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1509 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
1124fe6f 1510 !(state == SERVICE_DEAD && UNIT(s)->job)) {
4f2d528d 1511 service_close_socket_fd(s);
6cf6bbc2
LP
1512 service_connection_unref(s);
1513 }
4f2d528d 1514
7596e9e1 1515 if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
a6927d7f
MO
1516 service_stop_watchdog(s);
1517
f6023656
LP
1518 /* For the inactive states unit_notify() will trim the cgroup,
1519 * but for exit we have to do that ourselves... */
1124fe6f 1520 if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
4ad49000 1521 unit_destroy_cgroup(UNIT(s));
f6023656 1522
9cd86184
OB
1523 /* For remain_after_exit services, let's see if we can "release" the
1524 * hold on the console, since unit_notify() only does that in case of
1525 * change of state */
1526 if (state == SERVICE_EXITED && s->remain_after_exit &&
1527 UNIT(s)->manager->n_on_console > 0) {
1528 ExecContext *ec = unit_get_exec_context(UNIT(s));
1529 if (ec && exec_context_may_touch_console(ec)) {
1530 Manager *m = UNIT(s)->manager;
1531
1532 m->n_on_console --;
1533 if (m->n_on_console == 0)
1534 /* unset no_console_output flag, since the console is free */
1535 m->no_console_output = false;
1536 }
1537 }
1538
e537352b 1539 if (old_state != state)
842129f5 1540 log_debug_unit(UNIT(s)->id, "%s changed %s -> %s", UNIT(s)->id, service_state_to_string(old_state), service_state_to_string(state));
acbb0225 1541
e056b01d 1542 unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
f42806df 1543 s->reload_result = SERVICE_SUCCESS;
034c6ed7
LP
1544}
1545
a16e1123
LP
1546static int service_coldplug(Unit *u) {
1547 Service *s = SERVICE(u);
1548 int r;
1549
1550 assert(s);
1551 assert(s->state == SERVICE_DEAD);
1552
1553 if (s->deserialized_state != s->state) {
1554
bf108e55
LP
1555 if (IN_SET(s->deserialized_state,
1556 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1557 SERVICE_RELOAD,
1558 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1559 SERVICE_STOP_POST,
1560 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
92c1622e
LP
1561
1562 usec_t k;
6c12b52e 1563
bf108e55 1564 k = IN_SET(s->deserialized_state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec;
e558336f 1565
92c1622e
LP
1566 /* For the start/stop timeouts 0 means off */
1567 if (k > 0) {
1568 r = service_arm_timer(s, k);
36697dc0 1569 if (r < 0)
e558336f
LP
1570 return r;
1571 }
1572 }
a16e1123 1573
92c1622e
LP
1574 if (s->deserialized_state == SERVICE_AUTO_RESTART) {
1575
1576 /* The restart timeouts 0 means immediately */
1577 r = service_arm_timer(s, s->restart_usec);
1578 if (r < 0)
1579 return r;
1580 }
1581
bf108e55
LP
1582 if (pid_valid(s->main_pid) &&
1583 ((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
1584 IN_SET(s->deserialized_state,
1585 SERVICE_START, SERVICE_START_POST,
1586 SERVICE_RUNNING, SERVICE_RELOAD,
1587 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1588 SERVICE_STOP_POST,
1589 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
1590 r = unit_watch_pid(UNIT(s), s->main_pid);
1591 if (r < 0)
1592 return r;
1593 }
a16e1123 1594
bf108e55
LP
1595 if (pid_valid(s->control_pid) &&
1596 IN_SET(s->deserialized_state,
1597 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1598 SERVICE_RELOAD,
1599 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1600 SERVICE_STOP_POST,
1601 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1602 r = unit_watch_pid(UNIT(s), s->control_pid);
1603 if (r < 0)
1604 return r;
1605 }
a16e1123 1606
a911bb9a
LP
1607 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1608 unit_watch_all_pids(UNIT(s));
1609
842129f5
LP
1610 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1611 service_start_watchdog(s);
bb242b7b 1612
a16e1123
LP
1613 service_set_state(s, s->deserialized_state);
1614 }
92c1622e 1615
a16e1123
LP
1616 return 0;
1617}
1618
44d8db9e
LP
1619static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1620 Iterator i;
1621 int r;
1622 int *rfds = NULL;
1623 unsigned rn_fds = 0;
57020a3a 1624 Unit *u;
44d8db9e
LP
1625
1626 assert(s);
1627 assert(fds);
1628 assert(n_fds);
1629
6cf6bbc2
LP
1630 if (s->socket_fd >= 0)
1631 return 0;
1632
1124fe6f 1633 SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
44d8db9e
LP
1634 int *cfds;
1635 unsigned cn_fds;
57020a3a
LP
1636 Socket *sock;
1637
ac155bb8 1638 if (u->type != UNIT_SOCKET)
57020a3a
LP
1639 continue;
1640
1641 sock = SOCKET(u);
44d8db9e 1642
117dcc57
ZJS
1643 r = socket_collect_fds(sock, &cfds, &cn_fds);
1644 if (r < 0)
44d8db9e
LP
1645 goto fail;
1646
1647 if (!cfds)
1648 continue;
1649
1650 if (!rfds) {
1651 rfds = cfds;
1652 rn_fds = cn_fds;
1653 } else {
1654 int *t;
1655
117dcc57
ZJS
1656 t = new(int, rn_fds+cn_fds);
1657 if (!t) {
44d8db9e
LP
1658 free(cfds);
1659 r = -ENOMEM;
1660 goto fail;
1661 }
1662
9c1b183c
LP
1663 memcpy(t, rfds, rn_fds * sizeof(int));
1664 memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
44d8db9e
LP
1665 free(rfds);
1666 free(cfds);
1667
1668 rfds = t;
1669 rn_fds = rn_fds+cn_fds;
1670 }
1671 }
1672
1673 *fds = rfds;
1674 *n_fds = rn_fds;
3e33402a 1675
44d8db9e
LP
1676 return 0;
1677
1678fail:
1679 free(rfds);
3e33402a 1680
44d8db9e
LP
1681 return r;
1682}
1683
81a2b7ce
LP
1684static int service_spawn(
1685 Service *s,
1686 ExecCommand *c,
1687 bool timeout,
1688 bool pass_fds,
1689 bool apply_permissions,
1690 bool apply_chroot,
1e3ad081 1691 bool apply_tty_stdin,
c952c6ec 1692 bool set_notify_socket,
ecedd90f 1693 bool is_control,
81a2b7ce
LP
1694 pid_t *_pid) {
1695
034c6ed7
LP
1696 pid_t pid;
1697 int r;
117dcc57 1698 int *fds = NULL;
7fd1b19b 1699 _cleanup_free_ int *fdsbuf = NULL;
2105e76a 1700 unsigned n_fds = 0, n_env = 0;
7fd1b19b 1701 _cleanup_strv_free_ char
117dcc57 1702 **argv = NULL, **final_env = NULL, **our_env = NULL;
4ad49000 1703 const char *path;
034c6ed7
LP
1704
1705 assert(s);
1706 assert(c);
1707 assert(_pid);
1708
4ad49000
LP
1709 unit_realize_cgroup(UNIT(s));
1710
613b411c
LP
1711 r = unit_setup_exec_runtime(UNIT(s));
1712 if (r < 0)
1713 goto fail;
1714
6cf6bbc2
LP
1715 if (pass_fds ||
1716 s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1717 s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1718 s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1719
4f2d528d
LP
1720 if (s->socket_fd >= 0) {
1721 fds = &s->socket_fd;
1722 n_fds = 1;
6cf6bbc2 1723 } else {
117dcc57
ZJS
1724 r = service_collect_fds(s, &fdsbuf, &n_fds);
1725 if (r < 0)
6cf6bbc2
LP
1726 goto fail;
1727
1728 fds = fdsbuf;
1729 }
4f2d528d 1730 }
44d8db9e 1731
92c1622e
LP
1732 if (timeout && s->timeout_start_usec > 0) {
1733 r = service_arm_timer(s, s->timeout_start_usec);
1734 if (r < 0)
1735 goto fail;
1736 } else
1737 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 1738
19f6d710
LP
1739 r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
1740 if (r < 0)
9e2f7c11 1741 goto fail;
9e2f7c11 1742
09812eb7 1743 our_env = new0(char*, 4);
97ae63e2 1744 if (!our_env) {
2105e76a
LP
1745 r = -ENOMEM;
1746 goto fail;
1747 }
c952c6ec 1748
2105e76a 1749 if (set_notify_socket)
1124fe6f 1750 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
c952c6ec
LP
1751 r = -ENOMEM;
1752 goto fail;
1753 }
1754
2105e76a 1755 if (s->main_pid > 0)
ccd06097 1756 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
c952c6ec
LP
1757 r = -ENOMEM;
1758 goto fail;
1759 }
2105e76a 1760
4ad49000 1761 if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
ccd06097 1762 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
97ae63e2
LP
1763 r = -ENOMEM;
1764 goto fail;
1765 }
1766
1767 final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
1768 if (!final_env) {
2105e76a
LP
1769 r = -ENOMEM;
1770 goto fail;
1771 }
c952c6ec 1772
4ad49000
LP
1773 if (is_control && UNIT(s)->cgroup_path) {
1774 path = strappenda(UNIT(s)->cgroup_path, "/control");
1775 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
1776 } else
1777 path = UNIT(s)->cgroup_path;
1778
9e2f7c11
LP
1779 r = exec_spawn(c,
1780 argv,
1781 &s->exec_context,
1782 fds, n_fds,
2105e76a 1783 final_env,
9e2f7c11
LP
1784 apply_permissions,
1785 apply_chroot,
1e3ad081 1786 apply_tty_stdin,
1124fe6f 1787 UNIT(s)->manager->confirm_spawn,
13b84ec7 1788 UNIT(s)->manager->cgroup_supported,
4ad49000 1789 path,
62bca2c6 1790 UNIT(s)->id,
09812eb7 1791 s->watchdog_usec,
f2b68789 1792 s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
613b411c 1793 s->exec_runtime,
9e2f7c11 1794 &pid);
9e2f7c11 1795 if (r < 0)
034c6ed7
LP
1796 goto fail;
1797
117dcc57
ZJS
1798 r = unit_watch_pid(UNIT(s), pid);
1799 if (r < 0)
034c6ed7
LP
1800 /* FIXME: we need to do something here */
1801 goto fail;
1802
1803 *_pid = pid;
1804
5cb5a6ff 1805 return 0;
034c6ed7
LP
1806
1807fail:
1808 if (timeout)
718db961 1809 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7
LP
1810
1811 return r;
1812}
1813
80876c20
LP
1814static int main_pid_good(Service *s) {
1815 assert(s);
1816
1817 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1818 * don't know */
1819
1820 /* If we know the pid file, then lets just check if it is
1821 * still valid */
6dfa5494
LP
1822 if (s->main_pid_known) {
1823
1824 /* If it's an alien child let's check if it is still
1825 * alive ... */
62220cf7 1826 if (s->main_pid_alien && s->main_pid > 0)
6dfa5494
LP
1827 return kill(s->main_pid, 0) >= 0 || errno != ESRCH;
1828
1829 /* .. otherwise assume we'll get a SIGCHLD for it,
1830 * which we really should wait for to collect exit
1831 * status and code */
80876c20 1832 return s->main_pid > 0;
6dfa5494 1833 }
80876c20
LP
1834
1835 /* We don't know the pid */
1836 return -EAGAIN;
1837}
1838
44a6b1b6 1839_pure_ static int control_pid_good(Service *s) {
80876c20
LP
1840 assert(s);
1841
1842 return s->control_pid > 0;
1843}
1844
1845static int cgroup_good(Service *s) {
1846 int r;
1847
1848 assert(s);
1849
4ad49000
LP
1850 if (!UNIT(s)->cgroup_path)
1851 return 0;
1852
1853 r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
117dcc57 1854 if (r < 0)
80876c20
LP
1855 return r;
1856
1857 return !r;
1858}
1859
f42806df 1860static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
034c6ed7
LP
1861 int r;
1862 assert(s);
1863
f42806df
LP
1864 if (f != SERVICE_SUCCESS)
1865 s->result = f;
034c6ed7 1866
0c7f15b3
MS
1867 service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1868
034c6ed7 1869 if (allow_restart &&
47342320 1870 !s->forbid_restart &&
034c6ed7 1871 (s->restart == SERVICE_RESTART_ALWAYS ||
f42806df
LP
1872 (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1873 (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
dc99a976 1874 (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
f42806df 1875 (s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
96342de6
LN
1876 s->result == SERVICE_FAILURE_CORE_DUMP))) &&
1877 (s->result != SERVICE_FAILURE_EXIT_CODE ||
1878 !set_contains(s->restart_ignore_status.code, INT_TO_PTR(s->main_exec_status.status))) &&
1879 (s->result != SERVICE_FAILURE_SIGNAL ||
718db961 1880 !set_contains(s->restart_ignore_status.signal, INT_TO_PTR(s->main_exec_status.status)))) {
034c6ed7 1881
718db961 1882 r = service_arm_timer(s, s->restart_usec);
f42806df 1883 if (r < 0)
034c6ed7
LP
1884 goto fail;
1885
1886 service_set_state(s, SERVICE_AUTO_RESTART);
0c7f15b3 1887 }
034c6ed7 1888
47342320
LP
1889 s->forbid_restart = false;
1890
c17ec25e 1891 /* we want fresh tmpdirs in case service is started again immediately */
613b411c
LP
1892 exec_runtime_destroy(s->exec_runtime);
1893 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
c17ec25e 1894
9285c9ff
LN
1895 /* Try to delete the pid file. At this point it will be
1896 * out-of-date, and some software might be confused by it, so
1897 * let's remove it. */
1898 if (s->pid_file)
1899 unlink_noerrno(s->pid_file);
1900
034c6ed7
LP
1901 return;
1902
1903fail:
66870f90
ZJS
1904 log_warning_unit(UNIT(s)->id,
1905 "%s failed to run install restart timer: %s",
1906 UNIT(s)->id, strerror(-r));
f42806df 1907 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1908}
1909
f42806df 1910static void service_enter_stop_post(Service *s, ServiceResult f) {
034c6ed7
LP
1911 int r;
1912 assert(s);
1913
f42806df
LP
1914 if (f != SERVICE_SUCCESS)
1915 s->result = f;
034c6ed7 1916
5e94833f 1917 service_unwatch_control_pid(s);
a911bb9a 1918 unit_watch_all_pids(UNIT(s));
5e94833f 1919
117dcc57
ZJS
1920 s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1921 if (s->control_command) {
867b3b7d
LP
1922 s->control_command_id = SERVICE_EXEC_STOP_POST;
1923
ecedd90f
LP
1924 r = service_spawn(s,
1925 s->control_command,
1926 true,
1927 false,
1928 !s->permissions_start_only,
1929 !s->root_directory_start_only,
1930 true,
1931 false,
1932 true,
1933 &s->control_pid);
1934 if (r < 0)
034c6ed7
LP
1935 goto fail;
1936
80876c20
LP
1937 service_set_state(s, SERVICE_STOP_POST);
1938 } else
ac84d1fb 1939 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1940
1941 return;
1942
1943fail:
66870f90
ZJS
1944 log_warning_unit(UNIT(s)->id,
1945 "%s failed to run 'stop-post' task: %s",
1946 UNIT(s)->id, strerror(-r));
f42806df 1947 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1948}
1949
f42806df 1950static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
034c6ed7 1951 int r;
034c6ed7
LP
1952
1953 assert(s);
1954
f42806df
LP
1955 if (f != SERVICE_SUCCESS)
1956 s->result = f;
034c6ed7 1957
a911bb9a
LP
1958 unit_watch_all_pids(UNIT(s));
1959
cd2086fe
LP
1960 r = unit_kill_context(
1961 UNIT(s),
1962 &s->kill_context,
1963 state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
1964 s->main_pid,
1965 s->control_pid,
1966 s->main_pid_alien);
ac84d1fb 1967
cd2086fe
LP
1968 if (r < 0)
1969 goto fail;
034c6ed7 1970
cd2086fe 1971 if (r > 0) {
d568a335 1972 if (s->timeout_stop_usec > 0) {
718db961 1973 r = service_arm_timer(s, s->timeout_stop_usec);
d568a335 1974 if (r < 0)
e558336f 1975 goto fail;
d568a335 1976 }
d6ea93e3 1977
80876c20 1978 service_set_state(s, state);
ac84d1fb
LP
1979 } else if (state == SERVICE_STOP_SIGTERM)
1980 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1981 else if (state == SERVICE_STOP_SIGKILL)
f42806df 1982 service_enter_stop_post(s, SERVICE_SUCCESS);
ac84d1fb
LP
1983 else if (state == SERVICE_FINAL_SIGTERM)
1984 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
80876c20 1985 else
f42806df 1986 service_enter_dead(s, SERVICE_SUCCESS, true);
034c6ed7
LP
1987
1988 return;
1989
1990fail:
66870f90
ZJS
1991 log_warning_unit(UNIT(s)->id,
1992 "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
034c6ed7 1993
80876c20 1994 if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
f42806df 1995 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
034c6ed7 1996 else
f42806df 1997 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1998}
1999
f42806df 2000static void service_enter_stop(Service *s, ServiceResult f) {
034c6ed7 2001 int r;
5925dd3c 2002
034c6ed7
LP
2003 assert(s);
2004
f42806df
LP
2005 if (f != SERVICE_SUCCESS)
2006 s->result = f;
034c6ed7 2007
5e94833f 2008 service_unwatch_control_pid(s);
a911bb9a 2009 unit_watch_all_pids(UNIT(s));
5e94833f 2010
117dcc57
ZJS
2011 s->control_command = s->exec_command[SERVICE_EXEC_STOP];
2012 if (s->control_command) {
867b3b7d
LP
2013 s->control_command_id = SERVICE_EXEC_STOP;
2014
ecedd90f
LP
2015 r = service_spawn(s,
2016 s->control_command,
2017 true,
2018 false,
2019 !s->permissions_start_only,
2020 !s->root_directory_start_only,
2021 false,
2022 false,
2023 true,
2024 &s->control_pid);
2025 if (r < 0)
034c6ed7
LP
2026 goto fail;
2027
80876c20
LP
2028 service_set_state(s, SERVICE_STOP);
2029 } else
f42806df 2030 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
2031
2032 return;
2033
2034fail:
66870f90
ZJS
2035 log_warning_unit(UNIT(s)->id,
2036 "%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2037 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2038}
2039
f42806df 2040static void service_enter_running(Service *s, ServiceResult f) {
4eab639f 2041 int main_pid_ok, cgroup_ok;
80876c20
LP
2042 assert(s);
2043
f42806df
LP
2044 if (f != SERVICE_SUCCESS)
2045 s->result = f;
80876c20 2046
4eab639f
LP
2047 main_pid_ok = main_pid_good(s);
2048 cgroup_ok = cgroup_good(s);
2049
2050 if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
05e343b7 2051 (s->bus_name_good || s->type != SERVICE_DBUS))
80876c20 2052 service_set_state(s, SERVICE_RUNNING);
02ee865a 2053 else if (s->remain_after_exit)
80876c20
LP
2054 service_set_state(s, SERVICE_EXITED);
2055 else
f42806df 2056 service_enter_stop(s, SERVICE_SUCCESS);
80876c20
LP
2057}
2058
034c6ed7
LP
2059static void service_enter_start_post(Service *s) {
2060 int r;
2061 assert(s);
2062
5e94833f 2063 service_unwatch_control_pid(s);
842129f5 2064 service_reset_watchdog(s);
bb242b7b 2065
117dcc57
ZJS
2066 s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
2067 if (s->control_command) {
867b3b7d
LP
2068 s->control_command_id = SERVICE_EXEC_START_POST;
2069
ecedd90f
LP
2070 r = service_spawn(s,
2071 s->control_command,
2072 true,
2073 false,
2074 !s->permissions_start_only,
2075 !s->root_directory_start_only,
2076 false,
2077 false,
2078 true,
2079 &s->control_pid);
2080 if (r < 0)
034c6ed7
LP
2081 goto fail;
2082
80876c20
LP
2083 service_set_state(s, SERVICE_START_POST);
2084 } else
f42806df 2085 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2086
2087 return;
2088
2089fail:
66870f90
ZJS
2090 log_warning_unit(UNIT(s)->id,
2091 "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2092 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2093}
2094
4ad49000
LP
2095static void service_kill_control_processes(Service *s) {
2096 char *p;
2097
2098 if (!UNIT(s)->cgroup_path)
2099 return;
2100
2101 p = strappenda(UNIT(s)->cgroup_path, "/control");
4ad49000
LP
2102 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
2103}
2104
034c6ed7 2105static void service_enter_start(Service *s) {
4ad49000 2106 ExecCommand *c;
034c6ed7
LP
2107 pid_t pid;
2108 int r;
2109
2110 assert(s);
2111
2112 assert(s->exec_command[SERVICE_EXEC_START]);
34e9ba66 2113 assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
034c6ed7 2114
41efeaec
LP
2115 service_unwatch_control_pid(s);
2116 service_unwatch_main_pid(s);
80876c20 2117
8f53a7b8
LP
2118 /* We want to ensure that nobody leaks processes from
2119 * START_PRE here, so let's go on a killing spree, People
2120 * should not spawn long running processes from START_PRE. */
4ad49000 2121 service_kill_control_processes(s);
8f53a7b8 2122
867b3b7d
LP
2123 if (s->type == SERVICE_FORKING) {
2124 s->control_command_id = SERVICE_EXEC_START;
2125 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
2126
2127 s->main_command = NULL;
2128 } else {
2129 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2130 s->control_command = NULL;
2131
2132 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
2133 }
34e9ba66 2134
ecedd90f
LP
2135 r = service_spawn(s,
2136 c,
117dcc57
ZJS
2137 s->type == SERVICE_FORKING || s->type == SERVICE_DBUS ||
2138 s->type == SERVICE_NOTIFY || s->type == SERVICE_ONESHOT,
ecedd90f
LP
2139 true,
2140 true,
2141 true,
2142 true,
2143 s->notify_access != NOTIFY_NONE,
2144 false,
2145 &pid);
2146 if (r < 0)
034c6ed7
LP
2147 goto fail;
2148
f2b68789 2149 if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
034c6ed7
LP
2150 /* For simple services we immediately start
2151 * the START_POST binaries. */
2152
5925dd3c 2153 service_set_main_pid(s, pid);
034c6ed7
LP
2154 service_enter_start_post(s);
2155
2156 } else if (s->type == SERVICE_FORKING) {
2157
2158 /* For forking services we wait until the start
2159 * process exited. */
2160
e55224ca 2161 s->control_pid = pid;
80876c20
LP
2162 service_set_state(s, SERVICE_START);
2163
34e9ba66 2164 } else if (s->type == SERVICE_ONESHOT ||
8c47c732
LP
2165 s->type == SERVICE_DBUS ||
2166 s->type == SERVICE_NOTIFY) {
7d55e835 2167
34e9ba66 2168 /* For oneshot services we wait until the start
7d55e835
LP
2169 * process exited, too, but it is our main process. */
2170
05e343b7 2171 /* For D-Bus services we know the main pid right away,
8c47c732
LP
2172 * but wait for the bus name to appear on the
2173 * bus. Notify services are similar. */
05e343b7 2174
5925dd3c 2175 service_set_main_pid(s, pid);
80876c20 2176 service_set_state(s, SERVICE_START);
034c6ed7
LP
2177 } else
2178 assert_not_reached("Unknown service type");
2179
2180 return;
2181
2182fail:
66870f90
ZJS
2183 log_warning_unit(UNIT(s)->id,
2184 "%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2185 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2186}
2187
2188static void service_enter_start_pre(Service *s) {
2189 int r;
2190
2191 assert(s);
2192
5e94833f
LP
2193 service_unwatch_control_pid(s);
2194
117dcc57
ZJS
2195 s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
2196 if (s->control_command) {
8f53a7b8
LP
2197 /* Before we start anything, let's clear up what might
2198 * be left from previous runs. */
4ad49000 2199 service_kill_control_processes(s);
8f53a7b8 2200
867b3b7d
LP
2201 s->control_command_id = SERVICE_EXEC_START_PRE;
2202
ecedd90f
LP
2203 r = service_spawn(s,
2204 s->control_command,
2205 true,
2206 false,
2207 !s->permissions_start_only,
2208 !s->root_directory_start_only,
2209 true,
2210 false,
2211 true,
2212 &s->control_pid);
2213 if (r < 0)
034c6ed7
LP
2214 goto fail;
2215
80876c20
LP
2216 service_set_state(s, SERVICE_START_PRE);
2217 } else
034c6ed7
LP
2218 service_enter_start(s);
2219
2220 return;
2221
2222fail:
66870f90
ZJS
2223 log_warning_unit(UNIT(s)->id,
2224 "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2225 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
2226}
2227
2228static void service_enter_restart(Service *s) {
718db961 2229 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
034c6ed7 2230 int r;
398ef8ba 2231
034c6ed7
LP
2232 assert(s);
2233
a8bb2e65
LP
2234 if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
2235 /* Don't restart things if we are going down anyway */
66870f90
ZJS
2236 log_info_unit(UNIT(s)->id,
2237 "Stop job pending for unit, delaying automatic restart.");
2edfa366 2238
718db961 2239 r = service_arm_timer(s, s->restart_usec);
a8bb2e65 2240 if (r < 0)
2edfa366 2241 goto fail;
feae8adb
DW
2242
2243 return;
2edfa366
LP
2244 }
2245
48bb5876
DW
2246 /* Any units that are bound to this service must also be
2247 * restarted. We use JOB_RESTART (instead of the more obvious
2248 * JOB_START) here so that those dependency jobs will be added
2249 * as well. */
2250 r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
2251 if (r < 0)
034c6ed7
LP
2252 goto fail;
2253
a8bb2e65
LP
2254 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
2255 * it will be canceled as part of the service_stop() call that
2256 * is executed as part of JOB_RESTART. */
2257
66870f90
ZJS
2258 log_debug_unit(UNIT(s)->id,
2259 "%s scheduled restart job.", UNIT(s)->id);
034c6ed7
LP
2260 return;
2261
2262fail:
66870f90
ZJS
2263 log_warning_unit(UNIT(s)->id,
2264 "%s failed to schedule restart job: %s",
718db961 2265 UNIT(s)->id, bus_error_message(&error, -r));
f42806df 2266 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
2267}
2268
2269static void service_enter_reload(Service *s) {
2270 int r;
2271
2272 assert(s);
2273
5e94833f
LP
2274 service_unwatch_control_pid(s);
2275
117dcc57
ZJS
2276 s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2277 if (s->control_command) {
867b3b7d
LP
2278 s->control_command_id = SERVICE_EXEC_RELOAD;
2279
ecedd90f
LP
2280 r = service_spawn(s,
2281 s->control_command,
2282 true,
2283 false,
2284 !s->permissions_start_only,
2285 !s->root_directory_start_only,
2286 false,
2287 false,
2288 true,
2289 &s->control_pid);
2290 if (r < 0)
034c6ed7
LP
2291 goto fail;
2292
80876c20
LP
2293 service_set_state(s, SERVICE_RELOAD);
2294 } else
f42806df 2295 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2296
2297 return;
2298
2299fail:
66870f90
ZJS
2300 log_warning_unit(UNIT(s)->id,
2301 "%s failed to run 'reload' task: %s",
2302 UNIT(s)->id, strerror(-r));
f42806df
LP
2303 s->reload_result = SERVICE_FAILURE_RESOURCES;
2304 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2305}
2306
f42806df 2307static void service_run_next_control(Service *s) {
034c6ed7
LP
2308 int r;
2309
2310 assert(s);
2311 assert(s->control_command);
2312 assert(s->control_command->command_next);
2313
34e9ba66 2314 assert(s->control_command_id != SERVICE_EXEC_START);
034c6ed7 2315
34e9ba66 2316 s->control_command = s->control_command->command_next;
5e94833f
LP
2317 service_unwatch_control_pid(s);
2318
ecedd90f
LP
2319 r = service_spawn(s,
2320 s->control_command,
2321 true,
2322 false,
2323 !s->permissions_start_only,
2324 !s->root_directory_start_only,
2325 s->control_command_id == SERVICE_EXEC_START_PRE ||
2326 s->control_command_id == SERVICE_EXEC_STOP_POST,
2327 false,
2328 true,
2329 &s->control_pid);
2330 if (r < 0)
034c6ed7
LP
2331 goto fail;
2332
2333 return;
2334
2335fail:
66870f90
ZJS
2336 log_warning_unit(UNIT(s)->id,
2337 "%s failed to run next control task: %s",
2338 UNIT(s)->id, strerror(-r));
034c6ed7 2339
80876c20 2340 if (s->state == SERVICE_START_PRE)
f42806df 2341 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
80876c20 2342 else if (s->state == SERVICE_STOP)
f42806df 2343 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7 2344 else if (s->state == SERVICE_STOP_POST)
f42806df 2345 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
e2f3b44c 2346 else if (s->state == SERVICE_RELOAD) {
f42806df
LP
2347 s->reload_result = SERVICE_FAILURE_RESOURCES;
2348 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c 2349 } else
f42806df 2350 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
5cb5a6ff
LP
2351}
2352
f42806df 2353static void service_run_next_main(Service *s) {
34e9ba66
LP
2354 pid_t pid;
2355 int r;
2356
2357 assert(s);
867b3b7d
LP
2358 assert(s->main_command);
2359 assert(s->main_command->command_next);
2360 assert(s->type == SERVICE_ONESHOT);
34e9ba66 2361
867b3b7d 2362 s->main_command = s->main_command->command_next;
34e9ba66
LP
2363 service_unwatch_main_pid(s);
2364
ecedd90f
LP
2365 r = service_spawn(s,
2366 s->main_command,
98709151 2367 true,
ecedd90f
LP
2368 true,
2369 true,
2370 true,
2371 true,
2372 s->notify_access != NOTIFY_NONE,
2373 false,
2374 &pid);
2375 if (r < 0)
34e9ba66
LP
2376 goto fail;
2377
2378 service_set_main_pid(s, pid);
2379
2380 return;
2381
2382fail:
66870f90
ZJS
2383 log_warning_unit(UNIT(s)->id,
2384 "%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
f42806df 2385 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
34e9ba66
LP
2386}
2387
4b939747
MO
2388static int service_start_limit_test(Service *s) {
2389 assert(s);
2390
2391 if (ratelimit_test(&s->start_limit))
2392 return 0;
2393
2394 switch (s->start_limit_action) {
2395
2396 case SERVICE_START_LIMIT_NONE:
66870f90
ZJS
2397 log_warning_unit(UNIT(s)->id,
2398 "%s start request repeated too quickly, refusing to start.",
2399 UNIT(s)->id);
4b939747
MO
2400 break;
2401
2402 case SERVICE_START_LIMIT_REBOOT: {
718db961 2403 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
4b939747
MO
2404 int r;
2405
66870f90
ZJS
2406 log_warning_unit(UNIT(s)->id,
2407 "%s start request repeated too quickly, rebooting.", UNIT(s)->id);
4b939747 2408
117dcc57
ZJS
2409 r = manager_add_job_by_name(UNIT(s)->manager, JOB_START,
2410 SPECIAL_REBOOT_TARGET, JOB_REPLACE,
2411 true, &error, NULL);
718db961 2412 if (r < 0)
66870f90 2413 log_error_unit(UNIT(s)->id,
718db961 2414 "Failed to reboot: %s.", bus_error_message(&error, r));
4b939747
MO
2415
2416 break;
2417 }
2418
2419 case SERVICE_START_LIMIT_REBOOT_FORCE:
66870f90
ZJS
2420 log_warning_unit(UNIT(s)->id,
2421 "%s start request repeated too quickly, forcibly rebooting.", UNIT(s)->id);
4b939747
MO
2422 UNIT(s)->manager->exit_code = MANAGER_REBOOT;
2423 break;
2424
2425 case SERVICE_START_LIMIT_REBOOT_IMMEDIATE:
66870f90
ZJS
2426 log_warning_unit(UNIT(s)->id,
2427 "%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id);
0049f05a 2428 sync();
4b939747
MO
2429 reboot(RB_AUTOBOOT);
2430 break;
2431
2432 default:
66870f90
ZJS
2433 log_error_unit(UNIT(s)->id,
2434 "start limit action=%i", s->start_limit_action);
4b939747
MO
2435 assert_not_reached("Unknown StartLimitAction.");
2436 }
2437
2438 return -ECANCELED;
2439}
2440
87f0e418
LP
2441static int service_start(Unit *u) {
2442 Service *s = SERVICE(u);
4b939747 2443 int r;
5cb5a6ff
LP
2444
2445 assert(s);
2446
034c6ed7
LP
2447 /* We cannot fulfill this request right now, try again later
2448 * please! */
2449 if (s->state == SERVICE_STOP ||
2450 s->state == SERVICE_STOP_SIGTERM ||
2451 s->state == SERVICE_STOP_SIGKILL ||
2452 s->state == SERVICE_STOP_POST ||
2453 s->state == SERVICE_FINAL_SIGTERM ||
2454 s->state == SERVICE_FINAL_SIGKILL)
5cb5a6ff
LP
2455 return -EAGAIN;
2456
034c6ed7
LP
2457 /* Already on it! */
2458 if (s->state == SERVICE_START_PRE ||
2459 s->state == SERVICE_START ||
2460 s->state == SERVICE_START_POST)
2461 return 0;
2462
2e9d6c12 2463 /* A service that will be restarted must be stopped first to
7f2cddae 2464 * trigger BindsTo and/or OnFailure dependencies. If a user
2e9d6c12 2465 * does not want to wait for the holdoff time to elapse, the
d4943dc7
LP
2466 * service should be manually restarted, not started. We
2467 * simply return EAGAIN here, so that any start jobs stay
2468 * queued, and assume that the auto restart timer will
2469 * eventually trigger the restart. */
2470 if (s->state == SERVICE_AUTO_RESTART)
a8bb2e65 2471 return -EAGAIN;
2e9d6c12
DW
2472
2473 assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
5cb5a6ff 2474
1e2e8133 2475 /* Make sure we don't enter a busy loop of some kind. */
4b939747 2476 r = service_start_limit_test(s);
c2f34808 2477 if (r < 0) {
8d1b002a 2478 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
4b939747 2479 return r;
c2f34808 2480 }
1e2e8133 2481
f42806df
LP
2482 s->result = SERVICE_SUCCESS;
2483 s->reload_result = SERVICE_SUCCESS;
034c6ed7 2484 s->main_pid_known = false;
6dfa5494 2485 s->main_pid_alien = false;
47342320 2486 s->forbid_restart = false;
034c6ed7
LP
2487
2488 service_enter_start_pre(s);
2489 return 0;
5cb5a6ff
LP
2490}
2491
87f0e418
LP
2492static int service_stop(Unit *u) {
2493 Service *s = SERVICE(u);
5cb5a6ff
LP
2494
2495 assert(s);
2496
f0c7b229 2497 /* Don't create restart jobs from here. */
47342320 2498 s->forbid_restart = true;
034c6ed7 2499
e537352b
LP
2500 /* Already on it */
2501 if (s->state == SERVICE_STOP ||
2502 s->state == SERVICE_STOP_SIGTERM ||
2503 s->state == SERVICE_STOP_SIGKILL ||
2504 s->state == SERVICE_STOP_POST ||
2505 s->state == SERVICE_FINAL_SIGTERM ||
2506 s->state == SERVICE_FINAL_SIGKILL)
2507 return 0;
2508
f0c7b229 2509 /* A restart will be scheduled or is in progress. */
034c6ed7 2510 if (s->state == SERVICE_AUTO_RESTART) {
0c7f15b3 2511 service_set_state(s, SERVICE_DEAD);
034c6ed7
LP
2512 return 0;
2513 }
2514
3f6c78dc
LP
2515 /* If there's already something running we go directly into
2516 * kill mode. */
2517 if (s->state == SERVICE_START_PRE ||
2518 s->state == SERVICE_START ||
2519 s->state == SERVICE_START_POST ||
2520 s->state == SERVICE_RELOAD) {
f42806df 2521 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
3f6c78dc
LP
2522 return 0;
2523 }
5cb5a6ff 2524
3f6c78dc
LP
2525 assert(s->state == SERVICE_RUNNING ||
2526 s->state == SERVICE_EXITED);
3a762661 2527
f42806df 2528 service_enter_stop(s, SERVICE_SUCCESS);
5cb5a6ff
LP
2529 return 0;
2530}
2531
87f0e418
LP
2532static int service_reload(Unit *u) {
2533 Service *s = SERVICE(u);
034c6ed7
LP
2534
2535 assert(s);
2536
80876c20 2537 assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
034c6ed7
LP
2538
2539 service_enter_reload(s);
5cb5a6ff
LP
2540 return 0;
2541}
2542
44a6b1b6 2543_pure_ static bool service_can_reload(Unit *u) {
87f0e418 2544 Service *s = SERVICE(u);
034c6ed7
LP
2545
2546 assert(s);
2547
2548 return !!s->exec_command[SERVICE_EXEC_RELOAD];
2549}
2550
a16e1123
LP
2551static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2552 Service *s = SERVICE(u);
2553
2554 assert(u);
2555 assert(f);
2556 assert(fds);
2557
2558 unit_serialize_item(u, f, "state", service_state_to_string(s->state));
f42806df
LP
2559 unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2560 unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
a16e1123
LP
2561
2562 if (s->control_pid > 0)
ccd06097
ZJS
2563 unit_serialize_item_format(u, f, "control-pid", PID_FMT,
2564 s->control_pid);
a16e1123 2565
5925dd3c 2566 if (s->main_pid_known && s->main_pid > 0)
ccd06097 2567 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
a16e1123
LP
2568
2569 unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
2570
3a2776bc
LP
2571 if (s->status_text)
2572 unit_serialize_item(u, f, "status-text", s->status_text);
2573
cfc4eb4c
LP
2574 /* FIXME: There's a minor uncleanliness here: if there are
2575 * multiple commands attached here, we will start from the
2576 * first one again */
a16e1123 2577 if (s->control_command_id >= 0)
117dcc57
ZJS
2578 unit_serialize_item(u, f, "control-command",
2579 service_exec_command_to_string(s->control_command_id));
a16e1123
LP
2580
2581 if (s->socket_fd >= 0) {
2582 int copy;
2583
2584 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
2585 return copy;
2586
2587 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2588 }
2589
ecdbca40 2590 if (s->main_exec_status.pid > 0) {
ccd06097
ZJS
2591 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT,
2592 s->main_exec_status.pid);
117dcc57
ZJS
2593 dual_timestamp_serialize(f, "main-exec-status-start",
2594 &s->main_exec_status.start_timestamp);
2595 dual_timestamp_serialize(f, "main-exec-status-exit",
2596 &s->main_exec_status.exit_timestamp);
ecdbca40 2597
799fd0fd 2598 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
117dcc57
ZJS
2599 unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
2600 s->main_exec_status.code);
2601 unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
2602 s->main_exec_status.status);
ecdbca40
LP
2603 }
2604 }
a6927d7f 2605 if (dual_timestamp_is_set(&s->watchdog_timestamp))
842129f5 2606 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
ecdbca40 2607
6aca9a58 2608 if (s->forbid_restart)
8d1a2802 2609 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
6aca9a58 2610
a16e1123
LP
2611 return 0;
2612}
2613
2614static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2615 Service *s = SERVICE(u);
a16e1123
LP
2616
2617 assert(u);
2618 assert(key);
2619 assert(value);
2620 assert(fds);
2621
2622 if (streq(key, "state")) {
2623 ServiceState state;
2624
117dcc57
ZJS
2625 state = service_state_from_string(value);
2626 if (state < 0)
66870f90 2627 log_debug_unit(u->id, "Failed to parse state value %s", value);
a16e1123
LP
2628 else
2629 s->deserialized_state = state;
f42806df
LP
2630 } else if (streq(key, "result")) {
2631 ServiceResult f;
2632
2633 f = service_result_from_string(value);
2634 if (f < 0)
66870f90 2635 log_debug_unit(u->id, "Failed to parse result value %s", value);
f42806df
LP
2636 else if (f != SERVICE_SUCCESS)
2637 s->result = f;
2638
2639 } else if (streq(key, "reload-result")) {
2640 ServiceResult f;
2641
2642 f = service_result_from_string(value);
2643 if (f < 0)
66870f90 2644 log_debug_unit(u->id, "Failed to parse reload result value %s", value);
f42806df
LP
2645 else if (f != SERVICE_SUCCESS)
2646 s->reload_result = f;
a16e1123 2647
a16e1123 2648 } else if (streq(key, "control-pid")) {
5925dd3c 2649 pid_t pid;
a16e1123 2650
e364ad06 2651 if (parse_pid(value, &pid) < 0)
66870f90 2652 log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
a16e1123 2653 else
e55224ca 2654 s->control_pid = pid;
a16e1123 2655 } else if (streq(key, "main-pid")) {
5925dd3c 2656 pid_t pid;
a16e1123 2657
e364ad06 2658 if (parse_pid(value, &pid) < 0)
66870f90 2659 log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
7400b9d2
LP
2660 else {
2661 service_set_main_pid(s, pid);
2662 unit_watch_pid(UNIT(s), pid);
2663 }
a16e1123
LP
2664 } else if (streq(key, "main-pid-known")) {
2665 int b;
2666
117dcc57
ZJS
2667 b = parse_boolean(value);
2668 if (b < 0)
66870f90 2669 log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
a16e1123
LP
2670 else
2671 s->main_pid_known = b;
3a2776bc
LP
2672 } else if (streq(key, "status-text")) {
2673 char *t;
2674
117dcc57
ZJS
2675 t = strdup(value);
2676 if (!t)
2677 log_oom();
2678 else {
3a2776bc
LP
2679 free(s->status_text);
2680 s->status_text = t;
2681 }
2682
a16e1123
LP
2683 } else if (streq(key, "control-command")) {
2684 ServiceExecCommand id;
2685
117dcc57
ZJS
2686 id = service_exec_command_from_string(value);
2687 if (id < 0)
66870f90 2688 log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
a16e1123
LP
2689 else {
2690 s->control_command_id = id;
2691 s->control_command = s->exec_command[id];
2692 }
2693 } else if (streq(key, "socket-fd")) {
2694 int fd;
2695
2696 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
66870f90 2697 log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
a16e1123
LP
2698 else {
2699
2700 if (s->socket_fd >= 0)
2701 close_nointr_nofail(s->socket_fd);
2702 s->socket_fd = fdset_remove(fds, fd);
2703 }
ecdbca40
LP
2704 } else if (streq(key, "main-exec-status-pid")) {
2705 pid_t pid;
2706
e364ad06 2707 if (parse_pid(value, &pid) < 0)
66870f90 2708 log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
ecdbca40
LP
2709 else
2710 s->main_exec_status.pid = pid;
2711 } else if (streq(key, "main-exec-status-code")) {
2712 int i;
2713
e364ad06 2714 if (safe_atoi(value, &i) < 0)
66870f90 2715 log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
ecdbca40
LP
2716 else
2717 s->main_exec_status.code = i;
2718 } else if (streq(key, "main-exec-status-status")) {
2719 int i;
2720
e364ad06 2721 if (safe_atoi(value, &i) < 0)
66870f90 2722 log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
ecdbca40
LP
2723 else
2724 s->main_exec_status.status = i;
799fd0fd
LP
2725 } else if (streq(key, "main-exec-status-start"))
2726 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2727 else if (streq(key, "main-exec-status-exit"))
2728 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
a6927d7f
MO
2729 else if (streq(key, "watchdog-timestamp"))
2730 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
613b411c 2731 else if (streq(key, "forbid-restart")) {
6aca9a58
SE
2732 int b;
2733
2734 b = parse_boolean(value);
2735 if (b < 0)
8d1a2802 2736 log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
6aca9a58
SE
2737 else
2738 s->forbid_restart = b;
c17ec25e 2739 } else
66870f90 2740 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
a16e1123
LP
2741
2742 return 0;
2743}
2744
44a6b1b6 2745_pure_ static UnitActiveState service_active_state(Unit *u) {
e056b01d
LP
2746 const UnitActiveState *table;
2747
87f0e418 2748 assert(u);
5cb5a6ff 2749
e056b01d
LP
2750 table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2751
2752 return table[SERVICE(u)->state];
034c6ed7
LP
2753}
2754
10a94420
LP
2755static const char *service_sub_state_to_string(Unit *u) {
2756 assert(u);
2757
2758 return service_state_to_string(SERVICE(u)->state);
2759}
2760
701cc384
LP
2761static bool service_check_gc(Unit *u) {
2762 Service *s = SERVICE(u);
2763
2764 assert(s);
2765
6d55002a
LP
2766 /* Never clean up services that still have a process around,
2767 * even if the service is formally dead. */
2768 if (cgroup_good(s) > 0 ||
2769 main_pid_good(s) > 0 ||
2770 control_pid_good(s) > 0)
2771 return true;
2772
2773#ifdef HAVE_SYSV_COMPAT
1b64d026 2774 if (s->is_sysv)
6d55002a 2775 return true;
07459bb6 2776#endif
701cc384 2777
6d55002a
LP
2778 return false;
2779}
2780
44a6b1b6 2781_pure_ static bool service_check_snapshot(Unit *u) {
701cc384
LP
2782 Service *s = SERVICE(u);
2783
2784 assert(s);
2785
99f37ad8 2786 return (s->socket_fd < 0);
701cc384
LP
2787}
2788
3a111838
MS
2789static int service_retry_pid_file(Service *s) {
2790 int r;
2791
2792 assert(s->pid_file);
2793 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2794
2795 r = service_load_pid_file(s, false);
2796 if (r < 0)
2797 return r;
2798
2799 service_unwatch_pid_file(s);
2800
f42806df 2801 service_enter_running(s, SERVICE_SUCCESS);
3a111838
MS
2802 return 0;
2803}
2804
2805static int service_watch_pid_file(Service *s) {
2806 int r;
2807
66870f90
ZJS
2808 log_debug_unit(UNIT(s)->id,
2809 "Setting watch for %s's PID file %s",
2810 UNIT(s)->id, s->pid_file_pathspec->path);
718db961 2811 r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
3a111838
MS
2812 if (r < 0)
2813 goto fail;
2814
2815 /* the pidfile might have appeared just before we set the watch */
bc41f93e
ZJS
2816 log_debug_unit(UNIT(s)->id,
2817 "Trying to read %s's PID file %s in case it changed",
2818 UNIT(s)->id, s->pid_file_pathspec->path);
3a111838
MS
2819 service_retry_pid_file(s);
2820
2821 return 0;
2822fail:
66870f90
ZJS
2823 log_error_unit(UNIT(s)->id,
2824 "Failed to set a watch for %s's PID file %s: %s",
2825 UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
3a111838
MS
2826 service_unwatch_pid_file(s);
2827 return r;
2828}
2829
2830static int service_demand_pid_file(Service *s) {
2831 PathSpec *ps;
2832
2833 assert(s->pid_file);
2834 assert(!s->pid_file_pathspec);
2835
2836 ps = new0(PathSpec, 1);
2837 if (!ps)
2838 return -ENOMEM;
2839
718db961 2840 ps->unit = UNIT(s);
3a111838
MS
2841 ps->path = strdup(s->pid_file);
2842 if (!ps->path) {
2843 free(ps);
2844 return -ENOMEM;
2845 }
2846
2847 path_kill_slashes(ps->path);
2848
2849 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2850 * keep their PID file open all the time. */
2851 ps->type = PATH_MODIFIED;
2852 ps->inotify_fd = -1;
2853
2854 s->pid_file_pathspec = ps;
2855
2856 return service_watch_pid_file(s);
2857}
2858
718db961 2859static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
e14c2802
LP
2860 PathSpec *p = userdata;
2861 Service *s;
2862
2863 assert(p);
2864
2865 s = SERVICE(p->unit);
3a111838
MS
2866
2867 assert(s);
2868 assert(fd >= 0);
2869 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2870 assert(s->pid_file_pathspec);
57020a3a 2871 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
3a111838 2872
718db961 2873 log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
3a111838 2874
e14c2802 2875 if (path_spec_fd_event(p, events) < 0)
3a111838
MS
2876 goto fail;
2877
2878 if (service_retry_pid_file(s) == 0)
718db961 2879 return 0;
3a111838
MS
2880
2881 if (service_watch_pid_file(s) < 0)
2882 goto fail;
2883
718db961
LP
2884 return 0;
2885
3a111838
MS
2886fail:
2887 service_unwatch_pid_file(s);
f42806df 2888 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
718db961 2889 return 0;
3a111838
MS
2890}
2891
a911bb9a
LP
2892static void service_notify_cgroup_empty_event(Unit *u) {
2893 Service *s = SERVICE(u);
2894
2895 assert(u);
2896
2897 log_debug_unit(u->id, "%s: cgroup is empty", u->id);
2898
2899 switch (s->state) {
2900
2901 /* Waiting for SIGCHLD is usually more interesting,
2902 * because it includes return codes/signals. Which is
2903 * why we ignore the cgroup events for most cases,
2904 * except when we don't know pid which to expect the
2905 * SIGCHLD for. */
2906
2907 case SERVICE_START:
2908 case SERVICE_START_POST:
2909 /* If we were hoping for the daemon to write its PID file,
2910 * we can give up now. */
2911 if (s->pid_file_pathspec) {
2912 log_warning_unit(u->id,
2913 "%s never wrote its PID file. Failing.", UNIT(s)->id);
2914 service_unwatch_pid_file(s);
2915 if (s->state == SERVICE_START)
2916 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2917 else
2918 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2919 }
2920 break;
2921
2922 case SERVICE_RUNNING:
2923 /* service_enter_running() will figure out what to do */
2924 service_enter_running(s, SERVICE_SUCCESS);
2925 break;
2926
2927 case SERVICE_STOP_SIGTERM:
2928 case SERVICE_STOP_SIGKILL:
2929
2930 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2931 service_enter_stop_post(s, SERVICE_SUCCESS);
2932
2933 break;
2934
2935 case SERVICE_STOP_POST:
2936 case SERVICE_FINAL_SIGTERM:
2937 case SERVICE_FINAL_SIGKILL:
2938 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2939 service_enter_dead(s, SERVICE_SUCCESS, true);
2940
2941 break;
2942
2943 default:
2944 ;
2945 }
2946}
2947
87f0e418
LP
2948static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2949 Service *s = SERVICE(u);
f42806df 2950 ServiceResult f;
5cb5a6ff
LP
2951
2952 assert(s);
034c6ed7
LP
2953 assert(pid >= 0);
2954
96342de6
LN
2955 if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2956 is_clean_exit_lsb(code, status, &s->success_status))
f42806df
LP
2957 f = SERVICE_SUCCESS;
2958 else if (code == CLD_EXITED)
2959 f = SERVICE_FAILURE_EXIT_CODE;
2960 else if (code == CLD_KILLED)
2961 f = SERVICE_FAILURE_SIGNAL;
2962 else if (code == CLD_DUMPED)
2963 f = SERVICE_FAILURE_CORE_DUMP;
d06dacd0 2964 else
cfc4eb4c 2965 assert_not_reached("Unknown code");
034c6ed7
LP
2966
2967 if (s->main_pid == pid) {
db01f8b3
MS
2968 /* Forking services may occasionally move to a new PID.
2969 * As long as they update the PID file before exiting the old
2970 * PID, they're fine. */
5375410b 2971 if (service_load_pid_file(s, false) == 0)
db01f8b3 2972 return;
034c6ed7 2973
034c6ed7 2974 s->main_pid = 0;
6ea832a2 2975 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
034c6ed7 2976
867b3b7d 2977 if (s->main_command) {
fbeefb45
LP
2978 /* If this is not a forking service than the
2979 * main process got started and hence we copy
2980 * the exit status so that it is recorded both
2981 * as main and as control process exit
2982 * status */
2983
867b3b7d 2984 s->main_command->exec_status = s->main_exec_status;
b708e7ce 2985
867b3b7d 2986 if (s->main_command->ignore)
f42806df 2987 f = SERVICE_SUCCESS;
fbeefb45
LP
2988 } else if (s->exec_command[SERVICE_EXEC_START]) {
2989
2990 /* If this is a forked process, then we should
2991 * ignore the return value if this was
2992 * configured for the starter process */
2993
2994 if (s->exec_command[SERVICE_EXEC_START]->ignore)
2995 f = SERVICE_SUCCESS;
034c6ed7
LP
2996 }
2997
bbc9006e
MT
2998 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2999 u->id,
23635a85
ZJS
3000 "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
3001 u->id, sigchld_code_to_string(code), status,
3002 strna(code == CLD_EXITED
3003 ? exit_status_to_string(status, EXIT_STATUS_FULL)
3004 : signal_to_string(status)),
23635a85
ZJS
3005 "EXIT_CODE=%s", sigchld_code_to_string(code),
3006 "EXIT_STATUS=%i", status,
3007 NULL);
f42806df
LP
3008
3009 if (f != SERVICE_SUCCESS)
3010 s->result = f;
034c6ed7 3011
867b3b7d
LP
3012 if (s->main_command &&
3013 s->main_command->command_next &&
f42806df 3014 f == SERVICE_SUCCESS) {
034c6ed7 3015
34e9ba66
LP
3016 /* There is another command to *
3017 * execute, so let's do that. */
034c6ed7 3018
66870f90
ZJS
3019 log_debug_unit(u->id,
3020 "%s running next main command for state %s",
3021 u->id, service_state_to_string(s->state));
f42806df 3022 service_run_next_main(s);
034c6ed7 3023
34e9ba66
LP
3024 } else {
3025
3026 /* The service exited, so the service is officially
3027 * gone. */
867b3b7d 3028 s->main_command = NULL;
34e9ba66
LP
3029
3030 switch (s->state) {
3031
3032 case SERVICE_START_POST:
3033 case SERVICE_RELOAD:
3034 case SERVICE_STOP:
3035 /* Need to wait until the operation is
3036 * done */
c4653a4d 3037 break;
7d55e835 3038
34e9ba66
LP
3039 case SERVICE_START:
3040 if (s->type == SERVICE_ONESHOT) {
3041 /* This was our main goal, so let's go on */
f42806df 3042 if (f == SERVICE_SUCCESS)
34e9ba66
LP
3043 service_enter_start_post(s);
3044 else
f42806df 3045 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
34e9ba66 3046 break;
34e9ba66 3047 }
034c6ed7 3048
bfba3256
LP
3049 /* Fall through */
3050
34e9ba66 3051 case SERVICE_RUNNING:
f42806df 3052 service_enter_running(s, f);
34e9ba66 3053 break;
034c6ed7 3054
34e9ba66
LP
3055 case SERVICE_STOP_SIGTERM:
3056 case SERVICE_STOP_SIGKILL:
5cb5a6ff 3057
34e9ba66 3058 if (!control_pid_good(s))
f42806df 3059 service_enter_stop_post(s, f);
5cb5a6ff 3060
34e9ba66
LP
3061 /* If there is still a control process, wait for that first */
3062 break;
3063
bf108e55
LP
3064 case SERVICE_STOP_POST:
3065 case SERVICE_FINAL_SIGTERM:
3066 case SERVICE_FINAL_SIGKILL:
3067
3068 if (!control_pid_good(s))
3069 service_enter_dead(s, f, true);
3070 break;
3071
34e9ba66
LP
3072 default:
3073 assert_not_reached("Uh, main process died at wrong time.");
3074 }
034c6ed7 3075 }
5cb5a6ff 3076
034c6ed7 3077 } else if (s->control_pid == pid) {
34e9ba66
LP
3078 s->control_pid = 0;
3079
b708e7ce 3080 if (s->control_command) {
117dcc57
ZJS
3081 exec_status_exit(&s->control_command->exec_status,
3082 &s->exec_context, pid, code, status);
a16e1123 3083
b708e7ce 3084 if (s->control_command->ignore)
f42806df 3085 f = SERVICE_SUCCESS;
b708e7ce
LP
3086 }
3087
66870f90
ZJS
3088 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
3089 "%s: control process exited, code=%s status=%i",
3090 u->id, sigchld_code_to_string(code), status);
f42806df
LP
3091
3092 if (f != SERVICE_SUCCESS)
3093 s->result = f;
034c6ed7 3094
88f3e0c9
LP
3095 /* Immediately get rid of the cgroup, so that the
3096 * kernel doesn't delay the cgroup empty messages for
3097 * the service cgroup any longer than necessary */
4ad49000 3098 service_kill_control_processes(s);
88f3e0c9 3099
34e9ba66
LP
3100 if (s->control_command &&
3101 s->control_command->command_next &&
f42806df 3102 f == SERVICE_SUCCESS) {
034c6ed7
LP
3103
3104 /* There is another command to *
3105 * execute, so let's do that. */
3106
66870f90
ZJS
3107 log_debug_unit(u->id,
3108 "%s running next control command for state %s",
3109 u->id, service_state_to_string(s->state));
f42806df 3110 service_run_next_control(s);
034c6ed7 3111
80876c20 3112 } else {
034c6ed7
LP
3113 /* No further commands for this step, so let's
3114 * figure out what to do next */
3115
a16e1123
LP
3116 s->control_command = NULL;
3117 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3118
66870f90
ZJS
3119 log_debug_unit(u->id,
3120 "%s got final SIGCHLD for state %s",
3121 u->id, service_state_to_string(s->state));
bd982a8b 3122
034c6ed7
LP
3123 switch (s->state) {
3124
3125 case SERVICE_START_PRE:
f42806df 3126 if (f == SERVICE_SUCCESS)
034c6ed7
LP
3127 service_enter_start(s);
3128 else
f42806df 3129 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
034c6ed7
LP
3130 break;
3131
3132 case SERVICE_START:
bfba3256
LP
3133 if (s->type != SERVICE_FORKING)
3134 /* Maybe spurious event due to a reload that changed the type? */
3135 break;
034c6ed7 3136
f42806df
LP
3137 if (f != SERVICE_SUCCESS) {
3138 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3a111838
MS
3139 break;
3140 }
034c6ed7 3141
3a111838 3142 if (s->pid_file) {
f42806df
LP
3143 bool has_start_post;
3144 int r;
3145
3a111838
MS
3146 /* Let's try to load the pid file here if we can.
3147 * The PID file might actually be created by a START_POST
3148 * script. In that case don't worry if the loading fails. */
f42806df
LP
3149
3150 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3151 r = service_load_pid_file(s, !has_start_post);
3a111838
MS
3152 if (!has_start_post && r < 0) {
3153 r = service_demand_pid_file(s);
3154 if (r < 0 || !cgroup_good(s))
f42806df 3155 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3a111838
MS
3156 break;
3157 }
034c6ed7 3158 } else
3a111838 3159 service_search_main_pid(s);
034c6ed7 3160
3a111838 3161 service_enter_start_post(s);
034c6ed7
LP
3162 break;
3163
3164 case SERVICE_START_POST:
f42806df
LP
3165 if (f != SERVICE_SUCCESS) {
3166 service_enter_stop(s, f);
2096e009 3167 break;
034c6ed7
LP
3168 }
3169
2096e009 3170 if (s->pid_file) {
f42806df
LP
3171 int r;
3172
3173 r = service_load_pid_file(s, true);
2096e009
MS
3174 if (r < 0) {
3175 r = service_demand_pid_file(s);
3176 if (r < 0 || !cgroup_good(s))
f42806df 3177 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2096e009
MS
3178 break;
3179 }
3180 } else
3181 service_search_main_pid(s);
3182
f42806df 3183 service_enter_running(s, SERVICE_SUCCESS);
3185a36b 3184 break;
034c6ed7
LP
3185
3186 case SERVICE_RELOAD:
f42806df 3187 if (f == SERVICE_SUCCESS) {
5375410b 3188 service_load_pid_file(s, true);
3185a36b
LP
3189 service_search_main_pid(s);
3190 }
3191
f42806df
LP
3192 s->reload_result = f;
3193 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
3194 break;
3195
3196 case SERVICE_STOP:
f42806df 3197 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
3198 break;
3199
3200 case SERVICE_STOP_SIGTERM:
3201 case SERVICE_STOP_SIGKILL:
3202 if (main_pid_good(s) <= 0)
f42806df 3203 service_enter_stop_post(s, f);
034c6ed7
LP
3204
3205 /* If there is still a service
3206 * process around, wait until
3207 * that one quit, too */
3208 break;
3209
3210 case SERVICE_STOP_POST:
3211 case SERVICE_FINAL_SIGTERM:
3212 case SERVICE_FINAL_SIGKILL:
bf108e55
LP
3213 if (main_pid_good(s) <= 0)
3214 service_enter_dead(s, f, true);
034c6ed7
LP
3215 break;
3216
3217 default:
3218 assert_not_reached("Uh, control process died at wrong time.");
3219 }
3220 }
8c47c732 3221 }
c4e2ceae
LP
3222
3223 /* Notify clients about changed exit status */
3224 unit_add_to_dbus_queue(u);
a911bb9a
LP
3225
3226 /* We got one SIGCHLD for the service, let's watch all
3227 * processes that are now running of the service, and watch
3228 * that. Among the PIDs we then watch will be children
3229 * reassigned to us, which hopefully allows us to identify
3230 * when all children are gone */
3231 unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
3232 unit_watch_all_pids(u);
3233
3234 /* If the PID set is empty now, then let's finish this off */
3235 if (set_isempty(u->pids))
3236 service_notify_cgroup_empty_event(u);
034c6ed7
LP
3237}
3238
718db961
LP
3239static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
3240 Service *s = SERVICE(userdata);
034c6ed7
LP
3241
3242 assert(s);
718db961 3243 assert(source == s->timer_event_source);
034c6ed7
LP
3244
3245 switch (s->state) {
3246
3247 case SERVICE_START_PRE:
3248 case SERVICE_START:
718db961 3249 log_warning_unit(UNIT(s)->id,
41aef6fc
ZJS
3250 "%s %s operation timed out. Terminating.",
3251 UNIT(s)->id,
3252 s->state == SERVICE_START ? "start" : "start-pre");
f42806df 3253 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
80876c20
LP
3254 break;
3255
034c6ed7 3256 case SERVICE_START_POST:
718db961 3257 log_warning_unit(UNIT(s)->id,
41aef6fc 3258 "%s start-post operation timed out. Stopping.", UNIT(s)->id);
f42806df 3259 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3260 break;
3261
e2f3b44c 3262 case SERVICE_RELOAD:
718db961 3263 log_warning_unit(UNIT(s)->id,
41aef6fc 3264 "%s reload operation timed out. Stopping.", UNIT(s)->id);
f42806df
LP
3265 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3266 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c
LP
3267 break;
3268
034c6ed7 3269 case SERVICE_STOP:
718db961
LP
3270 log_warning_unit(UNIT(s)->id,
3271 "%s stopping timed out. Terminating.", UNIT(s)->id);
f42806df 3272 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3273 break;
3274
3275 case SERVICE_STOP_SIGTERM:
4819ff03 3276 if (s->kill_context.send_sigkill) {
718db961 3277 log_warning_unit(UNIT(s)->id,
41aef6fc 3278 "%s stop-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 3279 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3280 } else {
718db961 3281 log_warning_unit(UNIT(s)->id,
41aef6fc 3282 "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s)->id);
f42806df 3283 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
ba035df2
LP
3284 }
3285
034c6ed7
LP
3286 break;
3287
3288 case SERVICE_STOP_SIGKILL:
35b8ca3a 3289 /* Uh, we sent a SIGKILL and it is still not gone?
034c6ed7
LP
3290 * Must be something we cannot kill, so let's just be
3291 * weirded out and continue */
3292
718db961
LP
3293 log_warning_unit(UNIT(s)->id,
3294 "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
f42806df 3295 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3296 break;
3297
3298 case SERVICE_STOP_POST:
718db961 3299 log_warning_unit(UNIT(s)->id,
41aef6fc 3300 "%s stop-post timed out. Terminating.", UNIT(s)->id);
f42806df 3301 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3302 break;
3303
3304 case SERVICE_FINAL_SIGTERM:
4819ff03 3305 if (s->kill_context.send_sigkill) {
718db961 3306 log_warning_unit(UNIT(s)->id,
41aef6fc 3307 "%s stop-final-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 3308 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3309 } else {
718db961 3310 log_warning_unit(UNIT(s)->id,
41aef6fc 3311 "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.",
718db961 3312 UNIT(s)->id);
f42806df 3313 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
ba035df2
LP
3314 }
3315
034c6ed7
LP
3316 break;
3317
3318 case SERVICE_FINAL_SIGKILL:
718db961 3319 log_warning_unit(UNIT(s)->id,
41aef6fc 3320 "%s still around after final SIGKILL. Entering failed mode.", UNIT(s)->id);
f42806df 3321 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
034c6ed7
LP
3322 break;
3323
3324 case SERVICE_AUTO_RESTART:
718db961
LP
3325 log_info_unit(UNIT(s)->id,
3326 "%s holdoff time over, scheduling restart.", UNIT(s)->id);
034c6ed7
LP
3327 service_enter_restart(s);
3328 break;
3329
3330 default:
3331 assert_not_reached("Timeout at wrong time.");
3332 }
718db961
LP
3333
3334 return 0;
3335}
3336
3337static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
3338 Service *s = SERVICE(userdata);
3339
3340 assert(s);
3341 assert(source == s->watchdog_event_source);
3342
842129f5
LP
3343 log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id);
3344 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
3345
718db961 3346 return 0;
5cb5a6ff
LP
3347}
3348
c952c6ec 3349static void service_notify_message(Unit *u, pid_t pid, char **tags) {
8c47c732
LP
3350 Service *s = SERVICE(u);
3351 const char *e;
30b5275a 3352 bool notify_dbus = false;
8c47c732
LP
3353
3354 assert(u);
3355
ccd06097
ZJS
3356 log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT" (%s...)",
3357 u->id, pid, tags && *tags ? tags[0] : "(empty)");
da13d4d2 3358
c952c6ec 3359 if (s->notify_access == NOTIFY_NONE) {
66870f90 3360 log_warning_unit(u->id,
ccd06097
ZJS
3361 "%s: Got notification message from PID "PID_FMT", but reception is disabled.",
3362 u->id, pid);
c952c6ec
LP
3363 return;
3364 }
3365
336c6e46
LP
3366 if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
3367
3368 if (s->main_pid != 0)
3369 log_warning_unit(u->id, "%s: Got notification message from PID "PID_FMT", but reception only permitted for main PID "PID_FMT, u->id, pid, s->main_pid);
3370 else
3a33e61d 3371 log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT", but reception only permitted for main PID which is currently not known", u->id, pid);
c952c6ec
LP
3372 return;
3373 }
3374
8c47c732
LP
3375 /* Interpret MAINPID= */
3376 if ((e = strv_find_prefix(tags, "MAINPID=")) &&
3377 (s->state == SERVICE_START ||
3378 s->state == SERVICE_START_POST ||
3379 s->state == SERVICE_RUNNING ||
3380 s->state == SERVICE_RELOAD)) {
8c47c732 3381
5925dd3c 3382 if (parse_pid(e + 8, &pid) < 0)
30b5275a 3383 log_warning_unit(u->id, "Failed to parse notification message %s", e);
8c47c732 3384 else {
30b5275a 3385 log_debug_unit(u->id, "%s: got %s", u->id, e);
5925dd3c 3386 service_set_main_pid(s, pid);
7400b9d2 3387 unit_watch_pid(UNIT(s), pid);
30b5275a 3388 notify_dbus = true;
8c47c732
LP
3389 }
3390 }
3391
3392 /* Interpret READY= */
30b5275a
LP
3393 if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START && strv_find(tags, "READY=1")) {
3394 log_debug_unit(u->id, "%s: got READY=1", u->id);
8c47c732 3395 service_enter_start_post(s);
30b5275a 3396 notify_dbus = true;
8c47c732
LP
3397 }
3398
3399 /* Interpret STATUS= */
7f110ff9
LP
3400 e = strv_find_prefix(tags, "STATUS=");
3401 if (e) {
8c47c732
LP
3402 char *t;
3403
3a2776bc 3404 if (e[7]) {
7f110ff9 3405 if (!utf8_is_valid(e+7)) {
30b5275a 3406 log_warning_unit(u->id, "Status message in notification is not UTF-8 clean.");
7f110ff9
LP
3407 return;
3408 }
3409
30b5275a
LP
3410 log_debug_unit(u->id, "%s: got %s", u->id, e);
3411
7f110ff9
LP
3412 t = strdup(e+7);
3413 if (!t) {
30b5275a 3414 log_oom();
3a2776bc
LP
3415 return;
3416 }
3417
30b5275a
LP
3418 } else
3419 t = NULL;
8c47c732 3420
30b5275a 3421 if (!streq_ptr(s->status_text, t)) {
3a2776bc
LP
3422 free(s->status_text);
3423 s->status_text = t;
30b5275a
LP
3424 notify_dbus = true;
3425 } else
3426 free(t);
8c47c732 3427 }
842129f5 3428
30b5275a 3429 /* Interpet WATCHDOG= */
a6927d7f 3430 if (strv_find(tags, "WATCHDOG=1")) {
842129f5
LP
3431 log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
3432 service_reset_watchdog(s);
a6927d7f 3433 }
c4e2ceae
LP
3434
3435 /* Notify clients about changed status or main pid */
30b5275a
LP
3436 if (notify_dbus)
3437 unit_add_to_dbus_queue(u);
8c47c732
LP
3438}
3439
68db7a3b
ZJS
3440static int service_get_timeout(Unit *u, uint64_t *timeout) {
3441 Service *s = SERVICE(u);
3442 int r;
3443
3444 if (!s->timer_event_source)
3445 return 0;
3446
3447 r = sd_event_source_get_time(s->timer_event_source, timeout);
3448 if (r < 0)
3449 return r;
3450
3451 return 1;
3452}
3453
07459bb6 3454#ifdef HAVE_SYSV_COMPAT
de3910a3 3455
2c4104f0 3456static int service_enumerate(Manager *m) {
2c4104f0
LP
3457 char **p;
3458 unsigned i;
7fd1b19b
HH
3459 _cleanup_closedir_ DIR *d = NULL;
3460 _cleanup_free_ char *path = NULL, *fpath = NULL, *name = NULL;
b92bea5d 3461 Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
7fd1b19b 3462 _cleanup_set_free_ Set *shutdown_services = NULL;
c68364b7
LP
3463 Unit *service;
3464 Iterator j;
2c4104f0
LP
3465 int r;
3466
3467 assert(m);
3468
67445f4e 3469 if (m->running_as != SYSTEMD_SYSTEM)
b1bc08e5
LP
3470 return 0;
3471
84e3543e 3472 STRV_FOREACH(p, m->lookup_paths.sysvrcnd_path)
09cd1ab1 3473 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
2c4104f0
LP
3474 struct dirent *de;
3475
3476 free(path);
b7def684 3477 path = strjoin(*p, "/", rcnd_table[i].path, NULL);
70132bd0 3478 if (!path) {
2c4104f0
LP
3479 r = -ENOMEM;
3480 goto finish;
3481 }
3482
3483 if (d)
3484 closedir(d);
3485
117dcc57
ZJS
3486 d = opendir(path);
3487 if (!d) {
2c4104f0 3488 if (errno != ENOENT)
f5f6d0e2 3489 log_warning("opendir(%s) failed: %m", path);
2c4104f0
LP
3490
3491 continue;
3492 }
3493
3494 while ((de = readdir(d))) {
db06e3b6 3495 int a, b;
2c4104f0
LP
3496
3497 if (ignore_file(de->d_name))
3498 continue;
3499
3500 if (de->d_name[0] != 'S' && de->d_name[0] != 'K')
3501 continue;
3502
3503 if (strlen(de->d_name) < 4)
3504 continue;
3505
db06e3b6
LP
3506 a = undecchar(de->d_name[1]);
3507 b = undecchar(de->d_name[2]);
3508
3509 if (a < 0 || b < 0)
3510 continue;
3511
2c4104f0 3512 free(fpath);
b7def684 3513 fpath = strjoin(path, "/", de->d_name, NULL);
8ea913b2 3514 if (!fpath) {
2c4104f0
LP
3515 r = -ENOMEM;
3516 goto finish;
3517 }
3518
3519 if (access(fpath, X_OK) < 0) {
3520
3521 if (errno != ENOENT)
f5f6d0e2 3522 log_warning("access() failed on %s: %m", fpath);
2c4104f0
LP
3523
3524 continue;
3525 }
3526
3527 free(name);
117dcc57
ZJS
3528 name = sysv_translate_name(de->d_name + 3);
3529 if (!name) {
3530 r = log_oom();
2c4104f0
LP
3531 goto finish;
3532 }
3533
66870f90
ZJS
3534 r = manager_load_unit_prepare(m, name, NULL, NULL, &service);
3535 if (r < 0) {
fbe9f3a9
LP
3536 log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
3537 continue;
3538 }
2c4104f0 3539
c68364b7
LP
3540 if (de->d_name[0] == 'S') {
3541
3cdebc21 3542 if (rcnd_table[i].type == RUNLEVEL_UP) {
ea87ca5a
LP
3543 SERVICE(service)->sysv_start_priority_from_rcnd =
3544 MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
db06e3b6 3545
c68364b7 3546 SERVICE(service)->sysv_enabled = true;
f73d93a4 3547 }
db06e3b6 3548
117dcc57
ZJS
3549 r = set_ensure_allocated(&runlevel_services[i],
3550 trivial_hash_func, trivial_compare_func);
3551 if (r < 0)
c68364b7 3552 goto finish;
2c4104f0 3553
117dcc57
ZJS
3554 r = set_put(runlevel_services[i], service);
3555 if (r < 0)
2c4104f0 3556 goto finish;
23a177ef 3557
fc5df99e 3558 } else if (de->d_name[0] == 'K' &&
3cdebc21 3559 (rcnd_table[i].type == RUNLEVEL_DOWN)) {
6542952f 3560
117dcc57
ZJS
3561 r = set_ensure_allocated(&shutdown_services,
3562 trivial_hash_func, trivial_compare_func);
3563 if (r < 0)
c68364b7
LP
3564 goto finish;
3565
117dcc57
ZJS
3566 r = set_put(shutdown_services, service);
3567 if (r < 0)
2c4104f0
LP
3568 goto finish;
3569 }
3570 }
3571 }
3572
c68364b7
LP
3573 /* Now we loaded all stubs and are aware of the lowest
3574 start-up priority for all services, not let's actually load
3575 the services, this will also tell us which services are
3576 actually native now */
3577 manager_dispatch_load_queue(m);
3578
3579 /* If this is a native service, rely on native ways to pull in
3580 * a service, don't pull it in via sysv rcN.d links. */
3581 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++)
3582 SET_FOREACH(service, runlevel_services[i], j) {
3583 service = unit_follow_merge(service);
3584
ac155bb8 3585 if (service->fragment_path)
c68364b7
LP
3586 continue;
3587
117dcc57
ZJS
3588 r = unit_add_two_dependencies_by_name_inverse(
3589 service, UNIT_AFTER, UNIT_WANTS,
3590 rcnd_table[i].target, NULL, true);
3591 if (r < 0)
c68364b7
LP
3592 goto finish;
3593 }
3594
3595 /* We honour K links only for halt/reboot. For the normal
3596 * runlevels we assume the stop jobs will be implicitly added
35b8ca3a 3597 * by the core logic. Also, we don't really distinguish here
c68364b7 3598 * between the runlevels 0 and 6 and just add them to the
3cdebc21 3599 * special shutdown target. */
c68364b7
LP
3600 SET_FOREACH(service, shutdown_services, j) {
3601 service = unit_follow_merge(service);
3602
ac155bb8 3603 if (service->fragment_path)
c68364b7
LP
3604 continue;
3605
117dcc57
ZJS
3606 r = unit_add_two_dependencies_by_name(
3607 service, UNIT_BEFORE, UNIT_CONFLICTS,
3608 SPECIAL_SHUTDOWN_TARGET, NULL, true);
3609 if (r < 0)
c68364b7
LP
3610 goto finish;
3611 }
3612
2c4104f0
LP
3613 r = 0;
3614
3615finish:
fbe9f3a9 3616
c68364b7
LP
3617 for (i = 0; i < ELEMENTSOF(rcnd_table); i++)
3618 set_free(runlevel_services[i]);
2c4104f0
LP
3619
3620 return r;
3621}
07459bb6 3622#endif
2c4104f0 3623
05e343b7
LP
3624static void service_bus_name_owner_change(
3625 Unit *u,
3626 const char *name,
3627 const char *old_owner,
3628 const char *new_owner) {
3629
3630 Service *s = SERVICE(u);
718db961 3631 int r;
05e343b7
LP
3632
3633 assert(s);
3634 assert(name);
3635
3636 assert(streq(s->bus_name, name));
3637 assert(old_owner || new_owner);
3638
3639 if (old_owner && new_owner)
66870f90
ZJS
3640 log_debug_unit(u->id,
3641 "%s's D-Bus name %s changed owner from %s to %s",
3642 u->id, name, old_owner, new_owner);
05e343b7 3643 else if (old_owner)
66870f90
ZJS
3644 log_debug_unit(u->id,
3645 "%s's D-Bus name %s no longer registered by %s",
3646 u->id, name, old_owner);
05e343b7 3647 else
66870f90
ZJS
3648 log_debug_unit(u->id,
3649 "%s's D-Bus name %s now registered by %s",
3650 u->id, name, new_owner);
05e343b7
LP
3651
3652 s->bus_name_good = !!new_owner;
3653
3654 if (s->type == SERVICE_DBUS) {
3655
3656 /* service_enter_running() will figure out what to
3657 * do */
3658 if (s->state == SERVICE_RUNNING)
f42806df 3659 service_enter_running(s, SERVICE_SUCCESS);
05e343b7
LP
3660 else if (s->state == SERVICE_START && new_owner)
3661 service_enter_start_post(s);
3662
3663 } else if (new_owner &&
3664 s->main_pid <= 0 &&
3665 (s->state == SERVICE_START ||
3666 s->state == SERVICE_START_POST ||
3667 s->state == SERVICE_RUNNING ||
3668 s->state == SERVICE_RELOAD)) {
3669
5b12334d 3670 _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
718db961 3671 pid_t pid;
05e343b7 3672
718db961 3673 /* Try to acquire PID from bus service */
05e343b7 3674
49b832c5 3675 r = sd_bus_get_owner(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
5b12334d
LP
3676 if (r >= 0)
3677 r = sd_bus_creds_get_pid(creds, &pid);
718db961
LP
3678 if (r >= 0) {
3679 log_debug_unit(u->id, "%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
05e343b7 3680
718db961
LP
3681 service_set_main_pid(s, pid);
3682 unit_watch_pid(UNIT(s), pid);
3683 }
7400b9d2 3684 }
05e343b7
LP
3685}
3686
6cf6bbc2 3687int service_set_socket_fd(Service *s, int fd, Socket *sock) {
79a98c60
LP
3688 _cleanup_free_ char *peer = NULL;
3689 int r;
57020a3a 3690
4f2d528d
LP
3691 assert(s);
3692 assert(fd >= 0);
3693
3694 /* This is called by the socket code when instantiating a new
3695 * service for a stream socket and the socket needs to be
3696 * configured. */
3697
1124fe6f 3698 if (UNIT(s)->load_state != UNIT_LOADED)
4f2d528d
LP
3699 return -EINVAL;
3700
3701 if (s->socket_fd >= 0)
3702 return -EBUSY;
3703
3704 if (s->state != SERVICE_DEAD)
3705 return -EAGAIN;
3706
79a98c60
LP
3707 if (getpeername_pretty(fd, &peer) >= 0) {
3708
3709 if (UNIT(s)->description) {
3710 _cleanup_free_ char *a;
3711
3712 a = strjoin(UNIT(s)->description, " (", peer, ")", NULL);
3713 if (!a)
3714 return -ENOMEM;
3715
3716 r = unit_set_description(UNIT(s), a);
3717 } else
3718 r = unit_set_description(UNIT(s), peer);
3719
3720 if (r < 0)
3721 return r;
3722 }
3723
4f2d528d 3724 s->socket_fd = fd;
6cf6bbc2 3725
57020a3a
LP
3726 unit_ref_set(&s->accept_socket, UNIT(sock));
3727
3728 return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
4f2d528d
LP
3729}
3730
fdf20a31 3731static void service_reset_failed(Unit *u) {
5632e374
LP
3732 Service *s = SERVICE(u);
3733
3734 assert(s);
3735
fdf20a31 3736 if (s->state == SERVICE_FAILED)
5632e374
LP
3737 service_set_state(s, SERVICE_DEAD);
3738
f42806df
LP
3739 s->result = SERVICE_SUCCESS;
3740 s->reload_result = SERVICE_SUCCESS;
451b34cc
LP
3741
3742 RATELIMIT_RESET(s->start_limit);
5632e374
LP
3743}
3744
718db961 3745static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
8a0867d6 3746 Service *s = SERVICE(u);
41efeaec 3747
814cc562 3748 return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
8a0867d6
LP
3749}
3750
94f04347
LP
3751static const char* const service_state_table[_SERVICE_STATE_MAX] = {
3752 [SERVICE_DEAD] = "dead",
3753 [SERVICE_START_PRE] = "start-pre",
3754 [SERVICE_START] = "start",
3755 [SERVICE_START_POST] = "start-post",
3756 [SERVICE_RUNNING] = "running",
80876c20 3757 [SERVICE_EXITED] = "exited",
94f04347
LP
3758 [SERVICE_RELOAD] = "reload",
3759 [SERVICE_STOP] = "stop",
3760 [SERVICE_STOP_SIGTERM] = "stop-sigterm",
3761 [SERVICE_STOP_SIGKILL] = "stop-sigkill",
3762 [SERVICE_STOP_POST] = "stop-post",
3763 [SERVICE_FINAL_SIGTERM] = "final-sigterm",
3764 [SERVICE_FINAL_SIGKILL] = "final-sigkill",
fdf20a31 3765 [SERVICE_FAILED] = "failed",
94f04347
LP
3766 [SERVICE_AUTO_RESTART] = "auto-restart",
3767};
3768
3769DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
3770
3771static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
525ee6f4
LP
3772 [SERVICE_RESTART_NO] = "no",
3773 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
50caaedb 3774 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
dc99a976 3775 [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
50caaedb
LP
3776 [SERVICE_RESTART_ON_ABORT] = "on-abort",
3777 [SERVICE_RESTART_ALWAYS] = "always"
94f04347
LP
3778};
3779
3780DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3781
3782static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
94f04347 3783 [SERVICE_SIMPLE] = "simple",
0d624a78 3784 [SERVICE_FORKING] = "forking",
34e9ba66 3785 [SERVICE_ONESHOT] = "oneshot",
8c47c732 3786 [SERVICE_DBUS] = "dbus",
f2b68789
LP
3787 [SERVICE_NOTIFY] = "notify",
3788 [SERVICE_IDLE] = "idle"
94f04347
LP
3789};
3790
3791DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3792
e537352b 3793static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
94f04347
LP
3794 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
3795 [SERVICE_EXEC_START] = "ExecStart",
3796 [SERVICE_EXEC_START_POST] = "ExecStartPost",
3797 [SERVICE_EXEC_RELOAD] = "ExecReload",
3798 [SERVICE_EXEC_STOP] = "ExecStop",
3799 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3800};
3801
3802DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3803
c952c6ec
LP
3804static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
3805 [NOTIFY_NONE] = "none",
3806 [NOTIFY_MAIN] = "main",
3807 [NOTIFY_ALL] = "all"
3808};
3809
3810DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
3811
f42806df
LP
3812static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3813 [SERVICE_SUCCESS] = "success",
3814 [SERVICE_FAILURE_RESOURCES] = "resources",
3815 [SERVICE_FAILURE_TIMEOUT] = "timeout",
3816 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3817 [SERVICE_FAILURE_SIGNAL] = "signal",
bb242b7b 3818 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
8d1b002a
LP
3819 [SERVICE_FAILURE_WATCHDOG] = "watchdog",
3820 [SERVICE_FAILURE_START_LIMIT] = "start-limit"
f42806df
LP
3821};
3822
3823DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3824
4b939747
MO
3825static const char* const start_limit_action_table[_SERVICE_START_LIMIT_MAX] = {
3826 [SERVICE_START_LIMIT_NONE] = "none",
3827 [SERVICE_START_LIMIT_REBOOT] = "reboot",
3828 [SERVICE_START_LIMIT_REBOOT_FORCE] = "reboot-force",
3829 [SERVICE_START_LIMIT_REBOOT_IMMEDIATE] = "reboot-immediate"
3830};
3831DEFINE_STRING_TABLE_LOOKUP(start_limit_action, StartLimitAction);
3832
87f0e418 3833const UnitVTable service_vtable = {
7d17cfbc 3834 .object_size = sizeof(Service),
718db961
LP
3835 .exec_context_offset = offsetof(Service, exec_context),
3836 .cgroup_context_offset = offsetof(Service, cgroup_context),
3837 .kill_context_offset = offsetof(Service, kill_context),
613b411c 3838 .exec_runtime_offset = offsetof(Service, exec_runtime),
3ef63c31 3839
f975e971
LP
3840 .sections =
3841 "Unit\0"
3842 "Service\0"
3843 "Install\0",
4ad49000 3844 .private_section = "Service",
71645aca 3845
034c6ed7
LP
3846 .init = service_init,
3847 .done = service_done,
a16e1123
LP
3848 .load = service_load,
3849
3850 .coldplug = service_coldplug,
034c6ed7 3851
5cb5a6ff
LP
3852 .dump = service_dump,
3853
3854 .start = service_start,
3855 .stop = service_stop,
3856 .reload = service_reload,
3857
034c6ed7
LP
3858 .can_reload = service_can_reload,
3859
8a0867d6
LP
3860 .kill = service_kill,
3861
a16e1123
LP
3862 .serialize = service_serialize,
3863 .deserialize_item = service_deserialize_item,
3864
5cb5a6ff 3865 .active_state = service_active_state,
10a94420 3866 .sub_state_to_string = service_sub_state_to_string,
5cb5a6ff 3867
701cc384
LP
3868 .check_gc = service_check_gc,
3869 .check_snapshot = service_check_snapshot,
3870
034c6ed7 3871 .sigchld_event = service_sigchld_event,
2c4104f0 3872
fdf20a31 3873 .reset_failed = service_reset_failed,
5632e374 3874
4ad49000 3875 .notify_cgroup_empty = service_notify_cgroup_empty_event,
8c47c732 3876 .notify_message = service_notify_message,
8e274523 3877
05e343b7 3878 .bus_name_owner_change = service_bus_name_owner_change,
05e343b7 3879
c4e2ceae 3880 .bus_interface = "org.freedesktop.systemd1.Service",
718db961 3881 .bus_vtable = bus_service_vtable,
74c964d3
LP
3882 .bus_set_property = bus_service_set_property,
3883 .bus_commit_properties = bus_service_commit_properties,
4139c1b2 3884
68db7a3b
ZJS
3885 .get_timeout = service_get_timeout,
3886
07459bb6 3887#ifdef HAVE_SYSV_COMPAT
c6918296 3888 .enumerate = service_enumerate,
07459bb6 3889#endif
718db961
LP
3890
3891 .can_transient = true,
3892
c6918296
MS
3893 .status_message_formats = {
3894 .starting_stopping = {
3895 [0] = "Starting %s...",
3896 [1] = "Stopping %s...",
3897 },
3898 .finished_start_job = {
3899 [JOB_DONE] = "Started %s.",
3900 [JOB_FAILED] = "Failed to start %s.",
3901 [JOB_DEPENDENCY] = "Dependency failed for %s.",
3902 [JOB_TIMEOUT] = "Timed out starting %s.",
3903 },
3904 .finished_stop_job = {
3905 [JOB_DONE] = "Stopped %s.",
3906 [JOB_FAILED] = "Stopped (with error) %s.",
3907 [JOB_TIMEOUT] = "Timed out stopping %s.",
3908 },
3909 },
5cb5a6ff 3910};