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