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