]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/service.c
core: --user -- add basic.target an sort against it like --system does
[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]) {
66870f90
ZJS
1095 log_error_unit(UNIT(s)->id,
1096 "%s lacks ExecStart setting. Refusing.", UNIT(s)->id);
243b1432
LP
1097 return -EINVAL;
1098 }
1099
34e9ba66
LP
1100 if (s->type != SERVICE_ONESHOT &&
1101 s->exec_command[SERVICE_EXEC_START]->command_next) {
66870f90
ZJS
1102 log_error_unit(UNIT(s)->id,
1103 "%s has more than one ExecStart setting, which is only allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
6cf6bbc2
LP
1104 return -EINVAL;
1105 }
1106
b0693d30
MW
1107 if (s->type == SERVICE_ONESHOT && s->restart != SERVICE_RESTART_NO) {
1108 log_error_unit(UNIT(s)->id,
1109 "%s has Restart setting other than no, which isn't allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
1110 return -EINVAL;
1111 }
1112
05e343b7 1113 if (s->type == SERVICE_DBUS && !s->bus_name) {
66870f90
ZJS
1114 log_error_unit(UNIT(s)->id,
1115 "%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", UNIT(s)->id);
4d0e5dbd
LP
1116 return -EINVAL;
1117 }
1118
7e2668c6 1119 if (s->bus_name && s->type != SERVICE_DBUS)
66870f90
ZJS
1120 log_warning_unit(UNIT(s)->id,
1121 "%s has a D-Bus service name specified, but is not of type dbus. Ignoring.", UNIT(s)->id);
7e2668c6 1122
4819ff03 1123 if (s->exec_context.pam_name && s->kill_context.kill_mode != KILL_CONTROL_GROUP) {
66870f90
ZJS
1124 log_error_unit(UNIT(s)->id,
1125 "%s has PAM enabled. Kill mode must be set to 'control-group'. Refusing.", UNIT(s)->id);
05e343b7
LP
1126 return -EINVAL;
1127 }
1128
243b1432
LP
1129 return 0;
1130}
1131
a40eb732
LP
1132static int service_add_default_dependencies(Service *s) {
1133 int r;
1134
1135 assert(s);
1136
1137 /* Add a number of automatic dependencies useful for the
1138 * majority of services. */
1139
1140 /* First, pull in base system */
fccd44ec
KS
1141 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
1142 SPECIAL_BASIC_TARGET, NULL, true);
1143 if (r < 0)
1144 return r;
a40eb732
LP
1145
1146 /* Second, activate normal shutdown */
117dcc57
ZJS
1147 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS,
1148 SPECIAL_SHUTDOWN_TARGET, NULL, true);
1149 return r;
a40eb732
LP
1150}
1151
4dfc092a
LP
1152static void service_fix_output(Service *s) {
1153 assert(s);
1154
1155 /* If nothing has been explicitly configured, patch default
1156 * output in. If input is socket/tty we avoid this however,
1157 * since in that case we want output to default to the same
1158 * place as we read input from. */
1159
1160 if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
1161 s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1162 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 1163 s->exec_context.std_error = UNIT(s)->manager->default_std_error;
4dfc092a
LP
1164
1165 if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1166 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 1167 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
4dfc092a
LP
1168}
1169
e537352b
LP
1170static int service_load(Unit *u) {
1171 int r;
1172 Service *s = SERVICE(u);
1173
1174 assert(s);
1e2e8133 1175
5cb5a6ff 1176 /* Load a .service file */
c2756a68
LP
1177 r = unit_load_fragment(u);
1178 if (r < 0)
5cb5a6ff
LP
1179 return r;
1180
07459bb6 1181#ifdef HAVE_SYSV_COMPAT
bd77d0fc 1182 /* Load a classic init script as a fallback, if we couldn't find anything */
c2756a68
LP
1183 if (u->load_state == UNIT_STUB) {
1184 r = service_load_sysv(s);
1185 if (r < 0)
23a177ef 1186 return r;
c2756a68 1187 }
07459bb6 1188#endif
d46de8a1 1189
23a177ef 1190 /* Still nothing found? Then let's give up */
ac155bb8 1191 if (u->load_state == UNIT_STUB)
23a177ef 1192 return -ENOENT;
034c6ed7 1193
23a177ef 1194 /* This is a new unit? Then let's add in some extras */
ac155bb8 1195 if (u->load_state == UNIT_LOADED) {
c2756a68
LP
1196
1197 /* We were able to load something, then let's add in
1198 * the dropin directories. */
1199 r = unit_load_dropin(u);
1200 if (r < 0)
1201 return r;
1202
0b86feac
LP
1203 if (s->type == _SERVICE_TYPE_INVALID)
1204 s->type = s->bus_name ? SERVICE_DBUS : SERVICE_SIMPLE;
1205
d568a335
MS
1206 /* Oneshot services have disabled start timeout by default */
1207 if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
1208 s->timeout_start_usec = 0;
98709151 1209
4e2b0f9b
LP
1210 service_fix_output(s);
1211
117dcc57
ZJS
1212 r = unit_add_exec_dependencies(u, &s->exec_context);
1213 if (r < 0)
23a177ef
LP
1214 return r;
1215
a016b922
LP
1216 r = unit_add_default_slice(u);
1217 if (r < 0)
1218 return r;
1219
07459bb6 1220#ifdef HAVE_SYSV_COMPAT
117dcc57
ZJS
1221 r = sysv_fix_order(s);
1222 if (r < 0)
23a177ef 1223 return r;
07459bb6 1224#endif
05e343b7 1225
718db961
LP
1226 if (s->bus_name) {
1227 r = unit_watch_bus_name(u, s->bus_name);
1228 if (r < 0)
a40eb732 1229 return r;
718db961 1230 }
c952c6ec
LP
1231
1232 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
1233 s->notify_access = NOTIFY_MAIN;
a40eb732 1234
02c4ef9c
LP
1235 if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
1236 s->notify_access = NOTIFY_MAIN;
1237
117dcc57 1238 if (s->type == SERVICE_DBUS || s->bus_name) {
999b6003 1239 r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_REQUIRES, SPECIAL_DBUS_SOCKET, NULL, true);
117dcc57 1240 if (r < 0)
a40eb732 1241 return r;
117dcc57 1242 }
a40eb732 1243
117dcc57
ZJS
1244 if (UNIT(s)->default_dependencies) {
1245 r = service_add_default_dependencies(s);
1246 if (r < 0)
a40eb732 1247 return r;
117dcc57 1248 }
e06c73cc 1249
cba6e062 1250 r = unit_exec_context_defaults(u, &s->exec_context);
e06c73cc
LP
1251 if (r < 0)
1252 return r;
8e274523
LP
1253 }
1254
243b1432 1255 return service_verify(s);
034c6ed7
LP
1256}
1257
87f0e418 1258static void service_dump(Unit *u, FILE *f, const char *prefix) {
5cb5a6ff 1259
5cb5a6ff 1260 ServiceExecCommand c;
87f0e418 1261 Service *s = SERVICE(u);
47be870b 1262 const char *prefix2;
7fd1b19b 1263 _cleanup_free_ char *p2 = NULL;
5cb5a6ff
LP
1264
1265 assert(s);
1266
47be870b
LP
1267 p2 = strappend(prefix, "\t");
1268 prefix2 = p2 ? p2 : prefix;
44d8db9e 1269
5cb5a6ff 1270 fprintf(f,
81a2b7ce 1271 "%sService State: %s\n"
f42806df
LP
1272 "%sResult: %s\n"
1273 "%sReload Result: %s\n"
81a2b7ce 1274 "%sPermissionsStartOnly: %s\n"
8e274523 1275 "%sRootDirectoryStartOnly: %s\n"
02ee865a 1276 "%sRemainAfterExit: %s\n"
3185a36b 1277 "%sGuessMainPID: %s\n"
c952c6ec 1278 "%sType: %s\n"
2cf3143a 1279 "%sRestart: %s\n"
c952c6ec 1280 "%sNotifyAccess: %s\n",
81a2b7ce 1281 prefix, service_state_to_string(s->state),
f42806df
LP
1282 prefix, service_result_to_string(s->result),
1283 prefix, service_result_to_string(s->reload_result),
81a2b7ce 1284 prefix, yes_no(s->permissions_start_only),
8e274523 1285 prefix, yes_no(s->root_directory_start_only),
02ee865a 1286 prefix, yes_no(s->remain_after_exit),
3185a36b 1287 prefix, yes_no(s->guess_main_pid),
c952c6ec 1288 prefix, service_type_to_string(s->type),
2cf3143a 1289 prefix, service_restart_to_string(s->restart),
c952c6ec 1290 prefix, notify_access_to_string(s->notify_access));
5cb5a6ff 1291
70123e68
LP
1292 if (s->control_pid > 0)
1293 fprintf(f,
ccd06097
ZJS
1294 "%sControl PID: "PID_FMT"\n",
1295 prefix, s->control_pid);
70123e68
LP
1296
1297 if (s->main_pid > 0)
1298 fprintf(f,
ccd06097 1299 "%sMain PID: "PID_FMT"\n"
6dfa5494
LP
1300 "%sMain PID Known: %s\n"
1301 "%sMain PID Alien: %s\n",
ccd06097 1302 prefix, s->main_pid,
6dfa5494
LP
1303 prefix, yes_no(s->main_pid_known),
1304 prefix, yes_no(s->main_pid_alien));
70123e68 1305
034c6ed7
LP
1306 if (s->pid_file)
1307 fprintf(f,
1308 "%sPIDFile: %s\n",
1309 prefix, s->pid_file);
1310
05e343b7
LP
1311 if (s->bus_name)
1312 fprintf(f,
1313 "%sBusName: %s\n"
1314 "%sBus Name Good: %s\n",
1315 prefix, s->bus_name,
1316 prefix, yes_no(s->bus_name_good));
1317
4819ff03 1318 kill_context_dump(&s->kill_context, f, prefix);
5cb5a6ff
LP
1319 exec_context_dump(&s->exec_context, f, prefix);
1320
e537352b 1321 for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
5cb5a6ff 1322
44d8db9e
LP
1323 if (!s->exec_command[c])
1324 continue;
1325
40d50879 1326 fprintf(f, "%s-> %s:\n",
94f04347 1327 prefix, service_exec_command_to_string(c));
44d8db9e
LP
1328
1329 exec_command_dump_list(s->exec_command[c], f, prefix2);
5cb5a6ff 1330 }
44d8db9e 1331
07459bb6 1332#ifdef HAVE_SYSV_COMPAT
1b64d026 1333 if (s->is_sysv)
2c4104f0 1334 fprintf(f,
9fff8a1f
LP
1335 "%sSysV Init Script has LSB Header: %s\n"
1336 "%sSysVEnabled: %s\n",
9fff8a1f
LP
1337 prefix, yes_no(s->sysv_has_lsb),
1338 prefix, yes_no(s->sysv_enabled));
2c4104f0
LP
1339
1340 if (s->sysv_start_priority >= 0)
1341 fprintf(f,
9fff8a1f
LP
1342 "%sSysVStartPriority: %i\n",
1343 prefix, s->sysv_start_priority);
2c4104f0 1344
8309400a
LP
1345 if (s->sysv_runlevels)
1346 fprintf(f, "%sSysVRunLevels: %s\n",
1347 prefix, s->sysv_runlevels);
07459bb6 1348#endif
23a177ef 1349
8c47c732
LP
1350 if (s->status_text)
1351 fprintf(f, "%sStatus Text: %s\n",
1352 prefix, s->status_text);
5cb5a6ff
LP
1353}
1354
c5419d42 1355static int service_load_pid_file(Service *s, bool may_warn) {
7fd1b19b 1356 _cleanup_free_ char *k = NULL;
034c6ed7 1357 int r;
5925dd3c 1358 pid_t pid;
034c6ed7
LP
1359
1360 assert(s);
1361
034c6ed7 1362 if (!s->pid_file)
13230d5d 1363 return -ENOENT;
034c6ed7 1364
117dcc57
ZJS
1365 r = read_one_line_file(s->pid_file, &k);
1366 if (r < 0) {
c5419d42 1367 if (may_warn)
66870f90
ZJS
1368 log_info_unit(UNIT(s)->id,
1369 "PID file %s not readable (yet?) after %s.",
1370 s->pid_file, service_state_to_string(s->state));
034c6ed7 1371 return r;
5375410b 1372 }
034c6ed7 1373
5925dd3c 1374 r = parse_pid(k, &pid);
bc41f93e
ZJS
1375 if (r < 0) {
1376 if (may_warn)
1377 log_info_unit(UNIT(s)->id,
1378 "Failed to read PID from file %s: %s",
1379 s->pid_file, strerror(-r));
5925dd3c 1380 return r;
bc41f93e 1381 }
406eaf93 1382
5925dd3c 1383 if (kill(pid, 0) < 0 && errno != EPERM) {
c5419d42 1384 if (may_warn)
66870f90 1385 log_info_unit(UNIT(s)->id,
ccd06097
ZJS
1386 "PID "PID_FMT" read from file %s does not exist.",
1387 pid, s->pid_file);
b8c597d5
LP
1388 return -ESRCH;
1389 }
1390
db01f8b3
MS
1391 if (s->main_pid_known) {
1392 if (pid == s->main_pid)
1393 return 0;
1394
66870f90 1395 log_debug_unit(UNIT(s)->id,
ccd06097
ZJS
1396 "Main PID changing: "PID_FMT" -> "PID_FMT,
1397 s->main_pid, pid);
db01f8b3
MS
1398 service_unwatch_main_pid(s);
1399 s->main_pid_known = false;
3a111838 1400 } else
66870f90 1401 log_debug_unit(UNIT(s)->id,
ccd06097 1402 "Main PID loaded: "PID_FMT, pid);
db01f8b3 1403
117dcc57
ZJS
1404 r = service_set_main_pid(s, pid);
1405 if (r < 0)
16f6025e
LP
1406 return r;
1407
117dcc57 1408 r = unit_watch_pid(UNIT(s), pid);
bc41f93e 1409 if (r < 0) {
5925dd3c 1410 /* FIXME: we need to do something here */
bc41f93e 1411 log_warning_unit(UNIT(s)->id,
ccd06097
ZJS
1412 "Failed to watch PID "PID_FMT" from service %s",
1413 pid, UNIT(s)->id);
5925dd3c 1414 return r;
bc41f93e 1415 }
034c6ed7
LP
1416
1417 return 0;
1418}
1419
4fbf50b3
LP
1420static int service_search_main_pid(Service *s) {
1421 pid_t pid;
1422 int r;
1423
1424 assert(s);
1425
3185a36b
LP
1426 /* If we know it anyway, don't ever fallback to unreliable
1427 * heuristics */
4fbf50b3
LP
1428 if (s->main_pid_known)
1429 return 0;
1430
3185a36b
LP
1431 if (!s->guess_main_pid)
1432 return 0;
1433
4fbf50b3
LP
1434 assert(s->main_pid <= 0);
1435
4ad49000 1436 pid = unit_search_main_pid(UNIT(s));
117dcc57 1437 if (pid <= 0)
4fbf50b3
LP
1438 return -ENOENT;
1439
66870f90 1440 log_debug_unit(UNIT(s)->id,
ccd06097 1441 "Main PID guessed: "PID_FMT, pid);
117dcc57
ZJS
1442 r = service_set_main_pid(s, pid);
1443 if (r < 0)
4fbf50b3
LP
1444 return r;
1445
117dcc57
ZJS
1446 r = unit_watch_pid(UNIT(s), pid);
1447 if (r < 0)
4fbf50b3 1448 /* FIXME: we need to do something here */
a827e373 1449 log_warning_unit(UNIT(s)->id,
ccd06097
ZJS
1450 "Failed to watch PID "PID_FMT" from service %s",
1451 pid, UNIT(s)->id);
4fbf50b3
LP
1452 return r;
1453
1454 return 0;
1455}
1456
034c6ed7
LP
1457static void service_set_state(Service *s, ServiceState state) {
1458 ServiceState old_state;
e056b01d 1459 const UnitActiveState *table;
842129f5 1460
5cb5a6ff
LP
1461 assert(s);
1462
e056b01d
LP
1463 table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1464
034c6ed7 1465 old_state = s->state;
5cb5a6ff 1466 s->state = state;
034c6ed7 1467
3a111838
MS
1468 service_unwatch_pid_file(s);
1469
842129f5
LP
1470 if (!IN_SET(state,
1471 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1472 SERVICE_RELOAD,
bf108e55
LP
1473 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1474 SERVICE_STOP_POST,
842129f5
LP
1475 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
1476 SERVICE_AUTO_RESTART))
718db961 1477 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 1478
842129f5
LP
1479 if (!IN_SET(state,
1480 SERVICE_START, SERVICE_START_POST,
1481 SERVICE_RUNNING, SERVICE_RELOAD,
bf108e55
LP
1482 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1483 SERVICE_STOP_POST,
1484 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1485 service_unwatch_main_pid(s);
867b3b7d
LP
1486 s->main_command = NULL;
1487 }
034c6ed7 1488
842129f5
LP
1489 if (!IN_SET(state,
1490 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1491 SERVICE_RELOAD,
bf108e55
LP
1492 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1493 SERVICE_STOP_POST,
842129f5 1494 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1495 service_unwatch_control_pid(s);
034c6ed7 1496 s->control_command = NULL;
a16e1123 1497 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
e537352b 1498 }
034c6ed7 1499
842129f5
LP
1500 if (!IN_SET(state,
1501 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1502 SERVICE_RUNNING, SERVICE_RELOAD,
1503 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1504 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
1124fe6f 1505 !(state == SERVICE_DEAD && UNIT(s)->job)) {
4f2d528d 1506 service_close_socket_fd(s);
6cf6bbc2
LP
1507 service_connection_unref(s);
1508 }
4f2d528d 1509
7596e9e1 1510 if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
a6927d7f
MO
1511 service_stop_watchdog(s);
1512
f6023656
LP
1513 /* For the inactive states unit_notify() will trim the cgroup,
1514 * but for exit we have to do that ourselves... */
1124fe6f 1515 if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
4ad49000 1516 unit_destroy_cgroup(UNIT(s));
f6023656 1517
9cd86184
OB
1518 /* For remain_after_exit services, let's see if we can "release" the
1519 * hold on the console, since unit_notify() only does that in case of
1520 * change of state */
1521 if (state == SERVICE_EXITED && s->remain_after_exit &&
1522 UNIT(s)->manager->n_on_console > 0) {
1523 ExecContext *ec = unit_get_exec_context(UNIT(s));
1524 if (ec && exec_context_may_touch_console(ec)) {
1525 Manager *m = UNIT(s)->manager;
1526
1527 m->n_on_console --;
1528 if (m->n_on_console == 0)
1529 /* unset no_console_output flag, since the console is free */
1530 m->no_console_output = false;
1531 }
1532 }
1533
e537352b 1534 if (old_state != state)
842129f5 1535 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 1536
e056b01d 1537 unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
f42806df 1538 s->reload_result = SERVICE_SUCCESS;
034c6ed7
LP
1539}
1540
a16e1123
LP
1541static int service_coldplug(Unit *u) {
1542 Service *s = SERVICE(u);
1543 int r;
1544
1545 assert(s);
1546 assert(s->state == SERVICE_DEAD);
1547
1548 if (s->deserialized_state != s->state) {
1549
bf108e55
LP
1550 if (IN_SET(s->deserialized_state,
1551 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1552 SERVICE_RELOAD,
1553 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1554 SERVICE_STOP_POST,
1555 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
92c1622e
LP
1556
1557 usec_t k;
6c12b52e 1558
bf108e55 1559 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 1560
92c1622e
LP
1561 /* For the start/stop timeouts 0 means off */
1562 if (k > 0) {
1563 r = service_arm_timer(s, k);
36697dc0 1564 if (r < 0)
e558336f
LP
1565 return r;
1566 }
1567 }
a16e1123 1568
92c1622e
LP
1569 if (s->deserialized_state == SERVICE_AUTO_RESTART) {
1570
1571 /* The restart timeouts 0 means immediately */
1572 r = service_arm_timer(s, s->restart_usec);
1573 if (r < 0)
1574 return r;
1575 }
1576
bf108e55
LP
1577 if (pid_valid(s->main_pid) &&
1578 ((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
1579 IN_SET(s->deserialized_state,
1580 SERVICE_START, SERVICE_START_POST,
1581 SERVICE_RUNNING, SERVICE_RELOAD,
1582 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1583 SERVICE_STOP_POST,
1584 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
1585 r = unit_watch_pid(UNIT(s), s->main_pid);
1586 if (r < 0)
1587 return r;
1588 }
a16e1123 1589
bf108e55
LP
1590 if (pid_valid(s->control_pid) &&
1591 IN_SET(s->deserialized_state,
1592 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1593 SERVICE_RELOAD,
1594 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1595 SERVICE_STOP_POST,
1596 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1597 r = unit_watch_pid(UNIT(s), s->control_pid);
1598 if (r < 0)
1599 return r;
1600 }
a16e1123 1601
842129f5
LP
1602 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1603 service_start_watchdog(s);
bb242b7b 1604
a16e1123
LP
1605 service_set_state(s, s->deserialized_state);
1606 }
92c1622e 1607
a16e1123
LP
1608 return 0;
1609}
1610
44d8db9e
LP
1611static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1612 Iterator i;
1613 int r;
1614 int *rfds = NULL;
1615 unsigned rn_fds = 0;
57020a3a 1616 Unit *u;
44d8db9e
LP
1617
1618 assert(s);
1619 assert(fds);
1620 assert(n_fds);
1621
6cf6bbc2
LP
1622 if (s->socket_fd >= 0)
1623 return 0;
1624
1124fe6f 1625 SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
44d8db9e
LP
1626 int *cfds;
1627 unsigned cn_fds;
57020a3a
LP
1628 Socket *sock;
1629
ac155bb8 1630 if (u->type != UNIT_SOCKET)
57020a3a
LP
1631 continue;
1632
1633 sock = SOCKET(u);
44d8db9e 1634
117dcc57
ZJS
1635 r = socket_collect_fds(sock, &cfds, &cn_fds);
1636 if (r < 0)
44d8db9e
LP
1637 goto fail;
1638
1639 if (!cfds)
1640 continue;
1641
1642 if (!rfds) {
1643 rfds = cfds;
1644 rn_fds = cn_fds;
1645 } else {
1646 int *t;
1647
117dcc57
ZJS
1648 t = new(int, rn_fds+cn_fds);
1649 if (!t) {
44d8db9e
LP
1650 free(cfds);
1651 r = -ENOMEM;
1652 goto fail;
1653 }
1654
9c1b183c
LP
1655 memcpy(t, rfds, rn_fds * sizeof(int));
1656 memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
44d8db9e
LP
1657 free(rfds);
1658 free(cfds);
1659
1660 rfds = t;
1661 rn_fds = rn_fds+cn_fds;
1662 }
1663 }
1664
1665 *fds = rfds;
1666 *n_fds = rn_fds;
3e33402a 1667
44d8db9e
LP
1668 return 0;
1669
1670fail:
1671 free(rfds);
3e33402a 1672
44d8db9e
LP
1673 return r;
1674}
1675
81a2b7ce
LP
1676static int service_spawn(
1677 Service *s,
1678 ExecCommand *c,
1679 bool timeout,
1680 bool pass_fds,
1681 bool apply_permissions,
1682 bool apply_chroot,
1e3ad081 1683 bool apply_tty_stdin,
c952c6ec 1684 bool set_notify_socket,
ecedd90f 1685 bool is_control,
81a2b7ce
LP
1686 pid_t *_pid) {
1687
034c6ed7
LP
1688 pid_t pid;
1689 int r;
117dcc57 1690 int *fds = NULL;
7fd1b19b 1691 _cleanup_free_ int *fdsbuf = NULL;
2105e76a 1692 unsigned n_fds = 0, n_env = 0;
7fd1b19b 1693 _cleanup_strv_free_ char
117dcc57 1694 **argv = NULL, **final_env = NULL, **our_env = NULL;
4ad49000 1695 const char *path;
034c6ed7
LP
1696
1697 assert(s);
1698 assert(c);
1699 assert(_pid);
1700
4ad49000
LP
1701 unit_realize_cgroup(UNIT(s));
1702
613b411c
LP
1703 r = unit_setup_exec_runtime(UNIT(s));
1704 if (r < 0)
1705 goto fail;
1706
6cf6bbc2
LP
1707 if (pass_fds ||
1708 s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1709 s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1710 s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1711
4f2d528d
LP
1712 if (s->socket_fd >= 0) {
1713 fds = &s->socket_fd;
1714 n_fds = 1;
6cf6bbc2 1715 } else {
117dcc57
ZJS
1716 r = service_collect_fds(s, &fdsbuf, &n_fds);
1717 if (r < 0)
6cf6bbc2
LP
1718 goto fail;
1719
1720 fds = fdsbuf;
1721 }
4f2d528d 1722 }
44d8db9e 1723
92c1622e
LP
1724 if (timeout && s->timeout_start_usec > 0) {
1725 r = service_arm_timer(s, s->timeout_start_usec);
1726 if (r < 0)
1727 goto fail;
1728 } else
1729 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 1730
19f6d710
LP
1731 r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
1732 if (r < 0)
9e2f7c11 1733 goto fail;
9e2f7c11 1734
09812eb7 1735 our_env = new0(char*, 4);
97ae63e2 1736 if (!our_env) {
2105e76a
LP
1737 r = -ENOMEM;
1738 goto fail;
1739 }
c952c6ec 1740
2105e76a 1741 if (set_notify_socket)
1124fe6f 1742 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
c952c6ec
LP
1743 r = -ENOMEM;
1744 goto fail;
1745 }
1746
2105e76a 1747 if (s->main_pid > 0)
ccd06097 1748 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
c952c6ec
LP
1749 r = -ENOMEM;
1750 goto fail;
1751 }
2105e76a 1752
4ad49000 1753 if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
ccd06097 1754 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
97ae63e2
LP
1755 r = -ENOMEM;
1756 goto fail;
1757 }
1758
1759 final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
1760 if (!final_env) {
2105e76a
LP
1761 r = -ENOMEM;
1762 goto fail;
1763 }
c952c6ec 1764
4ad49000
LP
1765 if (is_control && UNIT(s)->cgroup_path) {
1766 path = strappenda(UNIT(s)->cgroup_path, "/control");
1767 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
1768 } else
1769 path = UNIT(s)->cgroup_path;
1770
9e2f7c11
LP
1771 r = exec_spawn(c,
1772 argv,
1773 &s->exec_context,
1774 fds, n_fds,
2105e76a 1775 final_env,
9e2f7c11
LP
1776 apply_permissions,
1777 apply_chroot,
1e3ad081 1778 apply_tty_stdin,
1124fe6f 1779 UNIT(s)->manager->confirm_spawn,
13b84ec7 1780 UNIT(s)->manager->cgroup_supported,
4ad49000 1781 path,
62bca2c6 1782 UNIT(s)->id,
09812eb7 1783 s->watchdog_usec,
f2b68789 1784 s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
613b411c 1785 s->exec_runtime,
9e2f7c11 1786 &pid);
9e2f7c11 1787 if (r < 0)
034c6ed7
LP
1788 goto fail;
1789
117dcc57
ZJS
1790 r = unit_watch_pid(UNIT(s), pid);
1791 if (r < 0)
034c6ed7
LP
1792 /* FIXME: we need to do something here */
1793 goto fail;
1794
1795 *_pid = pid;
1796
5cb5a6ff 1797 return 0;
034c6ed7
LP
1798
1799fail:
1800 if (timeout)
718db961 1801 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7
LP
1802
1803 return r;
1804}
1805
80876c20
LP
1806static int main_pid_good(Service *s) {
1807 assert(s);
1808
1809 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1810 * don't know */
1811
1812 /* If we know the pid file, then lets just check if it is
1813 * still valid */
6dfa5494
LP
1814 if (s->main_pid_known) {
1815
1816 /* If it's an alien child let's check if it is still
1817 * alive ... */
62220cf7 1818 if (s->main_pid_alien && s->main_pid > 0)
6dfa5494
LP
1819 return kill(s->main_pid, 0) >= 0 || errno != ESRCH;
1820
1821 /* .. otherwise assume we'll get a SIGCHLD for it,
1822 * which we really should wait for to collect exit
1823 * status and code */
80876c20 1824 return s->main_pid > 0;
6dfa5494 1825 }
80876c20
LP
1826
1827 /* We don't know the pid */
1828 return -EAGAIN;
1829}
1830
44a6b1b6 1831_pure_ static int control_pid_good(Service *s) {
80876c20
LP
1832 assert(s);
1833
1834 return s->control_pid > 0;
1835}
1836
1837static int cgroup_good(Service *s) {
1838 int r;
1839
1840 assert(s);
1841
4ad49000
LP
1842 if (!UNIT(s)->cgroup_path)
1843 return 0;
1844
1845 r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
117dcc57 1846 if (r < 0)
80876c20
LP
1847 return r;
1848
1849 return !r;
1850}
1851
f42806df 1852static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
034c6ed7
LP
1853 int r;
1854 assert(s);
1855
f42806df
LP
1856 if (f != SERVICE_SUCCESS)
1857 s->result = f;
034c6ed7 1858
0c7f15b3
MS
1859 service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1860
034c6ed7 1861 if (allow_restart &&
47342320 1862 !s->forbid_restart &&
034c6ed7 1863 (s->restart == SERVICE_RESTART_ALWAYS ||
f42806df
LP
1864 (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1865 (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
dc99a976 1866 (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
f42806df 1867 (s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
96342de6
LN
1868 s->result == SERVICE_FAILURE_CORE_DUMP))) &&
1869 (s->result != SERVICE_FAILURE_EXIT_CODE ||
1870 !set_contains(s->restart_ignore_status.code, INT_TO_PTR(s->main_exec_status.status))) &&
1871 (s->result != SERVICE_FAILURE_SIGNAL ||
718db961 1872 !set_contains(s->restart_ignore_status.signal, INT_TO_PTR(s->main_exec_status.status)))) {
034c6ed7 1873
718db961 1874 r = service_arm_timer(s, s->restart_usec);
f42806df 1875 if (r < 0)
034c6ed7
LP
1876 goto fail;
1877
1878 service_set_state(s, SERVICE_AUTO_RESTART);
0c7f15b3 1879 }
034c6ed7 1880
47342320
LP
1881 s->forbid_restart = false;
1882
c17ec25e 1883 /* we want fresh tmpdirs in case service is started again immediately */
613b411c
LP
1884 exec_runtime_destroy(s->exec_runtime);
1885 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
c17ec25e 1886
9285c9ff
LN
1887 /* Try to delete the pid file. At this point it will be
1888 * out-of-date, and some software might be confused by it, so
1889 * let's remove it. */
1890 if (s->pid_file)
1891 unlink_noerrno(s->pid_file);
1892
034c6ed7
LP
1893 return;
1894
1895fail:
66870f90
ZJS
1896 log_warning_unit(UNIT(s)->id,
1897 "%s failed to run install restart timer: %s",
1898 UNIT(s)->id, strerror(-r));
f42806df 1899 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1900}
1901
f42806df 1902static void service_enter_stop_post(Service *s, ServiceResult f) {
034c6ed7
LP
1903 int r;
1904 assert(s);
1905
f42806df
LP
1906 if (f != SERVICE_SUCCESS)
1907 s->result = f;
034c6ed7 1908
5e94833f
LP
1909 service_unwatch_control_pid(s);
1910
117dcc57
ZJS
1911 s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1912 if (s->control_command) {
867b3b7d
LP
1913 s->control_command_id = SERVICE_EXEC_STOP_POST;
1914
ecedd90f
LP
1915 r = service_spawn(s,
1916 s->control_command,
1917 true,
1918 false,
1919 !s->permissions_start_only,
1920 !s->root_directory_start_only,
1921 true,
1922 false,
1923 true,
1924 &s->control_pid);
1925 if (r < 0)
034c6ed7
LP
1926 goto fail;
1927
d6ea93e3 1928
80876c20
LP
1929 service_set_state(s, SERVICE_STOP_POST);
1930 } else
c961869a 1931 service_enter_dead(s, SERVICE_SUCCESS, true);
034c6ed7
LP
1932
1933 return;
1934
1935fail:
66870f90
ZJS
1936 log_warning_unit(UNIT(s)->id,
1937 "%s failed to run 'stop-post' task: %s",
1938 UNIT(s)->id, strerror(-r));
f42806df 1939 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1940}
1941
f42806df 1942static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
034c6ed7 1943 int r;
034c6ed7
LP
1944
1945 assert(s);
1946
f42806df
LP
1947 if (f != SERVICE_SUCCESS)
1948 s->result = f;
034c6ed7 1949
cd2086fe
LP
1950 r = unit_kill_context(
1951 UNIT(s),
1952 &s->kill_context,
1953 state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
1954 s->main_pid,
1955 s->control_pid,
1956 s->main_pid_alien);
1957 if (r < 0)
1958 goto fail;
034c6ed7 1959
cd2086fe 1960 if (r > 0) {
d568a335 1961 if (s->timeout_stop_usec > 0) {
718db961 1962 r = service_arm_timer(s, s->timeout_stop_usec);
d568a335 1963 if (r < 0)
e558336f 1964 goto fail;
d568a335 1965 }
d6ea93e3 1966
80876c20
LP
1967 service_set_state(s, state);
1968 } else if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
f42806df 1969 service_enter_stop_post(s, SERVICE_SUCCESS);
80876c20 1970 else
f42806df 1971 service_enter_dead(s, SERVICE_SUCCESS, true);
034c6ed7
LP
1972
1973 return;
1974
1975fail:
66870f90
ZJS
1976 log_warning_unit(UNIT(s)->id,
1977 "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
034c6ed7 1978
80876c20 1979 if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
f42806df 1980 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
034c6ed7 1981 else
f42806df 1982 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1983}
1984
f42806df 1985static void service_enter_stop(Service *s, ServiceResult f) {
034c6ed7 1986 int r;
5925dd3c 1987
034c6ed7
LP
1988 assert(s);
1989
f42806df
LP
1990 if (f != SERVICE_SUCCESS)
1991 s->result = f;
034c6ed7 1992
5e94833f
LP
1993 service_unwatch_control_pid(s);
1994
117dcc57
ZJS
1995 s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1996 if (s->control_command) {
867b3b7d
LP
1997 s->control_command_id = SERVICE_EXEC_STOP;
1998
ecedd90f
LP
1999 r = service_spawn(s,
2000 s->control_command,
2001 true,
2002 false,
2003 !s->permissions_start_only,
2004 !s->root_directory_start_only,
2005 false,
2006 false,
2007 true,
2008 &s->control_pid);
2009 if (r < 0)
034c6ed7
LP
2010 goto fail;
2011
80876c20
LP
2012 service_set_state(s, SERVICE_STOP);
2013 } else
f42806df 2014 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
2015
2016 return;
2017
2018fail:
66870f90
ZJS
2019 log_warning_unit(UNIT(s)->id,
2020 "%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2021 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2022}
2023
f42806df 2024static void service_enter_running(Service *s, ServiceResult f) {
4eab639f 2025 int main_pid_ok, cgroup_ok;
80876c20
LP
2026 assert(s);
2027
f42806df
LP
2028 if (f != SERVICE_SUCCESS)
2029 s->result = f;
80876c20 2030
4eab639f
LP
2031 main_pid_ok = main_pid_good(s);
2032 cgroup_ok = cgroup_good(s);
2033
2034 if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
05e343b7 2035 (s->bus_name_good || s->type != SERVICE_DBUS))
80876c20 2036 service_set_state(s, SERVICE_RUNNING);
02ee865a 2037 else if (s->remain_after_exit)
80876c20
LP
2038 service_set_state(s, SERVICE_EXITED);
2039 else
f42806df 2040 service_enter_stop(s, SERVICE_SUCCESS);
80876c20
LP
2041}
2042
034c6ed7
LP
2043static void service_enter_start_post(Service *s) {
2044 int r;
2045 assert(s);
2046
5e94833f 2047 service_unwatch_control_pid(s);
842129f5 2048 service_reset_watchdog(s);
bb242b7b 2049
117dcc57
ZJS
2050 s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
2051 if (s->control_command) {
867b3b7d
LP
2052 s->control_command_id = SERVICE_EXEC_START_POST;
2053
ecedd90f
LP
2054 r = service_spawn(s,
2055 s->control_command,
2056 true,
2057 false,
2058 !s->permissions_start_only,
2059 !s->root_directory_start_only,
2060 false,
2061 false,
2062 true,
2063 &s->control_pid);
2064 if (r < 0)
034c6ed7
LP
2065 goto fail;
2066
80876c20
LP
2067 service_set_state(s, SERVICE_START_POST);
2068 } else
f42806df 2069 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2070
2071 return;
2072
2073fail:
66870f90
ZJS
2074 log_warning_unit(UNIT(s)->id,
2075 "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2076 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2077}
2078
4ad49000
LP
2079static void service_kill_control_processes(Service *s) {
2080 char *p;
2081
2082 if (!UNIT(s)->cgroup_path)
2083 return;
2084
2085 p = strappenda(UNIT(s)->cgroup_path, "/control");
4ad49000
LP
2086 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
2087}
2088
034c6ed7 2089static void service_enter_start(Service *s) {
4ad49000 2090 ExecCommand *c;
034c6ed7
LP
2091 pid_t pid;
2092 int r;
2093
2094 assert(s);
2095
2096 assert(s->exec_command[SERVICE_EXEC_START]);
34e9ba66 2097 assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
034c6ed7 2098
41efeaec
LP
2099 service_unwatch_control_pid(s);
2100 service_unwatch_main_pid(s);
80876c20 2101
8f53a7b8
LP
2102 /* We want to ensure that nobody leaks processes from
2103 * START_PRE here, so let's go on a killing spree, People
2104 * should not spawn long running processes from START_PRE. */
4ad49000 2105 service_kill_control_processes(s);
8f53a7b8 2106
867b3b7d
LP
2107 if (s->type == SERVICE_FORKING) {
2108 s->control_command_id = SERVICE_EXEC_START;
2109 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
2110
2111 s->main_command = NULL;
2112 } else {
2113 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2114 s->control_command = NULL;
2115
2116 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
2117 }
34e9ba66 2118
ecedd90f
LP
2119 r = service_spawn(s,
2120 c,
117dcc57
ZJS
2121 s->type == SERVICE_FORKING || s->type == SERVICE_DBUS ||
2122 s->type == SERVICE_NOTIFY || s->type == SERVICE_ONESHOT,
ecedd90f
LP
2123 true,
2124 true,
2125 true,
2126 true,
2127 s->notify_access != NOTIFY_NONE,
2128 false,
2129 &pid);
2130 if (r < 0)
034c6ed7
LP
2131 goto fail;
2132
f2b68789 2133 if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
034c6ed7
LP
2134 /* For simple services we immediately start
2135 * the START_POST binaries. */
2136
5925dd3c 2137 service_set_main_pid(s, pid);
034c6ed7
LP
2138 service_enter_start_post(s);
2139
2140 } else if (s->type == SERVICE_FORKING) {
2141
2142 /* For forking services we wait until the start
2143 * process exited. */
2144
e55224ca 2145 s->control_pid = pid;
80876c20
LP
2146 service_set_state(s, SERVICE_START);
2147
34e9ba66 2148 } else if (s->type == SERVICE_ONESHOT ||
8c47c732
LP
2149 s->type == SERVICE_DBUS ||
2150 s->type == SERVICE_NOTIFY) {
7d55e835 2151
34e9ba66 2152 /* For oneshot services we wait until the start
7d55e835
LP
2153 * process exited, too, but it is our main process. */
2154
05e343b7 2155 /* For D-Bus services we know the main pid right away,
8c47c732
LP
2156 * but wait for the bus name to appear on the
2157 * bus. Notify services are similar. */
05e343b7 2158
5925dd3c 2159 service_set_main_pid(s, pid);
80876c20 2160 service_set_state(s, SERVICE_START);
034c6ed7
LP
2161 } else
2162 assert_not_reached("Unknown service type");
2163
2164 return;
2165
2166fail:
66870f90
ZJS
2167 log_warning_unit(UNIT(s)->id,
2168 "%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2169 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2170}
2171
2172static void service_enter_start_pre(Service *s) {
2173 int r;
2174
2175 assert(s);
2176
5e94833f
LP
2177 service_unwatch_control_pid(s);
2178
117dcc57
ZJS
2179 s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
2180 if (s->control_command) {
8f53a7b8
LP
2181 /* Before we start anything, let's clear up what might
2182 * be left from previous runs. */
4ad49000 2183 service_kill_control_processes(s);
8f53a7b8 2184
867b3b7d
LP
2185 s->control_command_id = SERVICE_EXEC_START_PRE;
2186
ecedd90f
LP
2187 r = service_spawn(s,
2188 s->control_command,
2189 true,
2190 false,
2191 !s->permissions_start_only,
2192 !s->root_directory_start_only,
2193 true,
2194 false,
2195 true,
2196 &s->control_pid);
2197 if (r < 0)
034c6ed7
LP
2198 goto fail;
2199
80876c20
LP
2200 service_set_state(s, SERVICE_START_PRE);
2201 } else
034c6ed7
LP
2202 service_enter_start(s);
2203
2204 return;
2205
2206fail:
66870f90
ZJS
2207 log_warning_unit(UNIT(s)->id,
2208 "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2209 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
2210}
2211
2212static void service_enter_restart(Service *s) {
718db961 2213 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
034c6ed7 2214 int r;
398ef8ba 2215
034c6ed7
LP
2216 assert(s);
2217
a8bb2e65
LP
2218 if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
2219 /* Don't restart things if we are going down anyway */
66870f90
ZJS
2220 log_info_unit(UNIT(s)->id,
2221 "Stop job pending for unit, delaying automatic restart.");
2edfa366 2222
718db961 2223 r = service_arm_timer(s, s->restart_usec);
a8bb2e65 2224 if (r < 0)
2edfa366 2225 goto fail;
feae8adb
DW
2226
2227 return;
2edfa366
LP
2228 }
2229
48bb5876
DW
2230 /* Any units that are bound to this service must also be
2231 * restarted. We use JOB_RESTART (instead of the more obvious
2232 * JOB_START) here so that those dependency jobs will be added
2233 * as well. */
2234 r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
2235 if (r < 0)
034c6ed7
LP
2236 goto fail;
2237
a8bb2e65
LP
2238 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
2239 * it will be canceled as part of the service_stop() call that
2240 * is executed as part of JOB_RESTART. */
2241
66870f90
ZJS
2242 log_debug_unit(UNIT(s)->id,
2243 "%s scheduled restart job.", UNIT(s)->id);
034c6ed7
LP
2244 return;
2245
2246fail:
66870f90
ZJS
2247 log_warning_unit(UNIT(s)->id,
2248 "%s failed to schedule restart job: %s",
718db961 2249 UNIT(s)->id, bus_error_message(&error, -r));
f42806df 2250 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
2251}
2252
2253static void service_enter_reload(Service *s) {
2254 int r;
2255
2256 assert(s);
2257
5e94833f
LP
2258 service_unwatch_control_pid(s);
2259
117dcc57
ZJS
2260 s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2261 if (s->control_command) {
867b3b7d
LP
2262 s->control_command_id = SERVICE_EXEC_RELOAD;
2263
ecedd90f
LP
2264 r = service_spawn(s,
2265 s->control_command,
2266 true,
2267 false,
2268 !s->permissions_start_only,
2269 !s->root_directory_start_only,
2270 false,
2271 false,
2272 true,
2273 &s->control_pid);
2274 if (r < 0)
034c6ed7
LP
2275 goto fail;
2276
80876c20
LP
2277 service_set_state(s, SERVICE_RELOAD);
2278 } else
f42806df 2279 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2280
2281 return;
2282
2283fail:
66870f90
ZJS
2284 log_warning_unit(UNIT(s)->id,
2285 "%s failed to run 'reload' task: %s",
2286 UNIT(s)->id, strerror(-r));
f42806df
LP
2287 s->reload_result = SERVICE_FAILURE_RESOURCES;
2288 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2289}
2290
f42806df 2291static void service_run_next_control(Service *s) {
034c6ed7
LP
2292 int r;
2293
2294 assert(s);
2295 assert(s->control_command);
2296 assert(s->control_command->command_next);
2297
34e9ba66 2298 assert(s->control_command_id != SERVICE_EXEC_START);
034c6ed7 2299
34e9ba66 2300 s->control_command = s->control_command->command_next;
5e94833f
LP
2301 service_unwatch_control_pid(s);
2302
ecedd90f
LP
2303 r = service_spawn(s,
2304 s->control_command,
2305 true,
2306 false,
2307 !s->permissions_start_only,
2308 !s->root_directory_start_only,
2309 s->control_command_id == SERVICE_EXEC_START_PRE ||
2310 s->control_command_id == SERVICE_EXEC_STOP_POST,
2311 false,
2312 true,
2313 &s->control_pid);
2314 if (r < 0)
034c6ed7
LP
2315 goto fail;
2316
2317 return;
2318
2319fail:
66870f90
ZJS
2320 log_warning_unit(UNIT(s)->id,
2321 "%s failed to run next control task: %s",
2322 UNIT(s)->id, strerror(-r));
034c6ed7 2323
80876c20 2324 if (s->state == SERVICE_START_PRE)
f42806df 2325 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
80876c20 2326 else if (s->state == SERVICE_STOP)
f42806df 2327 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7 2328 else if (s->state == SERVICE_STOP_POST)
f42806df 2329 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
e2f3b44c 2330 else if (s->state == SERVICE_RELOAD) {
f42806df
LP
2331 s->reload_result = SERVICE_FAILURE_RESOURCES;
2332 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c 2333 } else
f42806df 2334 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
5cb5a6ff
LP
2335}
2336
f42806df 2337static void service_run_next_main(Service *s) {
34e9ba66
LP
2338 pid_t pid;
2339 int r;
2340
2341 assert(s);
867b3b7d
LP
2342 assert(s->main_command);
2343 assert(s->main_command->command_next);
2344 assert(s->type == SERVICE_ONESHOT);
34e9ba66 2345
867b3b7d 2346 s->main_command = s->main_command->command_next;
34e9ba66
LP
2347 service_unwatch_main_pid(s);
2348
ecedd90f
LP
2349 r = service_spawn(s,
2350 s->main_command,
98709151 2351 true,
ecedd90f
LP
2352 true,
2353 true,
2354 true,
2355 true,
2356 s->notify_access != NOTIFY_NONE,
2357 false,
2358 &pid);
2359 if (r < 0)
34e9ba66
LP
2360 goto fail;
2361
2362 service_set_main_pid(s, pid);
2363
2364 return;
2365
2366fail:
66870f90
ZJS
2367 log_warning_unit(UNIT(s)->id,
2368 "%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
f42806df 2369 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
34e9ba66
LP
2370}
2371
4b939747
MO
2372static int service_start_limit_test(Service *s) {
2373 assert(s);
2374
2375 if (ratelimit_test(&s->start_limit))
2376 return 0;
2377
2378 switch (s->start_limit_action) {
2379
2380 case SERVICE_START_LIMIT_NONE:
66870f90
ZJS
2381 log_warning_unit(UNIT(s)->id,
2382 "%s start request repeated too quickly, refusing to start.",
2383 UNIT(s)->id);
4b939747
MO
2384 break;
2385
2386 case SERVICE_START_LIMIT_REBOOT: {
718db961 2387 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
4b939747
MO
2388 int r;
2389
66870f90
ZJS
2390 log_warning_unit(UNIT(s)->id,
2391 "%s start request repeated too quickly, rebooting.", UNIT(s)->id);
4b939747 2392
117dcc57
ZJS
2393 r = manager_add_job_by_name(UNIT(s)->manager, JOB_START,
2394 SPECIAL_REBOOT_TARGET, JOB_REPLACE,
2395 true, &error, NULL);
718db961 2396 if (r < 0)
66870f90 2397 log_error_unit(UNIT(s)->id,
718db961 2398 "Failed to reboot: %s.", bus_error_message(&error, r));
4b939747
MO
2399
2400 break;
2401 }
2402
2403 case SERVICE_START_LIMIT_REBOOT_FORCE:
66870f90
ZJS
2404 log_warning_unit(UNIT(s)->id,
2405 "%s start request repeated too quickly, forcibly rebooting.", UNIT(s)->id);
4b939747
MO
2406 UNIT(s)->manager->exit_code = MANAGER_REBOOT;
2407 break;
2408
2409 case SERVICE_START_LIMIT_REBOOT_IMMEDIATE:
66870f90
ZJS
2410 log_warning_unit(UNIT(s)->id,
2411 "%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id);
0049f05a 2412 sync();
4b939747
MO
2413 reboot(RB_AUTOBOOT);
2414 break;
2415
2416 default:
66870f90
ZJS
2417 log_error_unit(UNIT(s)->id,
2418 "start limit action=%i", s->start_limit_action);
4b939747
MO
2419 assert_not_reached("Unknown StartLimitAction.");
2420 }
2421
2422 return -ECANCELED;
2423}
2424
87f0e418
LP
2425static int service_start(Unit *u) {
2426 Service *s = SERVICE(u);
4b939747 2427 int r;
5cb5a6ff
LP
2428
2429 assert(s);
2430
034c6ed7
LP
2431 /* We cannot fulfill this request right now, try again later
2432 * please! */
2433 if (s->state == SERVICE_STOP ||
2434 s->state == SERVICE_STOP_SIGTERM ||
2435 s->state == SERVICE_STOP_SIGKILL ||
2436 s->state == SERVICE_STOP_POST ||
2437 s->state == SERVICE_FINAL_SIGTERM ||
2438 s->state == SERVICE_FINAL_SIGKILL)
5cb5a6ff
LP
2439 return -EAGAIN;
2440
034c6ed7
LP
2441 /* Already on it! */
2442 if (s->state == SERVICE_START_PRE ||
2443 s->state == SERVICE_START ||
2444 s->state == SERVICE_START_POST)
2445 return 0;
2446
2e9d6c12 2447 /* A service that will be restarted must be stopped first to
7f2cddae 2448 * trigger BindsTo and/or OnFailure dependencies. If a user
2e9d6c12 2449 * does not want to wait for the holdoff time to elapse, the
d4943dc7
LP
2450 * service should be manually restarted, not started. We
2451 * simply return EAGAIN here, so that any start jobs stay
2452 * queued, and assume that the auto restart timer will
2453 * eventually trigger the restart. */
2454 if (s->state == SERVICE_AUTO_RESTART)
a8bb2e65 2455 return -EAGAIN;
2e9d6c12
DW
2456
2457 assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
5cb5a6ff 2458
1e2e8133 2459 /* Make sure we don't enter a busy loop of some kind. */
4b939747 2460 r = service_start_limit_test(s);
c2f34808 2461 if (r < 0) {
8d1b002a 2462 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
4b939747 2463 return r;
c2f34808 2464 }
1e2e8133 2465
f42806df
LP
2466 s->result = SERVICE_SUCCESS;
2467 s->reload_result = SERVICE_SUCCESS;
034c6ed7 2468 s->main_pid_known = false;
6dfa5494 2469 s->main_pid_alien = false;
47342320 2470 s->forbid_restart = false;
034c6ed7
LP
2471
2472 service_enter_start_pre(s);
2473 return 0;
5cb5a6ff
LP
2474}
2475
87f0e418
LP
2476static int service_stop(Unit *u) {
2477 Service *s = SERVICE(u);
5cb5a6ff
LP
2478
2479 assert(s);
2480
f0c7b229 2481 /* Don't create restart jobs from here. */
47342320 2482 s->forbid_restart = true;
034c6ed7 2483
e537352b
LP
2484 /* Already on it */
2485 if (s->state == SERVICE_STOP ||
2486 s->state == SERVICE_STOP_SIGTERM ||
2487 s->state == SERVICE_STOP_SIGKILL ||
2488 s->state == SERVICE_STOP_POST ||
2489 s->state == SERVICE_FINAL_SIGTERM ||
2490 s->state == SERVICE_FINAL_SIGKILL)
2491 return 0;
2492
f0c7b229 2493 /* A restart will be scheduled or is in progress. */
034c6ed7 2494 if (s->state == SERVICE_AUTO_RESTART) {
0c7f15b3 2495 service_set_state(s, SERVICE_DEAD);
034c6ed7
LP
2496 return 0;
2497 }
2498
3f6c78dc
LP
2499 /* If there's already something running we go directly into
2500 * kill mode. */
2501 if (s->state == SERVICE_START_PRE ||
2502 s->state == SERVICE_START ||
2503 s->state == SERVICE_START_POST ||
2504 s->state == SERVICE_RELOAD) {
f42806df 2505 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
3f6c78dc
LP
2506 return 0;
2507 }
5cb5a6ff 2508
3f6c78dc
LP
2509 assert(s->state == SERVICE_RUNNING ||
2510 s->state == SERVICE_EXITED);
3a762661 2511
f42806df 2512 service_enter_stop(s, SERVICE_SUCCESS);
5cb5a6ff
LP
2513 return 0;
2514}
2515
87f0e418
LP
2516static int service_reload(Unit *u) {
2517 Service *s = SERVICE(u);
034c6ed7
LP
2518
2519 assert(s);
2520
80876c20 2521 assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
034c6ed7
LP
2522
2523 service_enter_reload(s);
5cb5a6ff
LP
2524 return 0;
2525}
2526
44a6b1b6 2527_pure_ static bool service_can_reload(Unit *u) {
87f0e418 2528 Service *s = SERVICE(u);
034c6ed7
LP
2529
2530 assert(s);
2531
2532 return !!s->exec_command[SERVICE_EXEC_RELOAD];
2533}
2534
a16e1123
LP
2535static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2536 Service *s = SERVICE(u);
2537
2538 assert(u);
2539 assert(f);
2540 assert(fds);
2541
2542 unit_serialize_item(u, f, "state", service_state_to_string(s->state));
f42806df
LP
2543 unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2544 unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
a16e1123
LP
2545
2546 if (s->control_pid > 0)
ccd06097
ZJS
2547 unit_serialize_item_format(u, f, "control-pid", PID_FMT,
2548 s->control_pid);
a16e1123 2549
5925dd3c 2550 if (s->main_pid_known && s->main_pid > 0)
ccd06097 2551 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
a16e1123
LP
2552
2553 unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
2554
3a2776bc
LP
2555 if (s->status_text)
2556 unit_serialize_item(u, f, "status-text", s->status_text);
2557
cfc4eb4c
LP
2558 /* FIXME: There's a minor uncleanliness here: if there are
2559 * multiple commands attached here, we will start from the
2560 * first one again */
a16e1123 2561 if (s->control_command_id >= 0)
117dcc57
ZJS
2562 unit_serialize_item(u, f, "control-command",
2563 service_exec_command_to_string(s->control_command_id));
a16e1123
LP
2564
2565 if (s->socket_fd >= 0) {
2566 int copy;
2567
2568 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
2569 return copy;
2570
2571 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2572 }
2573
ecdbca40 2574 if (s->main_exec_status.pid > 0) {
ccd06097
ZJS
2575 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT,
2576 s->main_exec_status.pid);
117dcc57
ZJS
2577 dual_timestamp_serialize(f, "main-exec-status-start",
2578 &s->main_exec_status.start_timestamp);
2579 dual_timestamp_serialize(f, "main-exec-status-exit",
2580 &s->main_exec_status.exit_timestamp);
ecdbca40 2581
799fd0fd 2582 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
117dcc57
ZJS
2583 unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
2584 s->main_exec_status.code);
2585 unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
2586 s->main_exec_status.status);
ecdbca40
LP
2587 }
2588 }
a6927d7f 2589 if (dual_timestamp_is_set(&s->watchdog_timestamp))
842129f5 2590 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
ecdbca40 2591
6aca9a58 2592 if (s->forbid_restart)
8d1a2802 2593 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
6aca9a58 2594
a16e1123
LP
2595 return 0;
2596}
2597
2598static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2599 Service *s = SERVICE(u);
a16e1123
LP
2600
2601 assert(u);
2602 assert(key);
2603 assert(value);
2604 assert(fds);
2605
2606 if (streq(key, "state")) {
2607 ServiceState state;
2608
117dcc57
ZJS
2609 state = service_state_from_string(value);
2610 if (state < 0)
66870f90 2611 log_debug_unit(u->id, "Failed to parse state value %s", value);
a16e1123
LP
2612 else
2613 s->deserialized_state = state;
f42806df
LP
2614 } else if (streq(key, "result")) {
2615 ServiceResult f;
2616
2617 f = service_result_from_string(value);
2618 if (f < 0)
66870f90 2619 log_debug_unit(u->id, "Failed to parse result value %s", value);
f42806df
LP
2620 else if (f != SERVICE_SUCCESS)
2621 s->result = f;
2622
2623 } else if (streq(key, "reload-result")) {
2624 ServiceResult f;
2625
2626 f = service_result_from_string(value);
2627 if (f < 0)
66870f90 2628 log_debug_unit(u->id, "Failed to parse reload result value %s", value);
f42806df
LP
2629 else if (f != SERVICE_SUCCESS)
2630 s->reload_result = f;
a16e1123 2631
a16e1123 2632 } else if (streq(key, "control-pid")) {
5925dd3c 2633 pid_t pid;
a16e1123 2634
e364ad06 2635 if (parse_pid(value, &pid) < 0)
66870f90 2636 log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
a16e1123 2637 else
e55224ca 2638 s->control_pid = pid;
a16e1123 2639 } else if (streq(key, "main-pid")) {
5925dd3c 2640 pid_t pid;
a16e1123 2641
e364ad06 2642 if (parse_pid(value, &pid) < 0)
66870f90 2643 log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
7400b9d2
LP
2644 else {
2645 service_set_main_pid(s, pid);
2646 unit_watch_pid(UNIT(s), pid);
2647 }
a16e1123
LP
2648 } else if (streq(key, "main-pid-known")) {
2649 int b;
2650
117dcc57
ZJS
2651 b = parse_boolean(value);
2652 if (b < 0)
66870f90 2653 log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
a16e1123
LP
2654 else
2655 s->main_pid_known = b;
3a2776bc
LP
2656 } else if (streq(key, "status-text")) {
2657 char *t;
2658
117dcc57
ZJS
2659 t = strdup(value);
2660 if (!t)
2661 log_oom();
2662 else {
3a2776bc
LP
2663 free(s->status_text);
2664 s->status_text = t;
2665 }
2666
a16e1123
LP
2667 } else if (streq(key, "control-command")) {
2668 ServiceExecCommand id;
2669
117dcc57
ZJS
2670 id = service_exec_command_from_string(value);
2671 if (id < 0)
66870f90 2672 log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
a16e1123
LP
2673 else {
2674 s->control_command_id = id;
2675 s->control_command = s->exec_command[id];
2676 }
2677 } else if (streq(key, "socket-fd")) {
2678 int fd;
2679
2680 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
66870f90 2681 log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
a16e1123
LP
2682 else {
2683
2684 if (s->socket_fd >= 0)
2685 close_nointr_nofail(s->socket_fd);
2686 s->socket_fd = fdset_remove(fds, fd);
2687 }
ecdbca40
LP
2688 } else if (streq(key, "main-exec-status-pid")) {
2689 pid_t pid;
2690
e364ad06 2691 if (parse_pid(value, &pid) < 0)
66870f90 2692 log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
ecdbca40
LP
2693 else
2694 s->main_exec_status.pid = pid;
2695 } else if (streq(key, "main-exec-status-code")) {
2696 int i;
2697
e364ad06 2698 if (safe_atoi(value, &i) < 0)
66870f90 2699 log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
ecdbca40
LP
2700 else
2701 s->main_exec_status.code = i;
2702 } else if (streq(key, "main-exec-status-status")) {
2703 int i;
2704
e364ad06 2705 if (safe_atoi(value, &i) < 0)
66870f90 2706 log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
ecdbca40
LP
2707 else
2708 s->main_exec_status.status = i;
799fd0fd
LP
2709 } else if (streq(key, "main-exec-status-start"))
2710 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2711 else if (streq(key, "main-exec-status-exit"))
2712 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
a6927d7f
MO
2713 else if (streq(key, "watchdog-timestamp"))
2714 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
613b411c 2715 else if (streq(key, "forbid-restart")) {
6aca9a58
SE
2716 int b;
2717
2718 b = parse_boolean(value);
2719 if (b < 0)
8d1a2802 2720 log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
6aca9a58
SE
2721 else
2722 s->forbid_restart = b;
c17ec25e 2723 } else
66870f90 2724 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
a16e1123
LP
2725
2726 return 0;
2727}
2728
44a6b1b6 2729_pure_ static UnitActiveState service_active_state(Unit *u) {
e056b01d
LP
2730 const UnitActiveState *table;
2731
87f0e418 2732 assert(u);
5cb5a6ff 2733
e056b01d
LP
2734 table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2735
2736 return table[SERVICE(u)->state];
034c6ed7
LP
2737}
2738
10a94420
LP
2739static const char *service_sub_state_to_string(Unit *u) {
2740 assert(u);
2741
2742 return service_state_to_string(SERVICE(u)->state);
2743}
2744
701cc384
LP
2745static bool service_check_gc(Unit *u) {
2746 Service *s = SERVICE(u);
2747
2748 assert(s);
2749
6d55002a
LP
2750 /* Never clean up services that still have a process around,
2751 * even if the service is formally dead. */
2752 if (cgroup_good(s) > 0 ||
2753 main_pid_good(s) > 0 ||
2754 control_pid_good(s) > 0)
2755 return true;
2756
2757#ifdef HAVE_SYSV_COMPAT
1b64d026 2758 if (s->is_sysv)
6d55002a 2759 return true;
07459bb6 2760#endif
701cc384 2761
6d55002a
LP
2762 return false;
2763}
2764
44a6b1b6 2765_pure_ static bool service_check_snapshot(Unit *u) {
701cc384
LP
2766 Service *s = SERVICE(u);
2767
2768 assert(s);
2769
99f37ad8 2770 return (s->socket_fd < 0);
701cc384
LP
2771}
2772
3a111838
MS
2773static int service_retry_pid_file(Service *s) {
2774 int r;
2775
2776 assert(s->pid_file);
2777 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2778
2779 r = service_load_pid_file(s, false);
2780 if (r < 0)
2781 return r;
2782
2783 service_unwatch_pid_file(s);
2784
f42806df 2785 service_enter_running(s, SERVICE_SUCCESS);
3a111838
MS
2786 return 0;
2787}
2788
2789static int service_watch_pid_file(Service *s) {
2790 int r;
2791
66870f90
ZJS
2792 log_debug_unit(UNIT(s)->id,
2793 "Setting watch for %s's PID file %s",
2794 UNIT(s)->id, s->pid_file_pathspec->path);
718db961 2795 r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
3a111838
MS
2796 if (r < 0)
2797 goto fail;
2798
2799 /* the pidfile might have appeared just before we set the watch */
bc41f93e
ZJS
2800 log_debug_unit(UNIT(s)->id,
2801 "Trying to read %s's PID file %s in case it changed",
2802 UNIT(s)->id, s->pid_file_pathspec->path);
3a111838
MS
2803 service_retry_pid_file(s);
2804
2805 return 0;
2806fail:
66870f90
ZJS
2807 log_error_unit(UNIT(s)->id,
2808 "Failed to set a watch for %s's PID file %s: %s",
2809 UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
3a111838
MS
2810 service_unwatch_pid_file(s);
2811 return r;
2812}
2813
2814static int service_demand_pid_file(Service *s) {
2815 PathSpec *ps;
2816
2817 assert(s->pid_file);
2818 assert(!s->pid_file_pathspec);
2819
2820 ps = new0(PathSpec, 1);
2821 if (!ps)
2822 return -ENOMEM;
2823
718db961 2824 ps->unit = UNIT(s);
3a111838
MS
2825 ps->path = strdup(s->pid_file);
2826 if (!ps->path) {
2827 free(ps);
2828 return -ENOMEM;
2829 }
2830
2831 path_kill_slashes(ps->path);
2832
2833 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2834 * keep their PID file open all the time. */
2835 ps->type = PATH_MODIFIED;
2836 ps->inotify_fd = -1;
2837
2838 s->pid_file_pathspec = ps;
2839
2840 return service_watch_pid_file(s);
2841}
2842
718db961 2843static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
e14c2802
LP
2844 PathSpec *p = userdata;
2845 Service *s;
2846
2847 assert(p);
2848
2849 s = SERVICE(p->unit);
3a111838
MS
2850
2851 assert(s);
2852 assert(fd >= 0);
2853 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2854 assert(s->pid_file_pathspec);
57020a3a 2855 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
3a111838 2856
718db961 2857 log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
3a111838 2858
e14c2802 2859 if (path_spec_fd_event(p, events) < 0)
3a111838
MS
2860 goto fail;
2861
2862 if (service_retry_pid_file(s) == 0)
718db961 2863 return 0;
3a111838
MS
2864
2865 if (service_watch_pid_file(s) < 0)
2866 goto fail;
2867
718db961
LP
2868 return 0;
2869
3a111838
MS
2870fail:
2871 service_unwatch_pid_file(s);
f42806df 2872 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
718db961 2873 return 0;
3a111838
MS
2874}
2875
87f0e418
LP
2876static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2877 Service *s = SERVICE(u);
f42806df 2878 ServiceResult f;
5cb5a6ff
LP
2879
2880 assert(s);
034c6ed7
LP
2881 assert(pid >= 0);
2882
96342de6
LN
2883 if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2884 is_clean_exit_lsb(code, status, &s->success_status))
f42806df
LP
2885 f = SERVICE_SUCCESS;
2886 else if (code == CLD_EXITED)
2887 f = SERVICE_FAILURE_EXIT_CODE;
2888 else if (code == CLD_KILLED)
2889 f = SERVICE_FAILURE_SIGNAL;
2890 else if (code == CLD_DUMPED)
2891 f = SERVICE_FAILURE_CORE_DUMP;
d06dacd0 2892 else
cfc4eb4c 2893 assert_not_reached("Unknown code");
034c6ed7
LP
2894
2895 if (s->main_pid == pid) {
db01f8b3
MS
2896 /* Forking services may occasionally move to a new PID.
2897 * As long as they update the PID file before exiting the old
2898 * PID, they're fine. */
5375410b 2899 if (service_load_pid_file(s, false) == 0)
db01f8b3 2900 return;
034c6ed7 2901
034c6ed7 2902 s->main_pid = 0;
6ea832a2 2903 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
034c6ed7 2904
867b3b7d 2905 if (s->main_command) {
fbeefb45
LP
2906 /* If this is not a forking service than the
2907 * main process got started and hence we copy
2908 * the exit status so that it is recorded both
2909 * as main and as control process exit
2910 * status */
2911
867b3b7d 2912 s->main_command->exec_status = s->main_exec_status;
b708e7ce 2913
867b3b7d 2914 if (s->main_command->ignore)
f42806df 2915 f = SERVICE_SUCCESS;
fbeefb45
LP
2916 } else if (s->exec_command[SERVICE_EXEC_START]) {
2917
2918 /* If this is a forked process, then we should
2919 * ignore the return value if this was
2920 * configured for the starter process */
2921
2922 if (s->exec_command[SERVICE_EXEC_START]->ignore)
2923 f = SERVICE_SUCCESS;
034c6ed7
LP
2924 }
2925
bbc9006e
MT
2926 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2927 u->id,
23635a85
ZJS
2928 "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
2929 u->id, sigchld_code_to_string(code), status,
2930 strna(code == CLD_EXITED
2931 ? exit_status_to_string(status, EXIT_STATUS_FULL)
2932 : signal_to_string(status)),
23635a85
ZJS
2933 "EXIT_CODE=%s", sigchld_code_to_string(code),
2934 "EXIT_STATUS=%i", status,
2935 NULL);
f42806df
LP
2936
2937 if (f != SERVICE_SUCCESS)
2938 s->result = f;
034c6ed7 2939
867b3b7d
LP
2940 if (s->main_command &&
2941 s->main_command->command_next &&
f42806df 2942 f == SERVICE_SUCCESS) {
034c6ed7 2943
34e9ba66
LP
2944 /* There is another command to *
2945 * execute, so let's do that. */
034c6ed7 2946
66870f90
ZJS
2947 log_debug_unit(u->id,
2948 "%s running next main command for state %s",
2949 u->id, service_state_to_string(s->state));
f42806df 2950 service_run_next_main(s);
034c6ed7 2951
34e9ba66
LP
2952 } else {
2953
2954 /* The service exited, so the service is officially
2955 * gone. */
867b3b7d 2956 s->main_command = NULL;
34e9ba66
LP
2957
2958 switch (s->state) {
2959
2960 case SERVICE_START_POST:
2961 case SERVICE_RELOAD:
2962 case SERVICE_STOP:
2963 /* Need to wait until the operation is
2964 * done */
c4653a4d 2965 break;
7d55e835 2966
34e9ba66
LP
2967 case SERVICE_START:
2968 if (s->type == SERVICE_ONESHOT) {
2969 /* This was our main goal, so let's go on */
f42806df 2970 if (f == SERVICE_SUCCESS)
34e9ba66
LP
2971 service_enter_start_post(s);
2972 else
f42806df 2973 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
34e9ba66 2974 break;
34e9ba66 2975 }
034c6ed7 2976
bfba3256
LP
2977 /* Fall through */
2978
34e9ba66 2979 case SERVICE_RUNNING:
f42806df 2980 service_enter_running(s, f);
34e9ba66 2981 break;
034c6ed7 2982
34e9ba66
LP
2983 case SERVICE_STOP_SIGTERM:
2984 case SERVICE_STOP_SIGKILL:
5cb5a6ff 2985
34e9ba66 2986 if (!control_pid_good(s))
f42806df 2987 service_enter_stop_post(s, f);
5cb5a6ff 2988
34e9ba66
LP
2989 /* If there is still a control process, wait for that first */
2990 break;
2991
bf108e55
LP
2992 case SERVICE_STOP_POST:
2993 case SERVICE_FINAL_SIGTERM:
2994 case SERVICE_FINAL_SIGKILL:
2995
2996 if (!control_pid_good(s))
2997 service_enter_dead(s, f, true);
2998 break;
2999
34e9ba66
LP
3000 default:
3001 assert_not_reached("Uh, main process died at wrong time.");
3002 }
034c6ed7 3003 }
5cb5a6ff 3004
034c6ed7 3005 } else if (s->control_pid == pid) {
34e9ba66
LP
3006 s->control_pid = 0;
3007
b708e7ce 3008 if (s->control_command) {
117dcc57
ZJS
3009 exec_status_exit(&s->control_command->exec_status,
3010 &s->exec_context, pid, code, status);
a16e1123 3011
b708e7ce 3012 if (s->control_command->ignore)
f42806df 3013 f = SERVICE_SUCCESS;
b708e7ce
LP
3014 }
3015
66870f90
ZJS
3016 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
3017 "%s: control process exited, code=%s status=%i",
3018 u->id, sigchld_code_to_string(code), status);
f42806df
LP
3019
3020 if (f != SERVICE_SUCCESS)
3021 s->result = f;
034c6ed7 3022
88f3e0c9
LP
3023 /* Immediately get rid of the cgroup, so that the
3024 * kernel doesn't delay the cgroup empty messages for
3025 * the service cgroup any longer than necessary */
4ad49000 3026 service_kill_control_processes(s);
88f3e0c9 3027
34e9ba66
LP
3028 if (s->control_command &&
3029 s->control_command->command_next &&
f42806df 3030 f == SERVICE_SUCCESS) {
034c6ed7
LP
3031
3032 /* There is another command to *
3033 * execute, so let's do that. */
3034
66870f90
ZJS
3035 log_debug_unit(u->id,
3036 "%s running next control command for state %s",
3037 u->id, service_state_to_string(s->state));
f42806df 3038 service_run_next_control(s);
034c6ed7 3039
80876c20 3040 } else {
034c6ed7
LP
3041 /* No further commands for this step, so let's
3042 * figure out what to do next */
3043
a16e1123
LP
3044 s->control_command = NULL;
3045 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3046
66870f90
ZJS
3047 log_debug_unit(u->id,
3048 "%s got final SIGCHLD for state %s",
3049 u->id, service_state_to_string(s->state));
bd982a8b 3050
034c6ed7
LP
3051 switch (s->state) {
3052
3053 case SERVICE_START_PRE:
f42806df 3054 if (f == SERVICE_SUCCESS)
034c6ed7
LP
3055 service_enter_start(s);
3056 else
f42806df 3057 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
034c6ed7
LP
3058 break;
3059
3060 case SERVICE_START:
bfba3256
LP
3061 if (s->type != SERVICE_FORKING)
3062 /* Maybe spurious event due to a reload that changed the type? */
3063 break;
034c6ed7 3064
f42806df
LP
3065 if (f != SERVICE_SUCCESS) {
3066 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3a111838
MS
3067 break;
3068 }
034c6ed7 3069
3a111838 3070 if (s->pid_file) {
f42806df
LP
3071 bool has_start_post;
3072 int r;
3073
3a111838
MS
3074 /* Let's try to load the pid file here if we can.
3075 * The PID file might actually be created by a START_POST
3076 * script. In that case don't worry if the loading fails. */
f42806df
LP
3077
3078 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3079 r = service_load_pid_file(s, !has_start_post);
3a111838
MS
3080 if (!has_start_post && r < 0) {
3081 r = service_demand_pid_file(s);
3082 if (r < 0 || !cgroup_good(s))
f42806df 3083 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3a111838
MS
3084 break;
3085 }
034c6ed7 3086 } else
3a111838 3087 service_search_main_pid(s);
034c6ed7 3088
3a111838 3089 service_enter_start_post(s);
034c6ed7
LP
3090 break;
3091
3092 case SERVICE_START_POST:
f42806df
LP
3093 if (f != SERVICE_SUCCESS) {
3094 service_enter_stop(s, f);
2096e009 3095 break;
034c6ed7
LP
3096 }
3097
2096e009 3098 if (s->pid_file) {
f42806df
LP
3099 int r;
3100
3101 r = service_load_pid_file(s, true);
2096e009
MS
3102 if (r < 0) {
3103 r = service_demand_pid_file(s);
3104 if (r < 0 || !cgroup_good(s))
f42806df 3105 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2096e009
MS
3106 break;
3107 }
3108 } else
3109 service_search_main_pid(s);
3110
f42806df 3111 service_enter_running(s, SERVICE_SUCCESS);
3185a36b 3112 break;
034c6ed7
LP
3113
3114 case SERVICE_RELOAD:
f42806df 3115 if (f == SERVICE_SUCCESS) {
5375410b 3116 service_load_pid_file(s, true);
3185a36b
LP
3117 service_search_main_pid(s);
3118 }
3119
f42806df
LP
3120 s->reload_result = f;
3121 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
3122 break;
3123
3124 case SERVICE_STOP:
f42806df 3125 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
3126 break;
3127
3128 case SERVICE_STOP_SIGTERM:
3129 case SERVICE_STOP_SIGKILL:
3130 if (main_pid_good(s) <= 0)
f42806df 3131 service_enter_stop_post(s, f);
034c6ed7
LP
3132
3133 /* If there is still a service
3134 * process around, wait until
3135 * that one quit, too */
3136 break;
3137
3138 case SERVICE_STOP_POST:
3139 case SERVICE_FINAL_SIGTERM:
3140 case SERVICE_FINAL_SIGKILL:
bf108e55
LP
3141 if (main_pid_good(s) <= 0)
3142 service_enter_dead(s, f, true);
034c6ed7
LP
3143 break;
3144
3145 default:
3146 assert_not_reached("Uh, control process died at wrong time.");
3147 }
3148 }
8c47c732 3149 }
c4e2ceae
LP
3150
3151 /* Notify clients about changed exit status */
3152 unit_add_to_dbus_queue(u);
034c6ed7
LP
3153}
3154
718db961
LP
3155static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
3156 Service *s = SERVICE(userdata);
034c6ed7
LP
3157
3158 assert(s);
718db961 3159 assert(source == s->timer_event_source);
034c6ed7
LP
3160
3161 switch (s->state) {
3162
3163 case SERVICE_START_PRE:
3164 case SERVICE_START:
718db961 3165 log_warning_unit(UNIT(s)->id,
41aef6fc
ZJS
3166 "%s %s operation timed out. Terminating.",
3167 UNIT(s)->id,
3168 s->state == SERVICE_START ? "start" : "start-pre");
f42806df 3169 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
80876c20
LP
3170 break;
3171
034c6ed7 3172 case SERVICE_START_POST:
718db961 3173 log_warning_unit(UNIT(s)->id,
41aef6fc 3174 "%s start-post operation timed out. Stopping.", UNIT(s)->id);
f42806df 3175 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3176 break;
3177
e2f3b44c 3178 case SERVICE_RELOAD:
718db961 3179 log_warning_unit(UNIT(s)->id,
41aef6fc 3180 "%s reload operation timed out. Stopping.", UNIT(s)->id);
f42806df
LP
3181 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3182 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c
LP
3183 break;
3184
034c6ed7 3185 case SERVICE_STOP:
718db961
LP
3186 log_warning_unit(UNIT(s)->id,
3187 "%s stopping timed out. Terminating.", UNIT(s)->id);
f42806df 3188 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3189 break;
3190
3191 case SERVICE_STOP_SIGTERM:
4819ff03 3192 if (s->kill_context.send_sigkill) {
718db961 3193 log_warning_unit(UNIT(s)->id,
41aef6fc 3194 "%s stop-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 3195 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3196 } else {
718db961 3197 log_warning_unit(UNIT(s)->id,
41aef6fc 3198 "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s)->id);
f42806df 3199 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
ba035df2
LP
3200 }
3201
034c6ed7
LP
3202 break;
3203
3204 case SERVICE_STOP_SIGKILL:
35b8ca3a 3205 /* Uh, we sent a SIGKILL and it is still not gone?
034c6ed7
LP
3206 * Must be something we cannot kill, so let's just be
3207 * weirded out and continue */
3208
718db961
LP
3209 log_warning_unit(UNIT(s)->id,
3210 "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
f42806df 3211 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3212 break;
3213
3214 case SERVICE_STOP_POST:
718db961 3215 log_warning_unit(UNIT(s)->id,
41aef6fc 3216 "%s stop-post timed out. Terminating.", UNIT(s)->id);
f42806df 3217 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3218 break;
3219
3220 case SERVICE_FINAL_SIGTERM:
4819ff03 3221 if (s->kill_context.send_sigkill) {
718db961 3222 log_warning_unit(UNIT(s)->id,
41aef6fc 3223 "%s stop-final-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 3224 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3225 } else {
718db961 3226 log_warning_unit(UNIT(s)->id,
41aef6fc 3227 "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.",
718db961 3228 UNIT(s)->id);
f42806df 3229 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
ba035df2
LP
3230 }
3231
034c6ed7
LP
3232 break;
3233
3234 case SERVICE_FINAL_SIGKILL:
718db961 3235 log_warning_unit(UNIT(s)->id,
41aef6fc 3236 "%s still around after final SIGKILL. Entering failed mode.", UNIT(s)->id);
f42806df 3237 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
034c6ed7
LP
3238 break;
3239
3240 case SERVICE_AUTO_RESTART:
718db961
LP
3241 log_info_unit(UNIT(s)->id,
3242 "%s holdoff time over, scheduling restart.", UNIT(s)->id);
034c6ed7
LP
3243 service_enter_restart(s);
3244 break;
3245
3246 default:
3247 assert_not_reached("Timeout at wrong time.");
3248 }
718db961
LP
3249
3250 return 0;
3251}
3252
3253static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
3254 Service *s = SERVICE(userdata);
3255
3256 assert(s);
3257 assert(source == s->watchdog_event_source);
3258
842129f5
LP
3259 log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id);
3260 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
3261
718db961 3262 return 0;
5cb5a6ff
LP
3263}
3264
4ad49000 3265static void service_notify_cgroup_empty_event(Unit *u) {
8e274523
LP
3266 Service *s = SERVICE(u);
3267
3268 assert(u);
3269
6c12b52e 3270 log_debug_unit(u->id, "%s: cgroup is empty", u->id);
8e274523
LP
3271
3272 switch (s->state) {
3273
3274 /* Waiting for SIGCHLD is usually more interesting,
3275 * because it includes return codes/signals. Which is
3276 * why we ignore the cgroup events for most cases,
3277 * except when we don't know pid which to expect the
3278 * SIGCHLD for. */
3279
3a111838
MS
3280 case SERVICE_START:
3281 case SERVICE_START_POST:
3282 /* If we were hoping for the daemon to write its PID file,
3283 * we can give up now. */
3284 if (s->pid_file_pathspec) {
66870f90
ZJS
3285 log_warning_unit(u->id,
3286 "%s never wrote its PID file. Failing.", UNIT(s)->id);
3a111838
MS
3287 service_unwatch_pid_file(s);
3288 if (s->state == SERVICE_START)
f42806df 3289 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3a111838 3290 else
f42806df 3291 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
3a111838
MS
3292 }
3293 break;
3294
8e274523 3295 case SERVICE_RUNNING:
f42806df
LP
3296 /* service_enter_running() will figure out what to do */
3297 service_enter_running(s, SERVICE_SUCCESS);
8e274523
LP
3298 break;
3299
28708d8a
LP
3300 case SERVICE_STOP_SIGTERM:
3301 case SERVICE_STOP_SIGKILL:
6dfa5494 3302
28708d8a 3303 if (main_pid_good(s) <= 0 && !control_pid_good(s))
f42806df 3304 service_enter_stop_post(s, SERVICE_SUCCESS);
28708d8a
LP
3305
3306 break;
3307
bf108e55 3308 case SERVICE_STOP_POST:
7f97f0fe
LP
3309 case SERVICE_FINAL_SIGTERM:
3310 case SERVICE_FINAL_SIGKILL:
3311 if (main_pid_good(s) <= 0 && !control_pid_good(s))
e201a038 3312 service_enter_dead(s, SERVICE_SUCCESS, true);
7f97f0fe
LP
3313
3314 break;
3315
8e274523
LP
3316 default:
3317 ;
3318 }
3319}
3320
c952c6ec 3321static void service_notify_message(Unit *u, pid_t pid, char **tags) {
8c47c732
LP
3322 Service *s = SERVICE(u);
3323 const char *e;
30b5275a 3324 bool notify_dbus = false;
8c47c732
LP
3325
3326 assert(u);
3327
ccd06097
ZJS
3328 log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT" (%s...)",
3329 u->id, pid, tags && *tags ? tags[0] : "(empty)");
da13d4d2 3330
c952c6ec 3331 if (s->notify_access == NOTIFY_NONE) {
66870f90 3332 log_warning_unit(u->id,
ccd06097
ZJS
3333 "%s: Got notification message from PID "PID_FMT", but reception is disabled.",
3334 u->id, pid);
c952c6ec
LP
3335 return;
3336 }
3337
da13d4d2 3338 if (s->notify_access == NOTIFY_MAIN && s->main_pid != 0 && pid != s->main_pid) {
66870f90 3339 log_warning_unit(u->id,
ccd06097
ZJS
3340 "%s: Got notification message from PID "PID_FMT", but reception only permitted for PID "PID_FMT,
3341 u->id, pid, s->main_pid);
c952c6ec
LP
3342 return;
3343 }
3344
8c47c732
LP
3345 /* Interpret MAINPID= */
3346 if ((e = strv_find_prefix(tags, "MAINPID=")) &&
3347 (s->state == SERVICE_START ||
3348 s->state == SERVICE_START_POST ||
3349 s->state == SERVICE_RUNNING ||
3350 s->state == SERVICE_RELOAD)) {
8c47c732 3351
5925dd3c 3352 if (parse_pid(e + 8, &pid) < 0)
30b5275a 3353 log_warning_unit(u->id, "Failed to parse notification message %s", e);
8c47c732 3354 else {
30b5275a 3355 log_debug_unit(u->id, "%s: got %s", u->id, e);
5925dd3c 3356 service_set_main_pid(s, pid);
7400b9d2 3357 unit_watch_pid(UNIT(s), pid);
30b5275a 3358 notify_dbus = true;
8c47c732
LP
3359 }
3360 }
3361
3362 /* Interpret READY= */
30b5275a
LP
3363 if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START && strv_find(tags, "READY=1")) {
3364 log_debug_unit(u->id, "%s: got READY=1", u->id);
8c47c732 3365 service_enter_start_post(s);
30b5275a 3366 notify_dbus = true;
8c47c732
LP
3367 }
3368
3369 /* Interpret STATUS= */
7f110ff9
LP
3370 e = strv_find_prefix(tags, "STATUS=");
3371 if (e) {
8c47c732
LP
3372 char *t;
3373
3a2776bc 3374 if (e[7]) {
7f110ff9 3375 if (!utf8_is_valid(e+7)) {
30b5275a 3376 log_warning_unit(u->id, "Status message in notification is not UTF-8 clean.");
7f110ff9
LP
3377 return;
3378 }
3379
30b5275a
LP
3380 log_debug_unit(u->id, "%s: got %s", u->id, e);
3381
7f110ff9
LP
3382 t = strdup(e+7);
3383 if (!t) {
30b5275a 3384 log_oom();
3a2776bc
LP
3385 return;
3386 }
3387
30b5275a
LP
3388 } else
3389 t = NULL;
8c47c732 3390
30b5275a 3391 if (!streq_ptr(s->status_text, t)) {
3a2776bc
LP
3392 free(s->status_text);
3393 s->status_text = t;
30b5275a
LP
3394 notify_dbus = true;
3395 } else
3396 free(t);
8c47c732 3397 }
842129f5 3398
30b5275a 3399 /* Interpet WATCHDOG= */
a6927d7f 3400 if (strv_find(tags, "WATCHDOG=1")) {
842129f5
LP
3401 log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
3402 service_reset_watchdog(s);
a6927d7f 3403 }
c4e2ceae
LP
3404
3405 /* Notify clients about changed status or main pid */
30b5275a
LP
3406 if (notify_dbus)
3407 unit_add_to_dbus_queue(u);
8c47c732
LP
3408}
3409
07459bb6 3410#ifdef HAVE_SYSV_COMPAT
de3910a3 3411
2c4104f0 3412static int service_enumerate(Manager *m) {
2c4104f0
LP
3413 char **p;
3414 unsigned i;
7fd1b19b
HH
3415 _cleanup_closedir_ DIR *d = NULL;
3416 _cleanup_free_ char *path = NULL, *fpath = NULL, *name = NULL;
b92bea5d 3417 Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
7fd1b19b 3418 _cleanup_set_free_ Set *shutdown_services = NULL;
c68364b7
LP
3419 Unit *service;
3420 Iterator j;
2c4104f0
LP
3421 int r;
3422
3423 assert(m);
3424
67445f4e 3425 if (m->running_as != SYSTEMD_SYSTEM)
b1bc08e5
LP
3426 return 0;
3427
84e3543e 3428 STRV_FOREACH(p, m->lookup_paths.sysvrcnd_path)
09cd1ab1 3429 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
2c4104f0
LP
3430 struct dirent *de;
3431
3432 free(path);
b7def684 3433 path = strjoin(*p, "/", rcnd_table[i].path, NULL);
70132bd0 3434 if (!path) {
2c4104f0
LP
3435 r = -ENOMEM;
3436 goto finish;
3437 }
3438
3439 if (d)
3440 closedir(d);
3441
117dcc57
ZJS
3442 d = opendir(path);
3443 if (!d) {
2c4104f0 3444 if (errno != ENOENT)
f5f6d0e2 3445 log_warning("opendir(%s) failed: %m", path);
2c4104f0
LP
3446
3447 continue;
3448 }
3449
3450 while ((de = readdir(d))) {
db06e3b6 3451 int a, b;
2c4104f0
LP
3452
3453 if (ignore_file(de->d_name))
3454 continue;
3455
3456 if (de->d_name[0] != 'S' && de->d_name[0] != 'K')
3457 continue;
3458
3459 if (strlen(de->d_name) < 4)
3460 continue;
3461
db06e3b6
LP
3462 a = undecchar(de->d_name[1]);
3463 b = undecchar(de->d_name[2]);
3464
3465 if (a < 0 || b < 0)
3466 continue;
3467
2c4104f0 3468 free(fpath);
b7def684 3469 fpath = strjoin(path, "/", de->d_name, NULL);
8ea913b2 3470 if (!fpath) {
2c4104f0
LP
3471 r = -ENOMEM;
3472 goto finish;
3473 }
3474
3475 if (access(fpath, X_OK) < 0) {
3476
3477 if (errno != ENOENT)
f5f6d0e2 3478 log_warning("access() failed on %s: %m", fpath);
2c4104f0
LP
3479
3480 continue;
3481 }
3482
3483 free(name);
117dcc57
ZJS
3484 name = sysv_translate_name(de->d_name + 3);
3485 if (!name) {
3486 r = log_oom();
2c4104f0
LP
3487 goto finish;
3488 }
3489
66870f90
ZJS
3490 r = manager_load_unit_prepare(m, name, NULL, NULL, &service);
3491 if (r < 0) {
fbe9f3a9
LP
3492 log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
3493 continue;
3494 }
2c4104f0 3495
c68364b7
LP
3496 if (de->d_name[0] == 'S') {
3497
3cdebc21 3498 if (rcnd_table[i].type == RUNLEVEL_UP) {
ea87ca5a
LP
3499 SERVICE(service)->sysv_start_priority_from_rcnd =
3500 MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
db06e3b6 3501
c68364b7 3502 SERVICE(service)->sysv_enabled = true;
f73d93a4 3503 }
db06e3b6 3504
117dcc57
ZJS
3505 r = set_ensure_allocated(&runlevel_services[i],
3506 trivial_hash_func, trivial_compare_func);
3507 if (r < 0)
c68364b7 3508 goto finish;
2c4104f0 3509
117dcc57
ZJS
3510 r = set_put(runlevel_services[i], service);
3511 if (r < 0)
2c4104f0 3512 goto finish;
23a177ef 3513
fc5df99e 3514 } else if (de->d_name[0] == 'K' &&
3cdebc21 3515 (rcnd_table[i].type == RUNLEVEL_DOWN)) {
6542952f 3516
117dcc57
ZJS
3517 r = set_ensure_allocated(&shutdown_services,
3518 trivial_hash_func, trivial_compare_func);
3519 if (r < 0)
c68364b7
LP
3520 goto finish;
3521
117dcc57
ZJS
3522 r = set_put(shutdown_services, service);
3523 if (r < 0)
2c4104f0
LP
3524 goto finish;
3525 }
3526 }
3527 }
3528
c68364b7
LP
3529 /* Now we loaded all stubs and are aware of the lowest
3530 start-up priority for all services, not let's actually load
3531 the services, this will also tell us which services are
3532 actually native now */
3533 manager_dispatch_load_queue(m);
3534
3535 /* If this is a native service, rely on native ways to pull in
3536 * a service, don't pull it in via sysv rcN.d links. */
3537 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++)
3538 SET_FOREACH(service, runlevel_services[i], j) {
3539 service = unit_follow_merge(service);
3540
ac155bb8 3541 if (service->fragment_path)
c68364b7
LP
3542 continue;
3543
117dcc57
ZJS
3544 r = unit_add_two_dependencies_by_name_inverse(
3545 service, UNIT_AFTER, UNIT_WANTS,
3546 rcnd_table[i].target, NULL, true);
3547 if (r < 0)
c68364b7
LP
3548 goto finish;
3549 }
3550
3551 /* We honour K links only for halt/reboot. For the normal
3552 * runlevels we assume the stop jobs will be implicitly added
35b8ca3a 3553 * by the core logic. Also, we don't really distinguish here
c68364b7 3554 * between the runlevels 0 and 6 and just add them to the
3cdebc21 3555 * special shutdown target. */
c68364b7
LP
3556 SET_FOREACH(service, shutdown_services, j) {
3557 service = unit_follow_merge(service);
3558
ac155bb8 3559 if (service->fragment_path)
c68364b7
LP
3560 continue;
3561
117dcc57
ZJS
3562 r = unit_add_two_dependencies_by_name(
3563 service, UNIT_BEFORE, UNIT_CONFLICTS,
3564 SPECIAL_SHUTDOWN_TARGET, NULL, true);
3565 if (r < 0)
c68364b7
LP
3566 goto finish;
3567 }
3568
2c4104f0
LP
3569 r = 0;
3570
3571finish:
fbe9f3a9 3572
c68364b7
LP
3573 for (i = 0; i < ELEMENTSOF(rcnd_table); i++)
3574 set_free(runlevel_services[i]);
2c4104f0
LP
3575
3576 return r;
3577}
07459bb6 3578#endif
2c4104f0 3579
05e343b7
LP
3580static void service_bus_name_owner_change(
3581 Unit *u,
3582 const char *name,
3583 const char *old_owner,
3584 const char *new_owner) {
3585
3586 Service *s = SERVICE(u);
718db961 3587 int r;
05e343b7
LP
3588
3589 assert(s);
3590 assert(name);
3591
3592 assert(streq(s->bus_name, name));
3593 assert(old_owner || new_owner);
3594
3595 if (old_owner && new_owner)
66870f90
ZJS
3596 log_debug_unit(u->id,
3597 "%s's D-Bus name %s changed owner from %s to %s",
3598 u->id, name, old_owner, new_owner);
05e343b7 3599 else if (old_owner)
66870f90
ZJS
3600 log_debug_unit(u->id,
3601 "%s's D-Bus name %s no longer registered by %s",
3602 u->id, name, old_owner);
05e343b7 3603 else
66870f90
ZJS
3604 log_debug_unit(u->id,
3605 "%s's D-Bus name %s now registered by %s",
3606 u->id, name, new_owner);
05e343b7
LP
3607
3608 s->bus_name_good = !!new_owner;
3609
3610 if (s->type == SERVICE_DBUS) {
3611
3612 /* service_enter_running() will figure out what to
3613 * do */
3614 if (s->state == SERVICE_RUNNING)
f42806df 3615 service_enter_running(s, SERVICE_SUCCESS);
05e343b7
LP
3616 else if (s->state == SERVICE_START && new_owner)
3617 service_enter_start_post(s);
3618
3619 } else if (new_owner &&
3620 s->main_pid <= 0 &&
3621 (s->state == SERVICE_START ||
3622 s->state == SERVICE_START_POST ||
3623 s->state == SERVICE_RUNNING ||
3624 s->state == SERVICE_RELOAD)) {
3625
5b12334d 3626 _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
718db961 3627 pid_t pid;
05e343b7 3628
718db961 3629 /* Try to acquire PID from bus service */
05e343b7 3630
49b832c5 3631 r = sd_bus_get_owner(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
5b12334d
LP
3632 if (r >= 0)
3633 r = sd_bus_creds_get_pid(creds, &pid);
718db961
LP
3634 if (r >= 0) {
3635 log_debug_unit(u->id, "%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
05e343b7 3636
718db961
LP
3637 service_set_main_pid(s, pid);
3638 unit_watch_pid(UNIT(s), pid);
3639 }
7400b9d2 3640 }
05e343b7
LP
3641}
3642
6cf6bbc2 3643int service_set_socket_fd(Service *s, int fd, Socket *sock) {
79a98c60
LP
3644 _cleanup_free_ char *peer = NULL;
3645 int r;
57020a3a 3646
4f2d528d
LP
3647 assert(s);
3648 assert(fd >= 0);
3649
3650 /* This is called by the socket code when instantiating a new
3651 * service for a stream socket and the socket needs to be
3652 * configured. */
3653
1124fe6f 3654 if (UNIT(s)->load_state != UNIT_LOADED)
4f2d528d
LP
3655 return -EINVAL;
3656
3657 if (s->socket_fd >= 0)
3658 return -EBUSY;
3659
3660 if (s->state != SERVICE_DEAD)
3661 return -EAGAIN;
3662
79a98c60
LP
3663 if (getpeername_pretty(fd, &peer) >= 0) {
3664
3665 if (UNIT(s)->description) {
3666 _cleanup_free_ char *a;
3667
3668 a = strjoin(UNIT(s)->description, " (", peer, ")", NULL);
3669 if (!a)
3670 return -ENOMEM;
3671
3672 r = unit_set_description(UNIT(s), a);
3673 } else
3674 r = unit_set_description(UNIT(s), peer);
3675
3676 if (r < 0)
3677 return r;
3678 }
3679
4f2d528d 3680 s->socket_fd = fd;
6cf6bbc2 3681
57020a3a
LP
3682 unit_ref_set(&s->accept_socket, UNIT(sock));
3683
3684 return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
4f2d528d
LP
3685}
3686
fdf20a31 3687static void service_reset_failed(Unit *u) {
5632e374
LP
3688 Service *s = SERVICE(u);
3689
3690 assert(s);
3691
fdf20a31 3692 if (s->state == SERVICE_FAILED)
5632e374
LP
3693 service_set_state(s, SERVICE_DEAD);
3694
f42806df
LP
3695 s->result = SERVICE_SUCCESS;
3696 s->reload_result = SERVICE_SUCCESS;
451b34cc
LP
3697
3698 RATELIMIT_RESET(s->start_limit);
5632e374
LP
3699}
3700
718db961 3701static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
8a0867d6 3702 Service *s = SERVICE(u);
41efeaec 3703
814cc562 3704 return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
8a0867d6
LP
3705}
3706
94f04347
LP
3707static const char* const service_state_table[_SERVICE_STATE_MAX] = {
3708 [SERVICE_DEAD] = "dead",
3709 [SERVICE_START_PRE] = "start-pre",
3710 [SERVICE_START] = "start",
3711 [SERVICE_START_POST] = "start-post",
3712 [SERVICE_RUNNING] = "running",
80876c20 3713 [SERVICE_EXITED] = "exited",
94f04347
LP
3714 [SERVICE_RELOAD] = "reload",
3715 [SERVICE_STOP] = "stop",
3716 [SERVICE_STOP_SIGTERM] = "stop-sigterm",
3717 [SERVICE_STOP_SIGKILL] = "stop-sigkill",
3718 [SERVICE_STOP_POST] = "stop-post",
3719 [SERVICE_FINAL_SIGTERM] = "final-sigterm",
3720 [SERVICE_FINAL_SIGKILL] = "final-sigkill",
fdf20a31 3721 [SERVICE_FAILED] = "failed",
94f04347
LP
3722 [SERVICE_AUTO_RESTART] = "auto-restart",
3723};
3724
3725DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
3726
3727static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
525ee6f4
LP
3728 [SERVICE_RESTART_NO] = "no",
3729 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
50caaedb 3730 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
dc99a976 3731 [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
50caaedb
LP
3732 [SERVICE_RESTART_ON_ABORT] = "on-abort",
3733 [SERVICE_RESTART_ALWAYS] = "always"
94f04347
LP
3734};
3735
3736DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3737
3738static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
94f04347 3739 [SERVICE_SIMPLE] = "simple",
0d624a78 3740 [SERVICE_FORKING] = "forking",
34e9ba66 3741 [SERVICE_ONESHOT] = "oneshot",
8c47c732 3742 [SERVICE_DBUS] = "dbus",
f2b68789
LP
3743 [SERVICE_NOTIFY] = "notify",
3744 [SERVICE_IDLE] = "idle"
94f04347
LP
3745};
3746
3747DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3748
e537352b 3749static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
94f04347
LP
3750 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
3751 [SERVICE_EXEC_START] = "ExecStart",
3752 [SERVICE_EXEC_START_POST] = "ExecStartPost",
3753 [SERVICE_EXEC_RELOAD] = "ExecReload",
3754 [SERVICE_EXEC_STOP] = "ExecStop",
3755 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3756};
3757
3758DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3759
c952c6ec
LP
3760static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
3761 [NOTIFY_NONE] = "none",
3762 [NOTIFY_MAIN] = "main",
3763 [NOTIFY_ALL] = "all"
3764};
3765
3766DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
3767
f42806df
LP
3768static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3769 [SERVICE_SUCCESS] = "success",
3770 [SERVICE_FAILURE_RESOURCES] = "resources",
3771 [SERVICE_FAILURE_TIMEOUT] = "timeout",
3772 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3773 [SERVICE_FAILURE_SIGNAL] = "signal",
bb242b7b 3774 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
8d1b002a
LP
3775 [SERVICE_FAILURE_WATCHDOG] = "watchdog",
3776 [SERVICE_FAILURE_START_LIMIT] = "start-limit"
f42806df
LP
3777};
3778
3779DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3780
4b939747
MO
3781static const char* const start_limit_action_table[_SERVICE_START_LIMIT_MAX] = {
3782 [SERVICE_START_LIMIT_NONE] = "none",
3783 [SERVICE_START_LIMIT_REBOOT] = "reboot",
3784 [SERVICE_START_LIMIT_REBOOT_FORCE] = "reboot-force",
3785 [SERVICE_START_LIMIT_REBOOT_IMMEDIATE] = "reboot-immediate"
3786};
3787DEFINE_STRING_TABLE_LOOKUP(start_limit_action, StartLimitAction);
3788
87f0e418 3789const UnitVTable service_vtable = {
7d17cfbc 3790 .object_size = sizeof(Service),
718db961
LP
3791 .exec_context_offset = offsetof(Service, exec_context),
3792 .cgroup_context_offset = offsetof(Service, cgroup_context),
3793 .kill_context_offset = offsetof(Service, kill_context),
613b411c 3794 .exec_runtime_offset = offsetof(Service, exec_runtime),
3ef63c31 3795
f975e971
LP
3796 .sections =
3797 "Unit\0"
3798 "Service\0"
3799 "Install\0",
4ad49000 3800 .private_section = "Service",
71645aca 3801
034c6ed7
LP
3802 .init = service_init,
3803 .done = service_done,
a16e1123
LP
3804 .load = service_load,
3805
3806 .coldplug = service_coldplug,
034c6ed7 3807
5cb5a6ff
LP
3808 .dump = service_dump,
3809
3810 .start = service_start,
3811 .stop = service_stop,
3812 .reload = service_reload,
3813
034c6ed7
LP
3814 .can_reload = service_can_reload,
3815
8a0867d6
LP
3816 .kill = service_kill,
3817
a16e1123
LP
3818 .serialize = service_serialize,
3819 .deserialize_item = service_deserialize_item,
3820
5cb5a6ff 3821 .active_state = service_active_state,
10a94420 3822 .sub_state_to_string = service_sub_state_to_string,
5cb5a6ff 3823
701cc384
LP
3824 .check_gc = service_check_gc,
3825 .check_snapshot = service_check_snapshot,
3826
034c6ed7 3827 .sigchld_event = service_sigchld_event,
2c4104f0 3828
fdf20a31 3829 .reset_failed = service_reset_failed,
5632e374 3830
4ad49000 3831 .notify_cgroup_empty = service_notify_cgroup_empty_event,
8c47c732 3832 .notify_message = service_notify_message,
8e274523 3833
05e343b7 3834 .bus_name_owner_change = service_bus_name_owner_change,
05e343b7 3835
c4e2ceae 3836 .bus_interface = "org.freedesktop.systemd1.Service",
718db961 3837 .bus_vtable = bus_service_vtable,
74c964d3
LP
3838 .bus_set_property = bus_service_set_property,
3839 .bus_commit_properties = bus_service_commit_properties,
4139c1b2 3840
07459bb6 3841#ifdef HAVE_SYSV_COMPAT
c6918296 3842 .enumerate = service_enumerate,
07459bb6 3843#endif
718db961
LP
3844
3845 .can_transient = true,
3846
c6918296
MS
3847 .status_message_formats = {
3848 .starting_stopping = {
3849 [0] = "Starting %s...",
3850 [1] = "Stopping %s...",
3851 },
3852 .finished_start_job = {
3853 [JOB_DONE] = "Started %s.",
3854 [JOB_FAILED] = "Failed to start %s.",
3855 [JOB_DEPENDENCY] = "Dependency failed for %s.",
3856 [JOB_TIMEOUT] = "Timed out starting %s.",
3857 },
3858 .finished_stop_job = {
3859 [JOB_DONE] = "Stopped %s.",
3860 [JOB_FAILED] = "Stopped (with error) %s.",
3861 [JOB_TIMEOUT] = "Timed out stopping %s.",
3862 },
3863 },
5cb5a6ff 3864};