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