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