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