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