]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/service.c
TODO: add dbus runtime depedency
[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 2918static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
e14c2802
LP
2919 PathSpec *p = userdata;
2920 Service *s;
2921
2922 assert(p);
2923
2924 s = SERVICE(p->unit);
3a111838
MS
2925
2926 assert(s);
2927 assert(fd >= 0);
2928 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2929 assert(s->pid_file_pathspec);
57020a3a 2930 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
3a111838 2931
718db961 2932 log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
3a111838 2933
e14c2802 2934 if (path_spec_fd_event(p, events) < 0)
3a111838
MS
2935 goto fail;
2936
2937 if (service_retry_pid_file(s) == 0)
718db961 2938 return 0;
3a111838
MS
2939
2940 if (service_watch_pid_file(s) < 0)
2941 goto fail;
2942
718db961
LP
2943 return 0;
2944
3a111838
MS
2945fail:
2946 service_unwatch_pid_file(s);
f42806df 2947 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
718db961 2948 return 0;
3a111838
MS
2949}
2950
87f0e418
LP
2951static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2952 Service *s = SERVICE(u);
f42806df 2953 ServiceResult f;
5cb5a6ff
LP
2954
2955 assert(s);
034c6ed7
LP
2956 assert(pid >= 0);
2957
96342de6
LN
2958 if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2959 is_clean_exit_lsb(code, status, &s->success_status))
f42806df
LP
2960 f = SERVICE_SUCCESS;
2961 else if (code == CLD_EXITED)
2962 f = SERVICE_FAILURE_EXIT_CODE;
2963 else if (code == CLD_KILLED)
2964 f = SERVICE_FAILURE_SIGNAL;
2965 else if (code == CLD_DUMPED)
2966 f = SERVICE_FAILURE_CORE_DUMP;
d06dacd0 2967 else
cfc4eb4c 2968 assert_not_reached("Unknown code");
034c6ed7
LP
2969
2970 if (s->main_pid == pid) {
db01f8b3
MS
2971 /* Forking services may occasionally move to a new PID.
2972 * As long as they update the PID file before exiting the old
2973 * PID, they're fine. */
5375410b 2974 if (service_load_pid_file(s, false) == 0)
db01f8b3 2975 return;
034c6ed7 2976
034c6ed7 2977 s->main_pid = 0;
6ea832a2 2978 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
034c6ed7 2979
867b3b7d 2980 if (s->main_command) {
fbeefb45
LP
2981 /* If this is not a forking service than the
2982 * main process got started and hence we copy
2983 * the exit status so that it is recorded both
2984 * as main and as control process exit
2985 * status */
2986
867b3b7d 2987 s->main_command->exec_status = s->main_exec_status;
b708e7ce 2988
867b3b7d 2989 if (s->main_command->ignore)
f42806df 2990 f = SERVICE_SUCCESS;
fbeefb45
LP
2991 } else if (s->exec_command[SERVICE_EXEC_START]) {
2992
2993 /* If this is a forked process, then we should
2994 * ignore the return value if this was
2995 * configured for the starter process */
2996
2997 if (s->exec_command[SERVICE_EXEC_START]->ignore)
2998 f = SERVICE_SUCCESS;
034c6ed7
LP
2999 }
3000
bbc9006e
MT
3001 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
3002 u->id,
23635a85
ZJS
3003 "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
3004 u->id, sigchld_code_to_string(code), status,
3005 strna(code == CLD_EXITED
3006 ? exit_status_to_string(status, EXIT_STATUS_FULL)
3007 : signal_to_string(status)),
23635a85
ZJS
3008 "EXIT_CODE=%s", sigchld_code_to_string(code),
3009 "EXIT_STATUS=%i", status,
3010 NULL);
f42806df
LP
3011
3012 if (f != SERVICE_SUCCESS)
3013 s->result = f;
034c6ed7 3014
867b3b7d
LP
3015 if (s->main_command &&
3016 s->main_command->command_next &&
f42806df 3017 f == SERVICE_SUCCESS) {
034c6ed7 3018
34e9ba66
LP
3019 /* There is another command to *
3020 * execute, so let's do that. */
034c6ed7 3021
66870f90
ZJS
3022 log_debug_unit(u->id,
3023 "%s running next main command for state %s",
3024 u->id, service_state_to_string(s->state));
f42806df 3025 service_run_next_main(s);
034c6ed7 3026
34e9ba66
LP
3027 } else {
3028
3029 /* The service exited, so the service is officially
3030 * gone. */
867b3b7d 3031 s->main_command = NULL;
34e9ba66
LP
3032
3033 switch (s->state) {
3034
3035 case SERVICE_START_POST:
3036 case SERVICE_RELOAD:
3037 case SERVICE_STOP:
3038 /* Need to wait until the operation is
3039 * done */
c4653a4d 3040 break;
7d55e835 3041
34e9ba66
LP
3042 case SERVICE_START:
3043 if (s->type == SERVICE_ONESHOT) {
3044 /* This was our main goal, so let's go on */
f42806df 3045 if (f == SERVICE_SUCCESS)
34e9ba66
LP
3046 service_enter_start_post(s);
3047 else
f42806df 3048 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
34e9ba66 3049 break;
34e9ba66 3050 }
034c6ed7 3051
bfba3256
LP
3052 /* Fall through */
3053
34e9ba66 3054 case SERVICE_RUNNING:
f42806df 3055 service_enter_running(s, f);
34e9ba66 3056 break;
034c6ed7 3057
34e9ba66
LP
3058 case SERVICE_STOP_SIGTERM:
3059 case SERVICE_STOP_SIGKILL:
5cb5a6ff 3060
34e9ba66 3061 if (!control_pid_good(s))
f42806df 3062 service_enter_stop_post(s, f);
5cb5a6ff 3063
34e9ba66
LP
3064 /* If there is still a control process, wait for that first */
3065 break;
3066
3067 default:
3068 assert_not_reached("Uh, main process died at wrong time.");
3069 }
034c6ed7 3070 }
5cb5a6ff 3071
034c6ed7 3072 } else if (s->control_pid == pid) {
34e9ba66
LP
3073 s->control_pid = 0;
3074
b708e7ce 3075 if (s->control_command) {
117dcc57
ZJS
3076 exec_status_exit(&s->control_command->exec_status,
3077 &s->exec_context, pid, code, status);
a16e1123 3078
b708e7ce 3079 if (s->control_command->ignore)
f42806df 3080 f = SERVICE_SUCCESS;
b708e7ce
LP
3081 }
3082
66870f90
ZJS
3083 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
3084 "%s: control process exited, code=%s status=%i",
3085 u->id, sigchld_code_to_string(code), status);
f42806df
LP
3086
3087 if (f != SERVICE_SUCCESS)
3088 s->result = f;
034c6ed7 3089
88f3e0c9
LP
3090 /* Immediately get rid of the cgroup, so that the
3091 * kernel doesn't delay the cgroup empty messages for
3092 * the service cgroup any longer than necessary */
4ad49000 3093 service_kill_control_processes(s);
88f3e0c9 3094
34e9ba66
LP
3095 if (s->control_command &&
3096 s->control_command->command_next &&
f42806df 3097 f == SERVICE_SUCCESS) {
034c6ed7
LP
3098
3099 /* There is another command to *
3100 * execute, so let's do that. */
3101
66870f90
ZJS
3102 log_debug_unit(u->id,
3103 "%s running next control command for state %s",
3104 u->id, service_state_to_string(s->state));
f42806df 3105 service_run_next_control(s);
034c6ed7 3106
80876c20 3107 } else {
034c6ed7
LP
3108 /* No further commands for this step, so let's
3109 * figure out what to do next */
3110
a16e1123
LP
3111 s->control_command = NULL;
3112 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3113
66870f90
ZJS
3114 log_debug_unit(u->id,
3115 "%s got final SIGCHLD for state %s",
3116 u->id, service_state_to_string(s->state));
bd982a8b 3117
034c6ed7
LP
3118 switch (s->state) {
3119
3120 case SERVICE_START_PRE:
f42806df 3121 if (f == SERVICE_SUCCESS)
034c6ed7
LP
3122 service_enter_start(s);
3123 else
f42806df 3124 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
034c6ed7
LP
3125 break;
3126
3127 case SERVICE_START:
bfba3256
LP
3128 if (s->type != SERVICE_FORKING)
3129 /* Maybe spurious event due to a reload that changed the type? */
3130 break;
034c6ed7 3131
f42806df
LP
3132 if (f != SERVICE_SUCCESS) {
3133 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3a111838
MS
3134 break;
3135 }
034c6ed7 3136
3a111838 3137 if (s->pid_file) {
f42806df
LP
3138 bool has_start_post;
3139 int r;
3140
3a111838
MS
3141 /* Let's try to load the pid file here if we can.
3142 * The PID file might actually be created by a START_POST
3143 * script. In that case don't worry if the loading fails. */
f42806df
LP
3144
3145 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3146 r = service_load_pid_file(s, !has_start_post);
3a111838
MS
3147 if (!has_start_post && r < 0) {
3148 r = service_demand_pid_file(s);
3149 if (r < 0 || !cgroup_good(s))
f42806df 3150 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3a111838
MS
3151 break;
3152 }
034c6ed7 3153 } else
3a111838 3154 service_search_main_pid(s);
034c6ed7 3155
3a111838 3156 service_enter_start_post(s);
034c6ed7
LP
3157 break;
3158
3159 case SERVICE_START_POST:
f42806df
LP
3160 if (f != SERVICE_SUCCESS) {
3161 service_enter_stop(s, f);
2096e009 3162 break;
034c6ed7
LP
3163 }
3164
2096e009 3165 if (s->pid_file) {
f42806df
LP
3166 int r;
3167
3168 r = service_load_pid_file(s, true);
2096e009
MS
3169 if (r < 0) {
3170 r = service_demand_pid_file(s);
3171 if (r < 0 || !cgroup_good(s))
f42806df 3172 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2096e009
MS
3173 break;
3174 }
3175 } else
3176 service_search_main_pid(s);
3177
f42806df 3178 service_enter_running(s, SERVICE_SUCCESS);
3185a36b 3179 break;
034c6ed7
LP
3180
3181 case SERVICE_RELOAD:
f42806df 3182 if (f == SERVICE_SUCCESS) {
5375410b 3183 service_load_pid_file(s, true);
3185a36b
LP
3184 service_search_main_pid(s);
3185 }
3186
f42806df
LP
3187 s->reload_result = f;
3188 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
3189 break;
3190
3191 case SERVICE_STOP:
f42806df 3192 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
3193 break;
3194
3195 case SERVICE_STOP_SIGTERM:
3196 case SERVICE_STOP_SIGKILL:
3197 if (main_pid_good(s) <= 0)
f42806df 3198 service_enter_stop_post(s, f);
034c6ed7
LP
3199
3200 /* If there is still a service
3201 * process around, wait until
3202 * that one quit, too */
3203 break;
3204
3205 case SERVICE_STOP_POST:
3206 case SERVICE_FINAL_SIGTERM:
3207 case SERVICE_FINAL_SIGKILL:
f42806df 3208 service_enter_dead(s, f, true);
034c6ed7
LP
3209 break;
3210
3211 default:
3212 assert_not_reached("Uh, control process died at wrong time.");
3213 }
3214 }
8c47c732 3215 }
c4e2ceae
LP
3216
3217 /* Notify clients about changed exit status */
3218 unit_add_to_dbus_queue(u);
034c6ed7
LP
3219}
3220
718db961
LP
3221static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
3222 Service *s = SERVICE(userdata);
034c6ed7
LP
3223
3224 assert(s);
718db961 3225 assert(source == s->timer_event_source);
034c6ed7
LP
3226
3227 switch (s->state) {
3228
3229 case SERVICE_START_PRE:
3230 case SERVICE_START:
718db961
LP
3231 log_warning_unit(UNIT(s)->id,
3232 "%s operation timed out. Terminating.", UNIT(s)->id);
f42806df 3233 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
80876c20
LP
3234 break;
3235
034c6ed7 3236 case SERVICE_START_POST:
718db961
LP
3237 log_warning_unit(UNIT(s)->id,
3238 "%s operation timed out. Stopping.", UNIT(s)->id);
f42806df 3239 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3240 break;
3241
e2f3b44c 3242 case SERVICE_RELOAD:
718db961
LP
3243 log_warning_unit(UNIT(s)->id,
3244 "%s operation timed out. Stopping.", UNIT(s)->id);
f42806df
LP
3245 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3246 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c
LP
3247 break;
3248
034c6ed7 3249 case SERVICE_STOP:
718db961
LP
3250 log_warning_unit(UNIT(s)->id,
3251 "%s stopping timed out. Terminating.", UNIT(s)->id);
f42806df 3252 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3253 break;
3254
3255 case SERVICE_STOP_SIGTERM:
4819ff03 3256 if (s->kill_context.send_sigkill) {
718db961
LP
3257 log_warning_unit(UNIT(s)->id,
3258 "%s stopping timed out. Killing.", UNIT(s)->id);
f42806df 3259 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3260 } else {
718db961
LP
3261 log_warning_unit(UNIT(s)->id,
3262 "%s stopping timed out. Skipping SIGKILL.", UNIT(s)->id);
f42806df 3263 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
ba035df2
LP
3264 }
3265
034c6ed7
LP
3266 break;
3267
3268 case SERVICE_STOP_SIGKILL:
35b8ca3a 3269 /* Uh, we sent a SIGKILL and it is still not gone?
034c6ed7
LP
3270 * Must be something we cannot kill, so let's just be
3271 * weirded out and continue */
3272
718db961
LP
3273 log_warning_unit(UNIT(s)->id,
3274 "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
f42806df 3275 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3276 break;
3277
3278 case SERVICE_STOP_POST:
718db961
LP
3279 log_warning_unit(UNIT(s)->id,
3280 "%s stopping timed out (2). Terminating.", UNIT(s)->id);
f42806df 3281 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3282 break;
3283
3284 case SERVICE_FINAL_SIGTERM:
4819ff03 3285 if (s->kill_context.send_sigkill) {
718db961
LP
3286 log_warning_unit(UNIT(s)->id,
3287 "%s stopping timed out (2). Killing.", UNIT(s)->id);
f42806df 3288 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3289 } else {
718db961 3290 log_warning_unit(UNIT(s)->id,
66870f90 3291 "%s stopping timed out (2). Skipping SIGKILL. Entering failed mode.",
718db961 3292 UNIT(s)->id);
f42806df 3293 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
ba035df2
LP
3294 }
3295
034c6ed7
LP
3296 break;
3297
3298 case SERVICE_FINAL_SIGKILL:
718db961
LP
3299 log_warning_unit(UNIT(s)->id,
3300 "%s still around after SIGKILL (2). Entering failed mode.", UNIT(s)->id);
f42806df 3301 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
034c6ed7
LP
3302 break;
3303
3304 case SERVICE_AUTO_RESTART:
718db961
LP
3305 log_info_unit(UNIT(s)->id,
3306 "%s holdoff time over, scheduling restart.", UNIT(s)->id);
034c6ed7
LP
3307 service_enter_restart(s);
3308 break;
3309
3310 default:
3311 assert_not_reached("Timeout at wrong time.");
3312 }
718db961
LP
3313
3314 return 0;
3315}
3316
3317static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
3318 Service *s = SERVICE(userdata);
3319
3320 assert(s);
3321 assert(source == s->watchdog_event_source);
3322
3323 service_handle_watchdog(s);
3324 return 0;
5cb5a6ff
LP
3325}
3326
4ad49000 3327static void service_notify_cgroup_empty_event(Unit *u) {
8e274523
LP
3328 Service *s = SERVICE(u);
3329
3330 assert(u);
3331
6c12b52e 3332 log_debug_unit(u->id, "%s: cgroup is empty", u->id);
8e274523
LP
3333
3334 switch (s->state) {
3335
3336 /* Waiting for SIGCHLD is usually more interesting,
3337 * because it includes return codes/signals. Which is
3338 * why we ignore the cgroup events for most cases,
3339 * except when we don't know pid which to expect the
3340 * SIGCHLD for. */
3341
3a111838
MS
3342 case SERVICE_START:
3343 case SERVICE_START_POST:
3344 /* If we were hoping for the daemon to write its PID file,
3345 * we can give up now. */
3346 if (s->pid_file_pathspec) {
66870f90
ZJS
3347 log_warning_unit(u->id,
3348 "%s never wrote its PID file. Failing.", UNIT(s)->id);
3a111838
MS
3349 service_unwatch_pid_file(s);
3350 if (s->state == SERVICE_START)
f42806df 3351 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3a111838 3352 else
f42806df 3353 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
3a111838
MS
3354 }
3355 break;
3356
8e274523 3357 case SERVICE_RUNNING:
f42806df
LP
3358 /* service_enter_running() will figure out what to do */
3359 service_enter_running(s, SERVICE_SUCCESS);
8e274523
LP
3360 break;
3361
28708d8a
LP
3362 case SERVICE_STOP_SIGTERM:
3363 case SERVICE_STOP_SIGKILL:
6dfa5494 3364
28708d8a 3365 if (main_pid_good(s) <= 0 && !control_pid_good(s))
f42806df 3366 service_enter_stop_post(s, SERVICE_SUCCESS);
28708d8a
LP
3367
3368 break;
3369
7f97f0fe
LP
3370 case SERVICE_FINAL_SIGTERM:
3371 case SERVICE_FINAL_SIGKILL:
3372 if (main_pid_good(s) <= 0 && !control_pid_good(s))
e201a038 3373 service_enter_dead(s, SERVICE_SUCCESS, true);
7f97f0fe
LP
3374
3375 break;
3376
8e274523
LP
3377 default:
3378 ;
3379 }
3380}
3381
c952c6ec 3382static void service_notify_message(Unit *u, pid_t pid, char **tags) {
8c47c732
LP
3383 Service *s = SERVICE(u);
3384 const char *e;
3385
3386 assert(u);
3387
c952c6ec 3388 if (s->notify_access == NOTIFY_NONE) {
66870f90
ZJS
3389 log_warning_unit(u->id,
3390 "%s: Got notification message from PID %lu, but reception is disabled.",
3391 u->id, (unsigned long) pid);
c952c6ec
LP
3392 return;
3393 }
3394
3395 if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
66870f90
ZJS
3396 log_warning_unit(u->id,
3397 "%s: Got notification message from PID %lu, but reception only permitted for PID %lu",
3398 u->id, (unsigned long) pid, (unsigned long) s->main_pid);
c952c6ec
LP
3399 return;
3400 }
3401
66870f90
ZJS
3402 log_debug_unit(u->id,
3403 "%s: Got message", u->id);
8c47c732
LP
3404
3405 /* Interpret MAINPID= */
3406 if ((e = strv_find_prefix(tags, "MAINPID=")) &&
3407 (s->state == SERVICE_START ||
3408 s->state == SERVICE_START_POST ||
3409 s->state == SERVICE_RUNNING ||
3410 s->state == SERVICE_RELOAD)) {
8c47c732 3411
5925dd3c 3412 if (parse_pid(e + 8, &pid) < 0)
66870f90
ZJS
3413 log_warning_unit(u->id,
3414 "Failed to parse notification message %s", e);
8c47c732 3415 else {
66870f90
ZJS
3416 log_debug_unit(u->id,
3417 "%s: got %s", u->id, e);
5925dd3c 3418 service_set_main_pid(s, pid);
7400b9d2 3419 unit_watch_pid(UNIT(s), pid);
8c47c732
LP
3420 }
3421 }
3422
3423 /* Interpret READY= */
3424 if (s->type == SERVICE_NOTIFY &&
3425 s->state == SERVICE_START &&
3426 strv_find(tags, "READY=1")) {
66870f90
ZJS
3427 log_debug_unit(u->id,
3428 "%s: got READY=1", u->id);
8c47c732
LP
3429
3430 service_enter_start_post(s);
3431 }
3432
3433 /* Interpret STATUS= */
7f110ff9
LP
3434 e = strv_find_prefix(tags, "STATUS=");
3435 if (e) {
8c47c732
LP
3436 char *t;
3437
3a2776bc 3438 if (e[7]) {
7f110ff9
LP
3439
3440 if (!utf8_is_valid(e+7)) {
66870f90
ZJS
3441 log_warning_unit(u->id,
3442 "Status message in notification is not UTF-8 clean.");
7f110ff9
LP
3443 return;
3444 }
3445
3446 t = strdup(e+7);
3447 if (!t) {
66870f90
ZJS
3448 log_error_unit(u->id,
3449 "Failed to allocate string.");
3a2776bc
LP
3450 return;
3451 }
3452
66870f90
ZJS
3453 log_debug_unit(u->id,
3454 "%s: got %s", u->id, e);
8c47c732 3455
3a2776bc
LP
3456 free(s->status_text);
3457 s->status_text = t;
3458 } else {
3459 free(s->status_text);
3460 s->status_text = NULL;
3461 }
8c47c732 3462
8c47c732 3463 }
a6927d7f 3464 if (strv_find(tags, "WATCHDOG=1")) {
66870f90
ZJS
3465 log_debug_unit(u->id,
3466 "%s: got WATCHDOG=1", u->id);
90527fbb
MO
3467 if (dual_timestamp_is_set(&s->watchdog_timestamp))
3468 service_reset_watchdog(s);
a6927d7f 3469 }
c4e2ceae
LP
3470
3471 /* Notify clients about changed status or main pid */
3472 unit_add_to_dbus_queue(u);
8c47c732
LP
3473}
3474
07459bb6 3475#ifdef HAVE_SYSV_COMPAT
de3910a3 3476
2c4104f0 3477static int service_enumerate(Manager *m) {
2c4104f0
LP
3478 char **p;
3479 unsigned i;
7fd1b19b
HH
3480 _cleanup_closedir_ DIR *d = NULL;
3481 _cleanup_free_ char *path = NULL, *fpath = NULL, *name = NULL;
b92bea5d 3482 Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
7fd1b19b 3483 _cleanup_set_free_ Set *shutdown_services = NULL;
c68364b7
LP
3484 Unit *service;
3485 Iterator j;
2c4104f0
LP
3486 int r;
3487
3488 assert(m);
3489
67445f4e 3490 if (m->running_as != SYSTEMD_SYSTEM)
b1bc08e5
LP
3491 return 0;
3492
84e3543e 3493 STRV_FOREACH(p, m->lookup_paths.sysvrcnd_path)
09cd1ab1 3494 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
2c4104f0
LP
3495 struct dirent *de;
3496
3497 free(path);
b7def684 3498 path = strjoin(*p, "/", rcnd_table[i].path, NULL);
70132bd0 3499 if (!path) {
2c4104f0
LP
3500 r = -ENOMEM;
3501 goto finish;
3502 }
3503
3504 if (d)
3505 closedir(d);
3506
117dcc57
ZJS
3507 d = opendir(path);
3508 if (!d) {
2c4104f0 3509 if (errno != ENOENT)
f5f6d0e2 3510 log_warning("opendir(%s) failed: %m", path);
2c4104f0
LP
3511
3512 continue;
3513 }
3514
3515 while ((de = readdir(d))) {
db06e3b6 3516 int a, b;
2c4104f0
LP
3517
3518 if (ignore_file(de->d_name))
3519 continue;
3520
3521 if (de->d_name[0] != 'S' && de->d_name[0] != 'K')
3522 continue;
3523
3524 if (strlen(de->d_name) < 4)
3525 continue;
3526
db06e3b6
LP
3527 a = undecchar(de->d_name[1]);
3528 b = undecchar(de->d_name[2]);
3529
3530 if (a < 0 || b < 0)
3531 continue;
3532
2c4104f0 3533 free(fpath);
b7def684 3534 fpath = strjoin(path, "/", de->d_name, NULL);
8ea913b2 3535 if (!fpath) {
2c4104f0
LP
3536 r = -ENOMEM;
3537 goto finish;
3538 }
3539
3540 if (access(fpath, X_OK) < 0) {
3541
3542 if (errno != ENOENT)
f5f6d0e2 3543 log_warning("access() failed on %s: %m", fpath);
2c4104f0
LP
3544
3545 continue;
3546 }
3547
3548 free(name);
117dcc57
ZJS
3549 name = sysv_translate_name(de->d_name + 3);
3550 if (!name) {
3551 r = log_oom();
2c4104f0
LP
3552 goto finish;
3553 }
3554
66870f90
ZJS
3555 r = manager_load_unit_prepare(m, name, NULL, NULL, &service);
3556 if (r < 0) {
fbe9f3a9
LP
3557 log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
3558 continue;
3559 }
2c4104f0 3560
c68364b7
LP
3561 if (de->d_name[0] == 'S') {
3562
3cdebc21 3563 if (rcnd_table[i].type == RUNLEVEL_UP) {
ea87ca5a
LP
3564 SERVICE(service)->sysv_start_priority_from_rcnd =
3565 MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
db06e3b6 3566
c68364b7 3567 SERVICE(service)->sysv_enabled = true;
f73d93a4 3568 }
db06e3b6 3569
117dcc57
ZJS
3570 r = set_ensure_allocated(&runlevel_services[i],
3571 trivial_hash_func, trivial_compare_func);
3572 if (r < 0)
c68364b7 3573 goto finish;
2c4104f0 3574
117dcc57
ZJS
3575 r = set_put(runlevel_services[i], service);
3576 if (r < 0)
2c4104f0 3577 goto finish;
23a177ef 3578
fc5df99e 3579 } else if (de->d_name[0] == 'K' &&
3cdebc21 3580 (rcnd_table[i].type == RUNLEVEL_DOWN)) {
6542952f 3581
117dcc57
ZJS
3582 r = set_ensure_allocated(&shutdown_services,
3583 trivial_hash_func, trivial_compare_func);
3584 if (r < 0)
c68364b7
LP
3585 goto finish;
3586
117dcc57
ZJS
3587 r = set_put(shutdown_services, service);
3588 if (r < 0)
2c4104f0
LP
3589 goto finish;
3590 }
3591 }
3592 }
3593
c68364b7
LP
3594 /* Now we loaded all stubs and are aware of the lowest
3595 start-up priority for all services, not let's actually load
3596 the services, this will also tell us which services are
3597 actually native now */
3598 manager_dispatch_load_queue(m);
3599
3600 /* If this is a native service, rely on native ways to pull in
3601 * a service, don't pull it in via sysv rcN.d links. */
3602 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++)
3603 SET_FOREACH(service, runlevel_services[i], j) {
3604 service = unit_follow_merge(service);
3605
ac155bb8 3606 if (service->fragment_path)
c68364b7
LP
3607 continue;
3608
117dcc57
ZJS
3609 r = unit_add_two_dependencies_by_name_inverse(
3610 service, UNIT_AFTER, UNIT_WANTS,
3611 rcnd_table[i].target, NULL, true);
3612 if (r < 0)
c68364b7
LP
3613 goto finish;
3614 }
3615
3616 /* We honour K links only for halt/reboot. For the normal
3617 * runlevels we assume the stop jobs will be implicitly added
35b8ca3a 3618 * by the core logic. Also, we don't really distinguish here
c68364b7 3619 * between the runlevels 0 and 6 and just add them to the
3cdebc21 3620 * special shutdown target. */
c68364b7
LP
3621 SET_FOREACH(service, shutdown_services, j) {
3622 service = unit_follow_merge(service);
3623
ac155bb8 3624 if (service->fragment_path)
c68364b7
LP
3625 continue;
3626
117dcc57
ZJS
3627 r = unit_add_two_dependencies_by_name(
3628 service, UNIT_BEFORE, UNIT_CONFLICTS,
3629 SPECIAL_SHUTDOWN_TARGET, NULL, true);
3630 if (r < 0)
c68364b7
LP
3631 goto finish;
3632 }
3633
2c4104f0
LP
3634 r = 0;
3635
3636finish:
fbe9f3a9 3637
c68364b7
LP
3638 for (i = 0; i < ELEMENTSOF(rcnd_table); i++)
3639 set_free(runlevel_services[i]);
2c4104f0
LP
3640
3641 return r;
3642}
07459bb6 3643#endif
2c4104f0 3644
05e343b7
LP
3645static void service_bus_name_owner_change(
3646 Unit *u,
3647 const char *name,
3648 const char *old_owner,
3649 const char *new_owner) {
3650
3651 Service *s = SERVICE(u);
718db961 3652 int r;
05e343b7
LP
3653
3654 assert(s);
3655 assert(name);
3656
3657 assert(streq(s->bus_name, name));
3658 assert(old_owner || new_owner);
3659
3660 if (old_owner && new_owner)
66870f90
ZJS
3661 log_debug_unit(u->id,
3662 "%s's D-Bus name %s changed owner from %s to %s",
3663 u->id, name, old_owner, new_owner);
05e343b7 3664 else if (old_owner)
66870f90
ZJS
3665 log_debug_unit(u->id,
3666 "%s's D-Bus name %s no longer registered by %s",
3667 u->id, name, old_owner);
05e343b7 3668 else
66870f90
ZJS
3669 log_debug_unit(u->id,
3670 "%s's D-Bus name %s now registered by %s",
3671 u->id, name, new_owner);
05e343b7
LP
3672
3673 s->bus_name_good = !!new_owner;
3674
3675 if (s->type == SERVICE_DBUS) {
3676
3677 /* service_enter_running() will figure out what to
3678 * do */
3679 if (s->state == SERVICE_RUNNING)
f42806df 3680 service_enter_running(s, SERVICE_SUCCESS);
05e343b7
LP
3681 else if (s->state == SERVICE_START && new_owner)
3682 service_enter_start_post(s);
3683
3684 } else if (new_owner &&
3685 s->main_pid <= 0 &&
3686 (s->state == SERVICE_START ||
3687 s->state == SERVICE_START_POST ||
3688 s->state == SERVICE_RUNNING ||
3689 s->state == SERVICE_RELOAD)) {
3690
718db961 3691 pid_t pid;
05e343b7 3692
718db961 3693 /* Try to acquire PID from bus service */
05e343b7 3694
718db961
LP
3695 r = sd_bus_get_owner_pid(u->manager->api_bus, name, &pid);
3696 if (r >= 0) {
3697 log_debug_unit(u->id, "%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
05e343b7 3698
718db961
LP
3699 service_set_main_pid(s, pid);
3700 unit_watch_pid(UNIT(s), pid);
3701 }
7400b9d2 3702 }
05e343b7
LP
3703}
3704
6cf6bbc2 3705int service_set_socket_fd(Service *s, int fd, Socket *sock) {
57020a3a 3706
4f2d528d
LP
3707 assert(s);
3708 assert(fd >= 0);
3709
3710 /* This is called by the socket code when instantiating a new
3711 * service for a stream socket and the socket needs to be
3712 * configured. */
3713
1124fe6f 3714 if (UNIT(s)->load_state != UNIT_LOADED)
4f2d528d
LP
3715 return -EINVAL;
3716
3717 if (s->socket_fd >= 0)
3718 return -EBUSY;
3719
3720 if (s->state != SERVICE_DEAD)
3721 return -EAGAIN;
3722
3723 s->socket_fd = fd;
701cc384 3724 s->got_socket_fd = true;
6cf6bbc2 3725
57020a3a
LP
3726 unit_ref_set(&s->accept_socket, UNIT(sock));
3727
3728 return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
4f2d528d
LP
3729}
3730
fdf20a31 3731static void service_reset_failed(Unit *u) {
5632e374
LP
3732 Service *s = SERVICE(u);
3733
3734 assert(s);
3735
fdf20a31 3736 if (s->state == SERVICE_FAILED)
5632e374
LP
3737 service_set_state(s, SERVICE_DEAD);
3738
f42806df
LP
3739 s->result = SERVICE_SUCCESS;
3740 s->reload_result = SERVICE_SUCCESS;
451b34cc
LP
3741
3742 RATELIMIT_RESET(s->start_limit);
5632e374
LP
3743}
3744
718db961 3745static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
8a0867d6 3746 Service *s = SERVICE(u);
41efeaec 3747
814cc562 3748 return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
8a0867d6
LP
3749}
3750
94f04347
LP
3751static const char* const service_state_table[_SERVICE_STATE_MAX] = {
3752 [SERVICE_DEAD] = "dead",
3753 [SERVICE_START_PRE] = "start-pre",
3754 [SERVICE_START] = "start",
3755 [SERVICE_START_POST] = "start-post",
3756 [SERVICE_RUNNING] = "running",
80876c20 3757 [SERVICE_EXITED] = "exited",
94f04347
LP
3758 [SERVICE_RELOAD] = "reload",
3759 [SERVICE_STOP] = "stop",
3760 [SERVICE_STOP_SIGTERM] = "stop-sigterm",
3761 [SERVICE_STOP_SIGKILL] = "stop-sigkill",
3762 [SERVICE_STOP_POST] = "stop-post",
3763 [SERVICE_FINAL_SIGTERM] = "final-sigterm",
3764 [SERVICE_FINAL_SIGKILL] = "final-sigkill",
fdf20a31 3765 [SERVICE_FAILED] = "failed",
94f04347
LP
3766 [SERVICE_AUTO_RESTART] = "auto-restart",
3767};
3768
3769DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
3770
3771static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
525ee6f4
LP
3772 [SERVICE_RESTART_NO] = "no",
3773 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
50caaedb 3774 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
dc99a976 3775 [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
50caaedb
LP
3776 [SERVICE_RESTART_ON_ABORT] = "on-abort",
3777 [SERVICE_RESTART_ALWAYS] = "always"
94f04347
LP
3778};
3779
3780DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3781
3782static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
94f04347 3783 [SERVICE_SIMPLE] = "simple",
0d624a78 3784 [SERVICE_FORKING] = "forking",
34e9ba66 3785 [SERVICE_ONESHOT] = "oneshot",
8c47c732 3786 [SERVICE_DBUS] = "dbus",
f2b68789
LP
3787 [SERVICE_NOTIFY] = "notify",
3788 [SERVICE_IDLE] = "idle"
94f04347
LP
3789};
3790
3791DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3792
e537352b 3793static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
94f04347
LP
3794 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
3795 [SERVICE_EXEC_START] = "ExecStart",
3796 [SERVICE_EXEC_START_POST] = "ExecStartPost",
3797 [SERVICE_EXEC_RELOAD] = "ExecReload",
3798 [SERVICE_EXEC_STOP] = "ExecStop",
3799 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3800};
3801
3802DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3803
c952c6ec
LP
3804static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
3805 [NOTIFY_NONE] = "none",
3806 [NOTIFY_MAIN] = "main",
3807 [NOTIFY_ALL] = "all"
3808};
3809
3810DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
3811
f42806df
LP
3812static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3813 [SERVICE_SUCCESS] = "success",
3814 [SERVICE_FAILURE_RESOURCES] = "resources",
3815 [SERVICE_FAILURE_TIMEOUT] = "timeout",
3816 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3817 [SERVICE_FAILURE_SIGNAL] = "signal",
bb242b7b 3818 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
8d1b002a
LP
3819 [SERVICE_FAILURE_WATCHDOG] = "watchdog",
3820 [SERVICE_FAILURE_START_LIMIT] = "start-limit"
f42806df
LP
3821};
3822
3823DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3824
4b939747
MO
3825static const char* const start_limit_action_table[_SERVICE_START_LIMIT_MAX] = {
3826 [SERVICE_START_LIMIT_NONE] = "none",
3827 [SERVICE_START_LIMIT_REBOOT] = "reboot",
3828 [SERVICE_START_LIMIT_REBOOT_FORCE] = "reboot-force",
3829 [SERVICE_START_LIMIT_REBOOT_IMMEDIATE] = "reboot-immediate"
3830};
3831DEFINE_STRING_TABLE_LOOKUP(start_limit_action, StartLimitAction);
3832
87f0e418 3833const UnitVTable service_vtable = {
7d17cfbc 3834 .object_size = sizeof(Service),
718db961
LP
3835 .exec_context_offset = offsetof(Service, exec_context),
3836 .cgroup_context_offset = offsetof(Service, cgroup_context),
3837 .kill_context_offset = offsetof(Service, kill_context),
3ef63c31 3838
f975e971
LP
3839 .sections =
3840 "Unit\0"
3841 "Service\0"
3842 "Install\0",
4ad49000 3843 .private_section = "Service",
71645aca 3844
034c6ed7
LP
3845 .init = service_init,
3846 .done = service_done,
a16e1123
LP
3847 .load = service_load,
3848
3849 .coldplug = service_coldplug,
034c6ed7 3850
5cb5a6ff
LP
3851 .dump = service_dump,
3852
3853 .start = service_start,
3854 .stop = service_stop,
3855 .reload = service_reload,
3856
034c6ed7
LP
3857 .can_reload = service_can_reload,
3858
8a0867d6
LP
3859 .kill = service_kill,
3860
a16e1123
LP
3861 .serialize = service_serialize,
3862 .deserialize_item = service_deserialize_item,
3863
5cb5a6ff 3864 .active_state = service_active_state,
10a94420 3865 .sub_state_to_string = service_sub_state_to_string,
5cb5a6ff 3866
701cc384
LP
3867 .check_gc = service_check_gc,
3868 .check_snapshot = service_check_snapshot,
3869
034c6ed7 3870 .sigchld_event = service_sigchld_event,
2c4104f0 3871
fdf20a31 3872 .reset_failed = service_reset_failed,
5632e374 3873
4ad49000 3874 .notify_cgroup_empty = service_notify_cgroup_empty_event,
8c47c732 3875 .notify_message = service_notify_message,
8e274523 3876
05e343b7 3877 .bus_name_owner_change = service_bus_name_owner_change,
05e343b7 3878
c4e2ceae 3879 .bus_interface = "org.freedesktop.systemd1.Service",
718db961
LP
3880 .bus_vtable = bus_service_vtable,
3881 .bus_changing_properties = bus_service_changing_properties,
74c964d3
LP
3882 .bus_set_property = bus_service_set_property,
3883 .bus_commit_properties = bus_service_commit_properties,
4139c1b2 3884
07459bb6 3885#ifdef HAVE_SYSV_COMPAT
c6918296 3886 .enumerate = service_enumerate,
07459bb6 3887#endif
718db961
LP
3888
3889 .can_transient = true,
3890
c6918296
MS
3891 .status_message_formats = {
3892 .starting_stopping = {
3893 [0] = "Starting %s...",
3894 [1] = "Stopping %s...",
3895 },
3896 .finished_start_job = {
3897 [JOB_DONE] = "Started %s.",
3898 [JOB_FAILED] = "Failed to start %s.",
3899 [JOB_DEPENDENCY] = "Dependency failed for %s.",
3900 [JOB_TIMEOUT] = "Timed out starting %s.",
3901 },
3902 .finished_stop_job = {
3903 [JOB_DONE] = "Stopped %s.",
3904 [JOB_FAILED] = "Stopped (with error) %s.",
3905 [JOB_TIMEOUT] = "Timed out stopping %s.",
3906 },
3907 },
5cb5a6ff 3908};