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