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