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