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