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