1
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4
This file is part of systemd.
6
Copyright 2010 Lennart Poettering
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.
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.
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/>.
26
#include <sys/reboot.h>
31
#include "load-fragment.h"
32
#include "load-dropin.h"
35
#include "unit-name.h"
36
#include "unit-printf.h"
37
#include "dbus-service.h"
39
#include "dbus-common.h"
40
#include "exit-status.h"
42
#include "path-util.h"
48
#ifdef HAVE_SYSV_COMPAT
50
#define DEFAULT_SYSV_TIMEOUT_USEC (5*USEC_PER_MINUTE)
52
typedef enum RunlevelType {
60
const RunlevelType type;
62
/* Standard SysV runlevels for start-up */
63
{ "rc1.d", SPECIAL_RESCUE_TARGET, RUNLEVEL_UP },
64
{ "rc2.d", SPECIAL_RUNLEVEL2_TARGET, RUNLEVEL_UP },
65
{ "rc3.d", SPECIAL_RUNLEVEL3_TARGET, RUNLEVEL_UP },
66
{ "rc4.d", SPECIAL_RUNLEVEL4_TARGET, RUNLEVEL_UP },
67
{ "rc5.d", SPECIAL_RUNLEVEL5_TARGET, RUNLEVEL_UP },
69
/* Standard SysV runlevels for shutdown */
70
{ "rc0.d", SPECIAL_POWEROFF_TARGET, RUNLEVEL_DOWN },
71
{ "rc6.d", SPECIAL_REBOOT_TARGET, RUNLEVEL_DOWN }
73
/* Note that the order here matters, as we read the
74
directories in this order, and we want to make sure that
75
sysv_start_priority is known when we first load the
76
unit. And that value we only know from S links. Hence
77
UP must be read before DOWN */
80
#define RUNLEVELS_UP "12345"
83
static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
84
[SERVICE_DEAD] = UNIT_INACTIVE,
85
[SERVICE_START_PRE] = UNIT_ACTIVATING,
86
[SERVICE_START] = UNIT_ACTIVATING,
87
[SERVICE_START_POST] = UNIT_ACTIVATING,
88
[SERVICE_RUNNING] = UNIT_ACTIVE,
89
[SERVICE_EXITED] = UNIT_ACTIVE,
90
[SERVICE_RELOAD] = UNIT_RELOADING,
91
[SERVICE_STOP] = UNIT_DEACTIVATING,
92
[SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
93
[SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
94
[SERVICE_STOP_POST] = UNIT_DEACTIVATING,
95
[SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
96
[SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
97
[SERVICE_FAILED] = UNIT_FAILED,
98
[SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
101
/* For Type=idle we never want to delay any other jobs, hence we
102
* consider idle jobs active as soon as we start working on them */
103
static const UnitActiveState state_translation_table_idle[_SERVICE_STATE_MAX] = {
104
[SERVICE_DEAD] = UNIT_INACTIVE,
105
[SERVICE_START_PRE] = UNIT_ACTIVE,
106
[SERVICE_START] = UNIT_ACTIVE,
107
[SERVICE_START_POST] = UNIT_ACTIVE,
108
[SERVICE_RUNNING] = UNIT_ACTIVE,
109
[SERVICE_EXITED] = UNIT_ACTIVE,
110
[SERVICE_RELOAD] = UNIT_RELOADING,
111
[SERVICE_STOP] = UNIT_DEACTIVATING,
112
[SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
113
[SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
114
[SERVICE_STOP_POST] = UNIT_DEACTIVATING,
115
[SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
116
[SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
117
[SERVICE_FAILED] = UNIT_FAILED,
118
[SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
121
static void service_init(Unit *u) {
122
Service *s = SERVICE(u);
125
assert(u->load_state == UNIT_STUB);
127
s->timeout_start_usec = DEFAULT_TIMEOUT_USEC;
128
s->timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
129
s->restart_usec = DEFAULT_RESTART_USEC;
130
s->type = _SERVICE_TYPE_INVALID;
132
watch_init(&s->watchdog_watch);
133
watch_init(&s->timer_watch);
135
#ifdef HAVE_SYSV_COMPAT
136
s->sysv_start_priority = -1;
137
s->sysv_start_priority_from_rcnd = -1;
140
s->guess_main_pid = true;
142
exec_context_init(&s->exec_context);
143
kill_context_init(&s->kill_context);
145
RATELIMIT_INIT(s->start_limit, 10*USEC_PER_SEC, 5);
147
s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
150
static void service_unwatch_control_pid(Service *s) {
153
if (s->control_pid <= 0)
156
unit_unwatch_pid(UNIT(s), s->control_pid);
160
static void service_unwatch_main_pid(Service *s) {
163
if (s->main_pid <= 0)
166
unit_unwatch_pid(UNIT(s), s->main_pid);
170
static void service_unwatch_pid_file(Service *s) {
171
if (!s->pid_file_pathspec)
174
log_debug_unit(UNIT(s)->id, "Stopping watch for %s's PID file %s",
175
UNIT(s)->id, s->pid_file_pathspec->path);
176
path_spec_unwatch(s->pid_file_pathspec, UNIT(s));
177
path_spec_done(s->pid_file_pathspec);
178
free(s->pid_file_pathspec);
179
s->pid_file_pathspec = NULL;
182
static int service_set_main_pid(Service *s, pid_t pid) {
194
s->main_pid_known = true;
196
if (get_parent_of_pid(pid, &ppid) >= 0 && ppid != getpid()) {
197
log_warning_unit(UNIT(s)->id,
198
"%s: Supervising process %lu which is not our child. We'll most likely not notice when it exits.",
199
UNIT(s)->id, (unsigned long) pid);
201
s->main_pid_alien = true;
203
s->main_pid_alien = false;
205
exec_status_start(&s->main_exec_status, pid);
210
static void service_close_socket_fd(Service *s) {
213
if (s->socket_fd < 0)
216
close_nointr_nofail(s->socket_fd);
220
static void service_connection_unref(Service *s) {
223
if (!UNIT_DEREF(s->accept_socket))
226
socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
227
unit_ref_unset(&s->accept_socket);
230
static void service_stop_watchdog(Service *s) {
233
unit_unwatch_timer(UNIT(s), &s->watchdog_watch);
234
s->watchdog_timestamp.realtime = 0;
235
s->watchdog_timestamp.monotonic = 0;
238
static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart);
240
static void service_handle_watchdog(Service *s) {
246
if (s->watchdog_usec == 0)
249
offset = now(CLOCK_MONOTONIC) - s->watchdog_timestamp.monotonic;
250
if (offset >= s->watchdog_usec) {
251
log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id);
252
service_enter_dead(s, SERVICE_FAILURE_WATCHDOG, true);
256
r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true, s->watchdog_usec - offset, &s->watchdog_watch);
258
log_warning_unit(UNIT(s)->id,
259
"%s failed to install watchdog timer: %s",
260
UNIT(s)->id, strerror(-r));
263
static void service_reset_watchdog(Service *s) {
266
dual_timestamp_get(&s->watchdog_timestamp);
267
service_handle_watchdog(s);
270
static void service_done(Unit *u) {
271
Service *s = SERVICE(u);
278
#ifdef HAVE_SYSV_COMPAT
279
free(s->sysv_runlevels);
280
s->sysv_runlevels = NULL;
283
free(s->status_text);
284
s->status_text = NULL;
286
exec_context_done(&s->exec_context, manager_is_reloading_or_reexecuting(u->manager));
287
exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
288
s->control_command = NULL;
289
s->main_command = NULL;
291
set_free(s->restart_ignore_status.code);
292
s->restart_ignore_status.code = NULL;
293
set_free(s->restart_ignore_status.signal);
294
s->restart_ignore_status.signal = NULL;
296
set_free(s->success_status.code);
297
s->success_status.code = NULL;
298
set_free(s->success_status.signal);
299
s->success_status.signal = NULL;
301
/* This will leak a process, but at least no memory or any of
303
service_unwatch_main_pid(s);
304
service_unwatch_control_pid(s);
305
service_unwatch_pid_file(s);
308
unit_unwatch_bus_name(u, s->bus_name);
313
service_close_socket_fd(s);
314
service_connection_unref(s);
316
unit_ref_unset(&s->accept_socket);
318
service_stop_watchdog(s);
320
unit_unwatch_timer(u, &s->timer_watch);
323
#ifdef HAVE_SYSV_COMPAT
324
static char *sysv_translate_name(const char *name) {
327
r = new(char, strlen(name) + sizeof(".service"));
331
if (endswith(name, ".sh"))
332
/* Drop .sh suffix */
333
strcpy(stpcpy(r, name) - 3, ".service");
335
/* Normal init script name */
336
strcpy(stpcpy(r, name), ".service");
341
static int sysv_translate_facility(const char *name, const char *filename, char **_r) {
343
/* We silently ignore the $ prefix here. According to the LSB
344
* spec it simply indicates whether something is a
345
* standardized name or a distribution-specific one. Since we
346
* just follow what already exists and do not introduce new
347
* uses or names we don't care who introduced a new name. */
349
static const char * const table[] = {
350
/* LSB defined facilities */
352
"network", SPECIAL_NETWORK_TARGET,
353
"named", SPECIAL_NSS_LOOKUP_TARGET,
354
"portmap", SPECIAL_RPCBIND_TARGET,
355
"remote_fs", SPECIAL_REMOTE_FS_TARGET,
357
"time", SPECIAL_TIME_SYNC_TARGET,
367
n = *name == '$' ? name + 1 : name;
369
for (i = 0; i < ELEMENTSOF(table); i += 2) {
371
if (!streq(table[i], n))
377
r = strdup(table[i+1]);
384
/* If we don't know this name, fallback heuristics to figure
385
* out whether something is a target or a service alias. */
388
if (!unit_prefix_is_valid(n))
391
/* Facilities starting with $ are most likely targets */
392
r = unit_name_build(n, NULL, ".target");
393
} else if (filename && streq(name, filename))
394
/* Names equaling the file name of the services are redundant */
397
/* Everything else we assume to be normal service names */
398
r = sysv_translate_name(n);
409
static int sysv_fix_order(Service *s) {
415
if (s->sysv_start_priority < 0)
418
/* For each pair of services where at least one lacks a LSB
419
* header, we use the start priority value to order things. */
421
LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_SERVICE]) {
424
bool special_s, special_t;
431
if (UNIT(t)->load_state != UNIT_LOADED)
434
if (t->sysv_start_priority < 0)
437
/* If both units have modern headers we don't care
438
* about the priorities */
439
if ((UNIT(s)->fragment_path || s->sysv_has_lsb) &&
440
(UNIT(t)->fragment_path || t->sysv_has_lsb))
443
special_s = s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels);
444
special_t = t->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, t->sysv_runlevels);
446
if (special_t && !special_s)
448
else if (special_s && !special_t)
450
else if (t->sysv_start_priority < s->sysv_start_priority)
452
else if (t->sysv_start_priority > s->sysv_start_priority)
457
/* FIXME: Maybe we should compare the name here lexicographically? */
459
if ((r = unit_add_dependency(UNIT(s), d, UNIT(t), true)) < 0)
466
static ExecCommand *exec_command_new(const char *path, const char *arg1) {
469
if (!(c = new0(ExecCommand, 1)))
472
if (!(c->path = strdup(path))) {
477
if (!(c->argv = strv_new(path, arg1, NULL))) {
486
static int sysv_exec_commands(Service *s, const bool supports_reload) {
491
assert(UNIT(s)->source_path);
493
c = exec_command_new(UNIT(s)->source_path, "start");
496
exec_command_append_list(s->exec_command+SERVICE_EXEC_START, c);
498
c = exec_command_new(UNIT(s)->source_path, "stop");
501
exec_command_append_list(s->exec_command+SERVICE_EXEC_STOP, c);
503
if (supports_reload) {
504
c = exec_command_new(UNIT(s)->source_path, "reload");
507
exec_command_append_list(s->exec_command+SERVICE_EXEC_RELOAD, c);
513
static bool usage_contains_reload(const char *line) {
514
return (strcasestr(line, "{reload|") ||
515
strcasestr(line, "{reload}") ||
516
strcasestr(line, "{reload\"") ||
517
strcasestr(line, "|reload|") ||
518
strcasestr(line, "|reload}") ||
519
strcasestr(line, "|reload\""));
522
static int service_load_sysv_path(Service *s, const char *path) {
534
char *short_description = NULL, *long_description = NULL, *chkconfig_description = NULL, *description;
536
bool supports_reload = false;
543
f = fopen(path, "re");
545
r = errno == ENOENT ? 0 : -errno;
549
if (fstat(fileno(f), &st) < 0) {
554
free(u->source_path);
555
u->source_path = strdup(path);
556
if (!u->source_path) {
560
u->source_mtime = timespec_load(&st.st_mtim);
562
if (null_or_empty(&st)) {
563
u->load_state = UNIT_MASKED;
571
char l[LINE_MAX], *t;
573
if (!fgets(l, sizeof(l), f)) {
578
log_error_unit(u->id,
579
"Failed to read configuration file '%s': %s",
588
/* Try to figure out whether this init script supports
589
* the reload operation. This heuristic looks for
590
* "Usage" lines which include the reload option. */
591
if ( state == USAGE_CONTINUATION ||
592
(state == NORMAL && strcasestr(t, "usage"))) {
593
if (usage_contains_reload(t)) {
594
supports_reload = true;
596
} else if (t[strlen(t)-1] == '\\')
597
state = USAGE_CONTINUATION;
605
if (state == NORMAL && streq(t, "### BEGIN INIT INFO")) {
607
s->sysv_has_lsb = true;
611
if ((state == LSB_DESCRIPTION || state == LSB) && streq(t, "### END INIT INFO")) {
617
t += strspn(t, WHITESPACE);
619
if (state == NORMAL) {
621
/* Try to parse Red Hat style chkconfig headers */
623
if (startswith_no_case(t, "chkconfig:")) {
625
char runlevels[16], *k;
629
if (sscanf(t+10, "%15s %i %*i",
631
&start_priority) != 2) {
633
log_warning_unit(u->id,
634
"[%s:%u] Failed to parse chkconfig line. Ignoring.",
639
/* A start priority gathered from the
640
* symlink farms is preferred over the
641
* data from the LSB header. */
642
if (start_priority < 0 || start_priority > 99)
643
log_warning_unit(u->id,
644
"[%s:%u] Start priority out of range. Ignoring.",
647
s->sysv_start_priority = start_priority;
649
char_array_0(runlevels);
650
k = delete_chars(runlevels, WHITESPACE "-");
655
if (!(d = strdup(k))) {
660
free(s->sysv_runlevels);
661
s->sysv_runlevels = d;
664
} else if (startswith_no_case(t, "description:")) {
666
size_t k = strlen(t);
670
if (t[k-1] == '\\') {
675
if ((j = strstrip(t+12)) && *j) {
676
if (!(d = strdup(j))) {
683
free(chkconfig_description);
684
chkconfig_description = d;
686
} else if (startswith_no_case(t, "pidfile:")) {
693
if (!path_is_absolute(fn)) {
694
log_warning_unit(u->id,
695
"[%s:%u] PID file not absolute. Ignoring.",
700
if (!(fn = strdup(fn))) {
709
} else if (state == DESCRIPTION) {
711
/* Try to parse Red Hat style description
714
size_t k = strlen(t);
722
if ((j = strstrip(t)) && *j) {
725
if (chkconfig_description)
726
d = strjoin(chkconfig_description, " ", j, NULL);
735
free(chkconfig_description);
736
chkconfig_description = d;
739
} else if (state == LSB || state == LSB_DESCRIPTION) {
741
if (startswith_no_case(t, "Provides:")) {
747
FOREACH_WORD_QUOTED(w, z, t+9, i) {
750
if (!(n = strndup(w, z))) {
755
r = sysv_translate_facility(n, path_get_file_name(path), &m);
764
if (unit_name_to_type(m) == UNIT_SERVICE)
765
r = unit_merge_by_name(u, m);
772
* indication that the
774
* now available. This
777
* targets do NOT pull
780
r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, UNIT_WANTS, m, NULL, true);
783
log_error_unit(u->id,
784
"[%s:%u] Failed to add LSB Provides name %s, ignoring: %s",
785
path, line, m, strerror(-r));
790
} else if (startswith_no_case(t, "Required-Start:") ||
791
startswith_no_case(t, "Should-Start:") ||
792
startswith_no_case(t, "X-Start-Before:") ||
793
startswith_no_case(t, "X-Start-After:")) {
799
FOREACH_WORD_QUOTED(w, z, strchr(t, ':')+1, i) {
802
if (!(n = strndup(w, z))) {
807
r = sysv_translate_facility(n, path_get_file_name(path), &m);
809
log_error_unit(u->id,
810
"[%s:%u] Failed to translate LSB dependency %s, ignoring: %s",
811
path, line, n, strerror(-r));
821
r = unit_add_dependency_by_name(u, startswith_no_case(t, "X-Start-Before:") ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true);
824
log_error_unit(u->id, "[%s:%u] Failed to add dependency on %s, ignoring: %s",
825
path, line, m, strerror(-r));
829
} else if (startswith_no_case(t, "Default-Start:")) {
834
k = delete_chars(t+14, WHITESPACE "-");
837
if (!(d = strdup(k))) {
842
free(s->sysv_runlevels);
843
s->sysv_runlevels = d;
846
} else if (startswith_no_case(t, "Description:")) {
849
state = LSB_DESCRIPTION;
851
if ((j = strstrip(t+12)) && *j) {
852
if (!(d = strdup(j))) {
859
free(long_description);
860
long_description = d;
862
} else if (startswith_no_case(t, "Short-Description:")) {
867
if ((j = strstrip(t+18)) && *j) {
868
if (!(d = strdup(j))) {
875
free(short_description);
876
short_description = d;
878
} else if (state == LSB_DESCRIPTION) {
880
if (startswith(l, "#\t") || startswith(l, "# ")) {
883
if ((j = strstrip(t)) && *j) {
886
if (long_description)
887
d = strjoin(long_description, " ", t, NULL);
896
free(long_description);
897
long_description = d;
906
if ((r = sysv_exec_commands(s, supports_reload)) < 0)
909
if (s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels)) {
910
/* If there a runlevels configured for this service
911
* but none of the standard ones, then we assume this
912
* is some special kind of service (which might be
913
* needed for early boot) and don't create any links
916
UNIT(s)->default_dependencies = false;
918
/* Don't timeout special services during boot (like fsck) */
919
s->timeout_start_usec = 0;
920
s->timeout_stop_usec = 0;
922
s->timeout_start_usec = DEFAULT_SYSV_TIMEOUT_USEC;
923
s->timeout_stop_usec = DEFAULT_SYSV_TIMEOUT_USEC;
926
/* Special setting for all SysV services */
927
s->type = SERVICE_FORKING;
928
s->remain_after_exit = !s->pid_file;
929
s->guess_main_pid = false;
930
s->restart = SERVICE_RESTART_NO;
931
s->exec_context.ignore_sigpipe = false;
932
s->kill_context.kill_mode = KILL_PROCESS;
934
/* We use the long description only if
935
* no short description is set. */
937
if (short_description)
938
description = short_description;
939
else if (chkconfig_description)
940
description = chkconfig_description;
941
else if (long_description)
942
description = long_description;
949
if (!(d = strappend(s->sysv_has_lsb ? "LSB: " : "SYSV: ", description))) {
957
/* The priority that has been set in /etc/rcN.d/ hierarchies
958
* takes precedence over what is stored as default in the LSB
960
if (s->sysv_start_priority_from_rcnd >= 0)
961
s->sysv_start_priority = s->sysv_start_priority_from_rcnd;
963
u->load_state = UNIT_LOADED;
971
free(short_description);
972
free(long_description);
973
free(chkconfig_description);
978
static int service_load_sysv_name(Service *s, const char *name) {
984
/* For SysV services we strip the *.sh suffixes. */
985
if (endswith(name, ".sh.service"))
988
STRV_FOREACH(p, UNIT(s)->manager->lookup_paths.sysvinit_path) {
992
path = strjoin(*p, "/", name, NULL);
996
assert(endswith(path, ".service"));
997
path[strlen(path)-8] = 0;
999
r = service_load_sysv_path(s, path);
1001
if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) {
1002
/* Try *.sh source'able init scripts */
1003
strcat(path, ".sh");
1004
r = service_load_sysv_path(s, path);
1011
if (UNIT(s)->load_state != UNIT_STUB)
1018
static int service_load_sysv(Service *s) {
1025
/* Load service data from SysV init scripts, preferably with
1026
* LSB headers ... */
1028
if (strv_isempty(UNIT(s)->manager->lookup_paths.sysvinit_path))
1031
if ((t = UNIT(s)->id))
1032
if ((r = service_load_sysv_name(s, t)) < 0)
1035
if (UNIT(s)->load_state == UNIT_STUB)
1036
SET_FOREACH(t, UNIT(s)->names, i) {
1037
if (t == UNIT(s)->id)
1040
if ((r = service_load_sysv_name(s, t)) < 0)
1043
if (UNIT(s)->load_state != UNIT_STUB)
1051
static int fsck_fix_order(Service *s) {
1057
if (s->fsck_passno <= 0)
1060
/* For each pair of services where both have an fsck priority
1061
* we order things based on it. */
1063
LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_SERVICE]) {
1072
if (UNIT(t)->load_state != UNIT_LOADED)
1075
if (t->fsck_passno <= 0)
1078
if (t->fsck_passno < s->fsck_passno)
1080
else if (t->fsck_passno > s->fsck_passno)
1085
r = unit_add_dependency(UNIT(s), d, UNIT(t), true);
1093
static int service_verify(Service *s) {
1096
if (UNIT(s)->load_state != UNIT_LOADED)
1099
if (!s->exec_command[SERVICE_EXEC_START]) {
1100
log_error_unit(UNIT(s)->id,
1101
"%s lacks ExecStart setting. Refusing.", UNIT(s)->id);
1105
if (s->type != SERVICE_ONESHOT &&
1106
s->exec_command[SERVICE_EXEC_START]->command_next) {
1107
log_error_unit(UNIT(s)->id,
1108
"%s has more than one ExecStart setting, which is only allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
1112
if (s->type == SERVICE_DBUS && !s->bus_name) {
1113
log_error_unit(UNIT(s)->id,
1114
"%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", UNIT(s)->id);
1118
if (s->bus_name && s->type != SERVICE_DBUS)
1119
log_warning_unit(UNIT(s)->id,
1120
"%s has a D-Bus service name specified, but is not of type dbus. Ignoring.", UNIT(s)->id);
1122
if (s->exec_context.pam_name && s->kill_context.kill_mode != KILL_CONTROL_GROUP) {
1123
log_error_unit(UNIT(s)->id,
1124
"%s has PAM enabled. Kill mode must be set to 'control-group'. Refusing.", UNIT(s)->id);
1131
static int service_add_default_dependencies(Service *s) {
1136
/* Add a number of automatic dependencies useful for the
1137
* majority of services. */
1139
/* First, pull in base system */
1140
if (UNIT(s)->manager->running_as == SYSTEMD_SYSTEM) {
1141
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
1142
SPECIAL_BASIC_TARGET, NULL, true);
1146
} else if (UNIT(s)->manager->running_as == SYSTEMD_USER) {
1147
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
1148
SPECIAL_SOCKETS_TARGET, NULL, true);
1152
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
1153
SPECIAL_TIMERS_TARGET, NULL, true);
1157
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
1158
SPECIAL_PATHS_TARGET, NULL, true);
1163
/* Second, activate normal shutdown */
1164
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS,
1165
SPECIAL_SHUTDOWN_TARGET, NULL, true);
1169
static void service_fix_output(Service *s) {
1172
/* If nothing has been explicitly configured, patch default
1173
* output in. If input is socket/tty we avoid this however,
1174
* since in that case we want output to default to the same
1175
* place as we read input from. */
1177
if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
1178
s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1179
s->exec_context.std_input == EXEC_INPUT_NULL)
1180
s->exec_context.std_error = UNIT(s)->manager->default_std_error;
1182
if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1183
s->exec_context.std_input == EXEC_INPUT_NULL)
1184
s->exec_context.std_output = UNIT(s)->manager->default_std_output;
1187
static int service_load(Unit *u) {
1189
Service *s = SERVICE(u);
1193
/* Load a .service file */
1194
if ((r = unit_load_fragment(u)) < 0)
1197
#ifdef HAVE_SYSV_COMPAT
1198
/* Load a classic init script as a fallback, if we couldn't find anything */
1199
if (u->load_state == UNIT_STUB)
1200
if ((r = service_load_sysv(s)) < 0)
1204
/* Still nothing found? Then let's give up */
1205
if (u->load_state == UNIT_STUB)
1208
/* We were able to load something, then let's add in the
1209
* dropin directories. */
1210
if ((r = unit_load_dropin(unit_follow_merge(u))) < 0)
1213
/* This is a new unit? Then let's add in some extras */
1214
if (u->load_state == UNIT_LOADED) {
1215
if (s->type == _SERVICE_TYPE_INVALID)
1216
s->type = s->bus_name ? SERVICE_DBUS : SERVICE_SIMPLE;
1218
/* Oneshot services have disabled start timeout by default */
1219
if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
1220
s->timeout_start_usec = 0;
1222
service_fix_output(s);
1224
r = unit_add_exec_dependencies(u, &s->exec_context);
1228
r = unit_add_default_cgroups(u);
1232
#ifdef HAVE_SYSV_COMPAT
1233
r = sysv_fix_order(s);
1238
r = fsck_fix_order(s);
1243
if ((r = unit_watch_bus_name(u, s->bus_name)) < 0)
1246
if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
1247
s->notify_access = NOTIFY_MAIN;
1249
if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
1250
s->notify_access = NOTIFY_MAIN;
1252
if (s->type == SERVICE_DBUS || s->bus_name) {
1253
r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_REQUIRES,
1254
SPECIAL_DBUS_SOCKET, NULL, true);
1259
if (UNIT(s)->default_dependencies) {
1260
r = service_add_default_dependencies(s);
1265
r = unit_exec_context_defaults(u, &s->exec_context);
1270
return service_verify(s);
1273
static void service_dump(Unit *u, FILE *f, const char *prefix) {
1275
ServiceExecCommand c;
1276
Service *s = SERVICE(u);
1277
const char *prefix2;
1278
_cleanup_free_ char *p2 = NULL;
1282
p2 = strappend(prefix, "\t");
1283
prefix2 = p2 ? p2 : prefix;
1286
"%sService State: %s\n"
1288
"%sReload Result: %s\n"
1289
"%sPermissionsStartOnly: %s\n"
1290
"%sRootDirectoryStartOnly: %s\n"
1291
"%sRemainAfterExit: %s\n"
1292
"%sGuessMainPID: %s\n"
1295
"%sNotifyAccess: %s\n",
1296
prefix, service_state_to_string(s->state),
1297
prefix, service_result_to_string(s->result),
1298
prefix, service_result_to_string(s->reload_result),
1299
prefix, yes_no(s->permissions_start_only),
1300
prefix, yes_no(s->root_directory_start_only),
1301
prefix, yes_no(s->remain_after_exit),
1302
prefix, yes_no(s->guess_main_pid),
1303
prefix, service_type_to_string(s->type),
1304
prefix, service_restart_to_string(s->restart),
1305
prefix, notify_access_to_string(s->notify_access));
1307
if (s->control_pid > 0)
1309
"%sControl PID: %lu\n",
1310
prefix, (unsigned long) s->control_pid);
1312
if (s->main_pid > 0)
1315
"%sMain PID Known: %s\n"
1316
"%sMain PID Alien: %s\n",
1317
prefix, (unsigned long) s->main_pid,
1318
prefix, yes_no(s->main_pid_known),
1319
prefix, yes_no(s->main_pid_alien));
1324
prefix, s->pid_file);
1329
"%sBus Name Good: %s\n",
1330
prefix, s->bus_name,
1331
prefix, yes_no(s->bus_name_good));
1333
kill_context_dump(&s->kill_context, f, prefix);
1334
exec_context_dump(&s->exec_context, f, prefix);
1336
for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
1338
if (!s->exec_command[c])
1341
fprintf(f, "%s-> %s:\n",
1342
prefix, service_exec_command_to_string(c));
1344
exec_command_dump_list(s->exec_command[c], f, prefix2);
1347
#ifdef HAVE_SYSV_COMPAT
1350
"%sSysV Init Script has LSB Header: %s\n"
1351
"%sSysVEnabled: %s\n",
1352
prefix, yes_no(s->sysv_has_lsb),
1353
prefix, yes_no(s->sysv_enabled));
1355
if (s->sysv_start_priority >= 0)
1357
"%sSysVStartPriority: %i\n",
1358
prefix, s->sysv_start_priority);
1360
if (s->sysv_runlevels)
1361
fprintf(f, "%sSysVRunLevels: %s\n",
1362
prefix, s->sysv_runlevels);
1365
if (s->fsck_passno > 0)
1367
"%sFsckPassNo: %i\n",
1368
prefix, s->fsck_passno);
1371
fprintf(f, "%sStatus Text: %s\n",
1372
prefix, s->status_text);
1375
static int service_load_pid_file(Service *s, bool may_warn) {
1376
_cleanup_free_ char *k = NULL;
1385
r = read_one_line_file(s->pid_file, &k);
1388
log_info_unit(UNIT(s)->id,
1389
"PID file %s not readable (yet?) after %s.",
1390
s->pid_file, service_state_to_string(s->state));
1394
r = parse_pid(k, &pid);
1397
log_info_unit(UNIT(s)->id,
1398
"Failed to read PID from file %s: %s",
1399
s->pid_file, strerror(-r));
1403
if (kill(pid, 0) < 0 && errno != EPERM) {
1405
log_info_unit(UNIT(s)->id,
1406
"PID %lu read from file %s does not exist.",
1407
(unsigned long) pid, s->pid_file);
1411
if (s->main_pid_known) {
1412
if (pid == s->main_pid)
1415
log_debug_unit(UNIT(s)->id,
1416
"Main PID changing: %lu -> %lu",
1417
(unsigned long) s->main_pid, (unsigned long) pid);
1418
service_unwatch_main_pid(s);
1419
s->main_pid_known = false;
1421
log_debug_unit(UNIT(s)->id,
1422
"Main PID loaded: %lu", (unsigned long) pid);
1424
r = service_set_main_pid(s, pid);
1428
r = unit_watch_pid(UNIT(s), pid);
1430
/* FIXME: we need to do something here */
1431
log_warning_unit(UNIT(s)->id,
1432
"Failed to watch PID %lu from service %s",
1433
(unsigned long) pid, UNIT(s)->id);
1440
static int service_search_main_pid(Service *s) {
1446
/* If we know it anyway, don't ever fallback to unreliable
1448
if (s->main_pid_known)
1451
if (!s->guess_main_pid)
1454
assert(s->main_pid <= 0);
1456
pid = cgroup_bonding_search_main_pid_list(UNIT(s)->cgroup_bondings);
1460
log_debug_unit(UNIT(s)->id,
1461
"Main PID guessed: %lu", (unsigned long) pid);
1462
r = service_set_main_pid(s, pid);
1466
r = unit_watch_pid(UNIT(s), pid);
1468
/* FIXME: we need to do something here */
1469
log_warning_unit(UNIT(s)->id,
1470
"Failed to watch PID %lu from service %s",
1471
(unsigned long) pid, UNIT(s)->id);
1477
static void service_notify_sockets_dead(Service *s, bool failed_permanent) {
1483
/* Notifies all our sockets when we die */
1485
if (s->socket_fd >= 0)
1488
SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i)
1489
if (u->type == UNIT_SOCKET)
1490
socket_notify_service_dead(SOCKET(u), failed_permanent);
1495
static void service_set_state(Service *s, ServiceState state) {
1496
ServiceState old_state;
1497
const UnitActiveState *table;
1500
table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1502
old_state = s->state;
1505
service_unwatch_pid_file(s);
1507
if (state != SERVICE_START_PRE &&
1508
state != SERVICE_START &&
1509
state != SERVICE_START_POST &&
1510
state != SERVICE_RELOAD &&
1511
state != SERVICE_STOP &&
1512
state != SERVICE_STOP_SIGTERM &&
1513
state != SERVICE_STOP_SIGKILL &&
1514
state != SERVICE_STOP_POST &&
1515
state != SERVICE_FINAL_SIGTERM &&
1516
state != SERVICE_FINAL_SIGKILL &&
1517
state != SERVICE_AUTO_RESTART)
1518
unit_unwatch_timer(UNIT(s), &s->timer_watch);
1520
if (state != SERVICE_START &&
1521
state != SERVICE_START_POST &&
1522
state != SERVICE_RUNNING &&
1523
state != SERVICE_RELOAD &&
1524
state != SERVICE_STOP &&
1525
state != SERVICE_STOP_SIGTERM &&
1526
state != SERVICE_STOP_SIGKILL) {
1527
service_unwatch_main_pid(s);
1528
s->main_command = NULL;
1531
if (state != SERVICE_START_PRE &&
1532
state != SERVICE_START &&
1533
state != SERVICE_START_POST &&
1534
state != SERVICE_RELOAD &&
1535
state != SERVICE_STOP &&
1536
state != SERVICE_STOP_SIGTERM &&
1537
state != SERVICE_STOP_SIGKILL &&
1538
state != SERVICE_STOP_POST &&
1539
state != SERVICE_FINAL_SIGTERM &&
1540
state != SERVICE_FINAL_SIGKILL) {
1541
service_unwatch_control_pid(s);
1542
s->control_command = NULL;
1543
s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1546
if (state == SERVICE_FAILED)
1547
service_notify_sockets_dead(s, s->result == SERVICE_FAILURE_START_LIMIT);
1549
if (state == SERVICE_DEAD ||
1550
state == SERVICE_STOP ||
1551
state == SERVICE_STOP_SIGTERM ||
1552
state == SERVICE_STOP_SIGKILL ||
1553
state == SERVICE_STOP_POST ||
1554
state == SERVICE_FINAL_SIGTERM ||
1555
state == SERVICE_FINAL_SIGKILL ||
1556
state == SERVICE_AUTO_RESTART)
1557
service_notify_sockets_dead(s, false);
1559
if (state != SERVICE_START_PRE &&
1560
state != SERVICE_START &&
1561
state != SERVICE_START_POST &&
1562
state != SERVICE_RUNNING &&
1563
state != SERVICE_RELOAD &&
1564
state != SERVICE_STOP &&
1565
state != SERVICE_STOP_SIGTERM &&
1566
state != SERVICE_STOP_SIGKILL &&
1567
state != SERVICE_STOP_POST &&
1568
state != SERVICE_FINAL_SIGTERM &&
1569
state != SERVICE_FINAL_SIGKILL &&
1570
!(state == SERVICE_DEAD && UNIT(s)->job)) {
1571
service_close_socket_fd(s);
1572
service_connection_unref(s);
1575
if (state == SERVICE_STOP || state == SERVICE_STOP_SIGTERM)
1576
service_stop_watchdog(s);
1578
/* For the inactive states unit_notify() will trim the cgroup,
1579
* but for exit we have to do that ourselves... */
1580
if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
1581
cgroup_bonding_trim_list(UNIT(s)->cgroup_bondings, true);
1583
if (old_state != state)
1584
log_debug_unit(UNIT(s)->id,
1585
"%s changed %s -> %s", UNIT(s)->id,
1586
service_state_to_string(old_state),
1587
service_state_to_string(state));
1589
unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
1590
s->reload_result = SERVICE_SUCCESS;
1593
static int service_coldplug(Unit *u) {
1594
Service *s = SERVICE(u);
1598
assert(s->state == SERVICE_DEAD);
1600
if (s->deserialized_state != s->state) {
1602
if (s->deserialized_state == SERVICE_START_PRE ||
1603
s->deserialized_state == SERVICE_START ||
1604
s->deserialized_state == SERVICE_START_POST ||
1605
s->deserialized_state == SERVICE_RELOAD ||
1606
s->deserialized_state == SERVICE_STOP ||
1607
s->deserialized_state == SERVICE_STOP_SIGTERM ||
1608
s->deserialized_state == SERVICE_STOP_SIGKILL ||
1609
s->deserialized_state == SERVICE_STOP_POST ||
1610
s->deserialized_state == SERVICE_FINAL_SIGTERM ||
1611
s->deserialized_state == SERVICE_FINAL_SIGKILL ||
1612
s->deserialized_state == SERVICE_AUTO_RESTART) {
1613
if (s->deserialized_state == SERVICE_AUTO_RESTART || s->timeout_start_usec > 0) {
1616
k = s->deserialized_state == SERVICE_AUTO_RESTART ? s->restart_usec : s->timeout_start_usec;
1618
r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true, k, &s->timer_watch);
1624
if ((s->deserialized_state == SERVICE_START &&
1625
(s->type == SERVICE_FORKING ||
1626
s->type == SERVICE_DBUS ||
1627
s->type == SERVICE_ONESHOT ||
1628
s->type == SERVICE_NOTIFY)) ||
1629
s->deserialized_state == SERVICE_START_POST ||
1630
s->deserialized_state == SERVICE_RUNNING ||
1631
s->deserialized_state == SERVICE_RELOAD ||
1632
s->deserialized_state == SERVICE_STOP ||
1633
s->deserialized_state == SERVICE_STOP_SIGTERM ||
1634
s->deserialized_state == SERVICE_STOP_SIGKILL)
1635
if (s->main_pid > 0) {
1636
r = unit_watch_pid(UNIT(s), s->main_pid);
1641
if (s->deserialized_state == SERVICE_START_PRE ||
1642
s->deserialized_state == SERVICE_START ||
1643
s->deserialized_state == SERVICE_START_POST ||
1644
s->deserialized_state == SERVICE_RELOAD ||
1645
s->deserialized_state == SERVICE_STOP ||
1646
s->deserialized_state == SERVICE_STOP_SIGTERM ||
1647
s->deserialized_state == SERVICE_STOP_SIGKILL ||
1648
s->deserialized_state == SERVICE_STOP_POST ||
1649
s->deserialized_state == SERVICE_FINAL_SIGTERM ||
1650
s->deserialized_state == SERVICE_FINAL_SIGKILL)
1651
if (s->control_pid > 0) {
1652
r = unit_watch_pid(UNIT(s), s->control_pid);
1657
if (s->deserialized_state == SERVICE_START_POST ||
1658
s->deserialized_state == SERVICE_RUNNING)
1659
service_handle_watchdog(s);
1661
service_set_state(s, s->deserialized_state);
1666
static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1670
unsigned rn_fds = 0;
1677
if (s->socket_fd >= 0)
1680
SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
1685
if (u->type != UNIT_SOCKET)
1690
r = socket_collect_fds(sock, &cfds, &cn_fds);
1703
t = new(int, rn_fds+cn_fds);
1710
memcpy(t, rfds, rn_fds * sizeof(int));
1711
memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
1716
rn_fds = rn_fds+cn_fds;
1731
static int service_spawn(
1736
bool apply_permissions,
1738
bool apply_tty_stdin,
1739
bool set_notify_socket,
1746
_cleanup_free_ int *fdsbuf = NULL;
1747
unsigned n_fds = 0, n_env = 0;
1748
_cleanup_strv_free_ char
1749
**argv = NULL, **final_env = NULL, **our_env = NULL;
1756
s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1757
s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1758
s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1760
if (s->socket_fd >= 0) {
1761
fds = &s->socket_fd;
1764
r = service_collect_fds(s, &fdsbuf, &n_fds);
1772
if (timeout && s->timeout_start_usec) {
1773
r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true,
1774
s->timeout_start_usec, &s->timer_watch);
1778
unit_unwatch_timer(UNIT(s), &s->timer_watch);
1780
argv = unit_full_printf_strv(UNIT(s), c->argv);
1786
our_env = new0(char*, 5);
1792
if (set_notify_socket)
1793
if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
1798
if (s->main_pid > 0)
1799
if (asprintf(our_env + n_env++, "MAINPID=%lu", (unsigned long) s->main_pid) < 0) {
1804
if (s->watchdog_usec > 0)
1805
if (asprintf(our_env + n_env++, "WATCHDOG_USEC=%llu", (unsigned long long) s->watchdog_usec) < 0) {
1810
if (s->meta.manager->running_as != SYSTEMD_SYSTEM)
1811
if (asprintf(our_env + n_env++, "MANAGERPID=%lu", (unsigned long) getpid()) < 0) {
1816
final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
1830
UNIT(s)->manager->confirm_spawn,
1831
UNIT(s)->cgroup_bondings,
1832
UNIT(s)->cgroup_attributes,
1833
is_control ? "control" : NULL,
1835
s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
1840
r = unit_watch_pid(UNIT(s), pid);
1842
/* FIXME: we need to do something here */
1851
unit_unwatch_timer(UNIT(s), &s->timer_watch);
1856
static int main_pid_good(Service *s) {
1859
/* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1862
/* If we know the pid file, then lets just check if it is
1864
if (s->main_pid_known) {
1866
/* If it's an alien child let's check if it is still
1868
if (s->main_pid_alien)
1869
return kill(s->main_pid, 0) >= 0 || errno != ESRCH;
1871
/* .. otherwise assume we'll get a SIGCHLD for it,
1872
* which we really should wait for to collect exit
1873
* status and code */
1874
return s->main_pid > 0;
1877
/* We don't know the pid */
1881
_pure_ static int control_pid_good(Service *s) {
1884
return s->control_pid > 0;
1887
static int cgroup_good(Service *s) {
1892
r = cgroup_bonding_is_empty_list(UNIT(s)->cgroup_bondings);
1899
static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
1903
if (f != SERVICE_SUCCESS)
1906
service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1908
if (allow_restart &&
1909
!s->forbid_restart &&
1910
(s->restart == SERVICE_RESTART_ALWAYS ||
1911
(s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1912
(s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
1913
(s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
1914
s->result == SERVICE_FAILURE_CORE_DUMP))) &&
1915
(s->result != SERVICE_FAILURE_EXIT_CODE ||
1916
!set_contains(s->restart_ignore_status.code, INT_TO_PTR(s->main_exec_status.status))) &&
1917
(s->result != SERVICE_FAILURE_SIGNAL ||
1918
!set_contains(s->restart_ignore_status.signal, INT_TO_PTR(s->main_exec_status.status)))
1921
r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true, s->restart_usec, &s->timer_watch);
1925
service_set_state(s, SERVICE_AUTO_RESTART);
1928
s->forbid_restart = false;
1930
/* we want fresh tmpdirs in case service is started again immediately */
1931
exec_context_tmp_dirs_done(&s->exec_context);
1936
log_warning_unit(UNIT(s)->id,
1937
"%s failed to run install restart timer: %s",
1938
UNIT(s)->id, strerror(-r));
1939
service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
1942
static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
1944
static void service_enter_stop_post(Service *s, ServiceResult f) {
1948
if (f != SERVICE_SUCCESS)
1951
service_unwatch_control_pid(s);
1953
s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1954
if (s->control_command) {
1955
s->control_command_id = SERVICE_EXEC_STOP_POST;
1957
r = service_spawn(s,
1961
!s->permissions_start_only,
1962
!s->root_directory_start_only,
1971
service_set_state(s, SERVICE_STOP_POST);
1973
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
1978
log_warning_unit(UNIT(s)->id,
1979
"%s failed to run 'stop-post' task: %s",
1980
UNIT(s)->id, strerror(-r));
1981
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
1984
static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
1989
if (f != SERVICE_SUCCESS)
1992
r = unit_kill_context(
1995
state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
2003
if (s->timeout_stop_usec > 0) {
2004
r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true,
2005
s->timeout_stop_usec, &s->timer_watch);
2010
service_set_state(s, state);
2011
} else if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
2012
service_enter_stop_post(s, SERVICE_SUCCESS);
2014
service_enter_dead(s, SERVICE_SUCCESS, true);
2019
log_warning_unit(UNIT(s)->id,
2020
"%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
2022
if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
2023
service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
2025
service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2028
static void service_enter_stop(Service *s, ServiceResult f) {
2033
if (f != SERVICE_SUCCESS)
2036
service_unwatch_control_pid(s);
2038
s->control_command = s->exec_command[SERVICE_EXEC_STOP];
2039
if (s->control_command) {
2040
s->control_command_id = SERVICE_EXEC_STOP;
2042
r = service_spawn(s,
2046
!s->permissions_start_only,
2047
!s->root_directory_start_only,
2055
service_set_state(s, SERVICE_STOP);
2057
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2062
log_warning_unit(UNIT(s)->id,
2063
"%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
2064
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2067
static void service_enter_running(Service *s, ServiceResult f) {
2068
int main_pid_ok, cgroup_ok;
2071
if (f != SERVICE_SUCCESS)
2074
main_pid_ok = main_pid_good(s);
2075
cgroup_ok = cgroup_good(s);
2077
if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
2078
(s->bus_name_good || s->type != SERVICE_DBUS))
2079
service_set_state(s, SERVICE_RUNNING);
2080
else if (s->remain_after_exit)
2081
service_set_state(s, SERVICE_EXITED);
2083
service_enter_stop(s, SERVICE_SUCCESS);
2086
static void service_enter_start_post(Service *s) {
2090
service_unwatch_control_pid(s);
2092
if (s->watchdog_usec > 0)
2093
service_reset_watchdog(s);
2095
s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
2096
if (s->control_command) {
2097
s->control_command_id = SERVICE_EXEC_START_POST;
2099
r = service_spawn(s,
2103
!s->permissions_start_only,
2104
!s->root_directory_start_only,
2112
service_set_state(s, SERVICE_START_POST);
2114
service_enter_running(s, SERVICE_SUCCESS);
2119
log_warning_unit(UNIT(s)->id,
2120
"%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
2121
service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2124
static void service_enter_start(Service *s) {
2131
assert(s->exec_command[SERVICE_EXEC_START]);
2132
assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
2134
if (s->type == SERVICE_FORKING)
2135
service_unwatch_control_pid(s);
2137
service_unwatch_main_pid(s);
2139
/* We want to ensure that nobody leaks processes from
2140
* START_PRE here, so let's go on a killing spree, People
2141
* should not spawn long running processes from START_PRE. */
2142
cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, SIGKILL, true, true, NULL, "control");
2144
if (s->type == SERVICE_FORKING) {
2145
s->control_command_id = SERVICE_EXEC_START;
2146
c = s->control_command = s->exec_command[SERVICE_EXEC_START];
2148
s->main_command = NULL;
2150
s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2151
s->control_command = NULL;
2153
c = s->main_command = s->exec_command[SERVICE_EXEC_START];
2156
r = service_spawn(s,
2158
s->type == SERVICE_FORKING || s->type == SERVICE_DBUS ||
2159
s->type == SERVICE_NOTIFY || s->type == SERVICE_ONESHOT,
2164
s->notify_access != NOTIFY_NONE,
2170
if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
2171
/* For simple services we immediately start
2172
* the START_POST binaries. */
2174
service_set_main_pid(s, pid);
2175
service_enter_start_post(s);
2177
} else if (s->type == SERVICE_FORKING) {
2179
/* For forking services we wait until the start
2180
* process exited. */
2182
s->control_pid = pid;
2183
service_set_state(s, SERVICE_START);
2185
} else if (s->type == SERVICE_ONESHOT ||
2186
s->type == SERVICE_DBUS ||
2187
s->type == SERVICE_NOTIFY) {
2189
/* For oneshot services we wait until the start
2190
* process exited, too, but it is our main process. */
2192
/* For D-Bus services we know the main pid right away,
2193
* but wait for the bus name to appear on the
2194
* bus. Notify services are similar. */
2196
service_set_main_pid(s, pid);
2197
service_set_state(s, SERVICE_START);
2199
assert_not_reached("Unknown service type");
2204
log_warning_unit(UNIT(s)->id,
2205
"%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
2206
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2209
static void service_enter_start_pre(Service *s) {
2214
service_unwatch_control_pid(s);
2216
s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
2217
if (s->control_command) {
2219
/* Before we start anything, let's clear up what might
2220
* be left from previous runs. */
2221
cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, SIGKILL,
2222
true,true, NULL, "control");
2224
s->control_command_id = SERVICE_EXEC_START_PRE;
2226
r = service_spawn(s,
2230
!s->permissions_start_only,
2231
!s->root_directory_start_only,
2239
service_set_state(s, SERVICE_START_PRE);
2241
service_enter_start(s);
2246
log_warning_unit(UNIT(s)->id,
2247
"%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
2248
service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2251
static void service_enter_restart(Service *s) {
2256
dbus_error_init(&error);
2258
if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
2259
/* Don't restart things if we are going down anyway */
2260
log_info_unit(UNIT(s)->id,
2261
"Stop job pending for unit, delaying automatic restart.");
2263
r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true, s->restart_usec, &s->timer_watch);
2270
/* Any units that are bound to this service must also be
2271
* restarted. We use JOB_RESTART (instead of the more obvious
2272
* JOB_START) here so that those dependency jobs will be added
2274
r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
2278
/* Note that we stay in the SERVICE_AUTO_RESTART state here,
2279
* it will be canceled as part of the service_stop() call that
2280
* is executed as part of JOB_RESTART. */
2282
log_debug_unit(UNIT(s)->id,
2283
"%s scheduled restart job.", UNIT(s)->id);
2287
log_warning_unit(UNIT(s)->id,
2288
"%s failed to schedule restart job: %s",
2289
UNIT(s)->id, bus_error(&error, -r));
2290
service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
2292
dbus_error_free(&error);
2295
static void service_enter_reload(Service *s) {
2300
service_unwatch_control_pid(s);
2302
s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2303
if (s->control_command) {
2304
s->control_command_id = SERVICE_EXEC_RELOAD;
2306
r = service_spawn(s,
2310
!s->permissions_start_only,
2311
!s->root_directory_start_only,
2319
service_set_state(s, SERVICE_RELOAD);
2321
service_enter_running(s, SERVICE_SUCCESS);
2326
log_warning_unit(UNIT(s)->id,
2327
"%s failed to run 'reload' task: %s",
2328
UNIT(s)->id, strerror(-r));
2329
s->reload_result = SERVICE_FAILURE_RESOURCES;
2330
service_enter_running(s, SERVICE_SUCCESS);
2333
static void service_run_next_control(Service *s) {
2337
assert(s->control_command);
2338
assert(s->control_command->command_next);
2340
assert(s->control_command_id != SERVICE_EXEC_START);
2342
s->control_command = s->control_command->command_next;
2343
service_unwatch_control_pid(s);
2345
r = service_spawn(s,
2349
!s->permissions_start_only,
2350
!s->root_directory_start_only,
2351
s->control_command_id == SERVICE_EXEC_START_PRE ||
2352
s->control_command_id == SERVICE_EXEC_STOP_POST,
2362
log_warning_unit(UNIT(s)->id,
2363
"%s failed to run next control task: %s",
2364
UNIT(s)->id, strerror(-r));
2366
if (s->state == SERVICE_START_PRE)
2367
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2368
else if (s->state == SERVICE_STOP)
2369
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2370
else if (s->state == SERVICE_STOP_POST)
2371
service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2372
else if (s->state == SERVICE_RELOAD) {
2373
s->reload_result = SERVICE_FAILURE_RESOURCES;
2374
service_enter_running(s, SERVICE_SUCCESS);
2376
service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2379
static void service_run_next_main(Service *s) {
2384
assert(s->main_command);
2385
assert(s->main_command->command_next);
2386
assert(s->type == SERVICE_ONESHOT);
2388
s->main_command = s->main_command->command_next;
2389
service_unwatch_main_pid(s);
2391
r = service_spawn(s,
2398
s->notify_access != NOTIFY_NONE,
2404
service_set_main_pid(s, pid);
2409
log_warning_unit(UNIT(s)->id,
2410
"%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
2411
service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2414
static int service_start_limit_test(Service *s) {
2417
if (ratelimit_test(&s->start_limit))
2420
switch (s->start_limit_action) {
2422
case SERVICE_START_LIMIT_NONE:
2423
log_warning_unit(UNIT(s)->id,
2424
"%s start request repeated too quickly, refusing to start.",
2428
case SERVICE_START_LIMIT_REBOOT: {
2432
dbus_error_init(&error);
2434
log_warning_unit(UNIT(s)->id,
2435
"%s start request repeated too quickly, rebooting.", UNIT(s)->id);
2437
r = manager_add_job_by_name(UNIT(s)->manager, JOB_START,
2438
SPECIAL_REBOOT_TARGET, JOB_REPLACE,
2439
true, &error, NULL);
2441
log_error_unit(UNIT(s)->id,
2442
"Failed to reboot: %s.", bus_error(&error, r));
2443
dbus_error_free(&error);
2449
case SERVICE_START_LIMIT_REBOOT_FORCE:
2450
log_warning_unit(UNIT(s)->id,
2451
"%s start request repeated too quickly, forcibly rebooting.", UNIT(s)->id);
2452
UNIT(s)->manager->exit_code = MANAGER_REBOOT;
2455
case SERVICE_START_LIMIT_REBOOT_IMMEDIATE:
2456
log_warning_unit(UNIT(s)->id,
2457
"%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id);
2459
reboot(RB_AUTOBOOT);
2463
log_error_unit(UNIT(s)->id,
2464
"start limit action=%i", s->start_limit_action);
2465
assert_not_reached("Unknown StartLimitAction.");
2471
static int service_start(Unit *u) {
2472
Service *s = SERVICE(u);
2477
/* We cannot fulfill this request right now, try again later
2479
if (s->state == SERVICE_STOP ||
2480
s->state == SERVICE_STOP_SIGTERM ||
2481
s->state == SERVICE_STOP_SIGKILL ||
2482
s->state == SERVICE_STOP_POST ||
2483
s->state == SERVICE_FINAL_SIGTERM ||
2484
s->state == SERVICE_FINAL_SIGKILL)
2487
/* Already on it! */
2488
if (s->state == SERVICE_START_PRE ||
2489
s->state == SERVICE_START ||
2490
s->state == SERVICE_START_POST)
2493
/* A service that will be restarted must be stopped first to
2494
* trigger BindsTo and/or OnFailure dependencies. If a user
2495
* does not want to wait for the holdoff time to elapse, the
2496
* service should be manually restarted, not started. We
2497
* simply return EAGAIN here, so that any start jobs stay
2498
* queued, and assume that the auto restart timer will
2499
* eventually trigger the restart. */
2500
if (s->state == SERVICE_AUTO_RESTART)
2503
assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
2505
/* Make sure we don't enter a busy loop of some kind. */
2506
r = service_start_limit_test(s);
2508
service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
2512
s->result = SERVICE_SUCCESS;
2513
s->reload_result = SERVICE_SUCCESS;
2514
s->main_pid_known = false;
2515
s->main_pid_alien = false;
2516
s->forbid_restart = false;
2518
service_enter_start_pre(s);
2522
static int service_stop(Unit *u) {
2523
Service *s = SERVICE(u);
2527
/* Don't create restart jobs from here. */
2528
s->forbid_restart = true;
2531
if (s->state == SERVICE_STOP ||
2532
s->state == SERVICE_STOP_SIGTERM ||
2533
s->state == SERVICE_STOP_SIGKILL ||
2534
s->state == SERVICE_STOP_POST ||
2535
s->state == SERVICE_FINAL_SIGTERM ||
2536
s->state == SERVICE_FINAL_SIGKILL)
2539
/* A restart will be scheduled or is in progress. */
2540
if (s->state == SERVICE_AUTO_RESTART) {
2541
service_set_state(s, SERVICE_DEAD);
2545
/* If there's already something running we go directly into
2547
if (s->state == SERVICE_START_PRE ||
2548
s->state == SERVICE_START ||
2549
s->state == SERVICE_START_POST ||
2550
s->state == SERVICE_RELOAD) {
2551
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2555
assert(s->state == SERVICE_RUNNING ||
2556
s->state == SERVICE_EXITED);
2558
service_enter_stop(s, SERVICE_SUCCESS);
2562
static int service_reload(Unit *u) {
2563
Service *s = SERVICE(u);
2567
assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
2569
service_enter_reload(s);
2573
_pure_ static bool service_can_reload(Unit *u) {
2574
Service *s = SERVICE(u);
2578
return !!s->exec_command[SERVICE_EXEC_RELOAD];
2581
static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2582
Service *s = SERVICE(u);
2588
unit_serialize_item(u, f, "state", service_state_to_string(s->state));
2589
unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2590
unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
2592
if (s->control_pid > 0)
2593
unit_serialize_item_format(u, f, "control-pid", "%lu",
2594
(unsigned long) s->control_pid);
2596
if (s->main_pid_known && s->main_pid > 0)
2597
unit_serialize_item_format(u, f, "main-pid", "%lu", (unsigned long) s->main_pid);
2599
unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
2602
unit_serialize_item(u, f, "status-text", s->status_text);
2604
/* FIXME: There's a minor uncleanliness here: if there are
2605
* multiple commands attached here, we will start from the
2606
* first one again */
2607
if (s->control_command_id >= 0)
2608
unit_serialize_item(u, f, "control-command",
2609
service_exec_command_to_string(s->control_command_id));
2611
if (s->socket_fd >= 0) {
2614
if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
2617
unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2620
if (s->main_exec_status.pid > 0) {
2621
unit_serialize_item_format(u, f, "main-exec-status-pid", "%lu",
2622
(unsigned long) s->main_exec_status.pid);
2623
dual_timestamp_serialize(f, "main-exec-status-start",
2624
&s->main_exec_status.start_timestamp);
2625
dual_timestamp_serialize(f, "main-exec-status-exit",
2626
&s->main_exec_status.exit_timestamp);
2628
if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
2629
unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
2630
s->main_exec_status.code);
2631
unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
2632
s->main_exec_status.status);
2635
if (dual_timestamp_is_set(&s->watchdog_timestamp))
2636
dual_timestamp_serialize(f, "watchdog-timestamp",
2637
&s->watchdog_timestamp);
2639
if (s->exec_context.tmp_dir)
2640
unit_serialize_item(u, f, "tmp-dir", s->exec_context.tmp_dir);
2642
if (s->exec_context.var_tmp_dir)
2643
unit_serialize_item(u, f, "var-tmp-dir", s->exec_context.var_tmp_dir);
2648
static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2649
Service *s = SERVICE(u);
2656
if (streq(key, "state")) {
2659
state = service_state_from_string(value);
2661
log_debug_unit(u->id, "Failed to parse state value %s", value);
2663
s->deserialized_state = state;
2664
} else if (streq(key, "result")) {
2667
f = service_result_from_string(value);
2669
log_debug_unit(u->id, "Failed to parse result value %s", value);
2670
else if (f != SERVICE_SUCCESS)
2673
} else if (streq(key, "reload-result")) {
2676
f = service_result_from_string(value);
2678
log_debug_unit(u->id, "Failed to parse reload result value %s", value);
2679
else if (f != SERVICE_SUCCESS)
2680
s->reload_result = f;
2682
} else if (streq(key, "control-pid")) {
2685
if (parse_pid(value, &pid) < 0)
2686
log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
2688
s->control_pid = pid;
2689
} else if (streq(key, "main-pid")) {
2692
if (parse_pid(value, &pid) < 0)
2693
log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
2695
service_set_main_pid(s, (pid_t) pid);
2696
} else if (streq(key, "main-pid-known")) {
2699
b = parse_boolean(value);
2701
log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
2703
s->main_pid_known = b;
2704
} else if (streq(key, "status-text")) {
2711
free(s->status_text);
2715
} else if (streq(key, "control-command")) {
2716
ServiceExecCommand id;
2718
id = service_exec_command_from_string(value);
2720
log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
2722
s->control_command_id = id;
2723
s->control_command = s->exec_command[id];
2725
} else if (streq(key, "socket-fd")) {
2728
if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2729
log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
2732
if (s->socket_fd >= 0)
2733
close_nointr_nofail(s->socket_fd);
2734
s->socket_fd = fdset_remove(fds, fd);
2736
} else if (streq(key, "main-exec-status-pid")) {
2739
if (parse_pid(value, &pid) < 0)
2740
log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
2742
s->main_exec_status.pid = pid;
2743
} else if (streq(key, "main-exec-status-code")) {
2746
if (safe_atoi(value, &i) < 0)
2747
log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
2749
s->main_exec_status.code = i;
2750
} else if (streq(key, "main-exec-status-status")) {
2753
if (safe_atoi(value, &i) < 0)
2754
log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
2756
s->main_exec_status.status = i;
2757
} else if (streq(key, "main-exec-status-start"))
2758
dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2759
else if (streq(key, "main-exec-status-exit"))
2760
dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
2761
else if (streq(key, "watchdog-timestamp"))
2762
dual_timestamp_deserialize(value, &s->watchdog_timestamp);
2763
else if (streq(key, "tmp-dir")) {
2770
s->exec_context.tmp_dir = t;
2771
} else if (streq(key, "var-tmp-dir")) {
2778
s->exec_context.var_tmp_dir = t;
2780
log_debug_unit(u->id, "Unknown serialization key '%s'", key);
2785
_pure_ static UnitActiveState service_active_state(Unit *u) {
2786
const UnitActiveState *table;
2790
table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2792
return table[SERVICE(u)->state];
2795
static const char *service_sub_state_to_string(Unit *u) {
2798
return service_state_to_string(SERVICE(u)->state);
2801
static bool service_check_gc(Unit *u) {
2802
Service *s = SERVICE(u);
2806
/* Never clean up services that still have a process around,
2807
* even if the service is formally dead. */
2808
if (cgroup_good(s) > 0 ||
2809
main_pid_good(s) > 0 ||
2810
control_pid_good(s) > 0)
2813
#ifdef HAVE_SYSV_COMPAT
2821
_pure_ static bool service_check_snapshot(Unit *u) {
2822
Service *s = SERVICE(u);
2826
return !s->got_socket_fd;
2829
static int service_retry_pid_file(Service *s) {
2832
assert(s->pid_file);
2833
assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2835
r = service_load_pid_file(s, false);
2839
service_unwatch_pid_file(s);
2841
service_enter_running(s, SERVICE_SUCCESS);
2845
static int service_watch_pid_file(Service *s) {
2848
log_debug_unit(UNIT(s)->id,
2849
"Setting watch for %s's PID file %s",
2850
UNIT(s)->id, s->pid_file_pathspec->path);
2851
r = path_spec_watch(s->pid_file_pathspec, UNIT(s));
2855
/* the pidfile might have appeared just before we set the watch */
2856
log_debug_unit(UNIT(s)->id,
2857
"Trying to read %s's PID file %s in case it changed",
2858
UNIT(s)->id, s->pid_file_pathspec->path);
2859
service_retry_pid_file(s);
2863
log_error_unit(UNIT(s)->id,
2864
"Failed to set a watch for %s's PID file %s: %s",
2865
UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
2866
service_unwatch_pid_file(s);
2870
static int service_demand_pid_file(Service *s) {
2873
assert(s->pid_file);
2874
assert(!s->pid_file_pathspec);
2876
ps = new0(PathSpec, 1);
2880
ps->path = strdup(s->pid_file);
2886
path_kill_slashes(ps->path);
2888
/* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2889
* keep their PID file open all the time. */
2890
ps->type = PATH_MODIFIED;
2891
ps->inotify_fd = -1;
2893
s->pid_file_pathspec = ps;
2895
return service_watch_pid_file(s);
2898
static void service_fd_event(Unit *u, int fd, uint32_t events, Watch *w) {
2899
Service *s = SERVICE(u);
2903
assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2904
assert(s->pid_file_pathspec);
2905
assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
2907
log_debug_unit(u->id, "inotify event for %s", u->id);
2909
if (path_spec_fd_event(s->pid_file_pathspec, events) < 0)
2912
if (service_retry_pid_file(s) == 0)
2915
if (service_watch_pid_file(s) < 0)
2920
service_unwatch_pid_file(s);
2921
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2924
static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2925
Service *s = SERVICE(u);
2931
if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2932
is_clean_exit_lsb(code, status, &s->success_status))
2933
f = SERVICE_SUCCESS;
2934
else if (code == CLD_EXITED)
2935
f = SERVICE_FAILURE_EXIT_CODE;
2936
else if (code == CLD_KILLED)
2937
f = SERVICE_FAILURE_SIGNAL;
2938
else if (code == CLD_DUMPED)
2939
f = SERVICE_FAILURE_CORE_DUMP;
2941
assert_not_reached("Unknown code");
2943
if (s->main_pid == pid) {
2944
/* Forking services may occasionally move to a new PID.
2945
* As long as they update the PID file before exiting the old
2946
* PID, they're fine. */
2947
if (service_load_pid_file(s, false) == 0)
2951
exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
2953
if (s->main_command) {
2954
/* If this is not a forking service than the
2955
* main process got started and hence we copy
2956
* the exit status so that it is recorded both
2957
* as main and as control process exit
2960
s->main_command->exec_status = s->main_exec_status;
2962
if (s->main_command->ignore)
2963
f = SERVICE_SUCCESS;
2964
} else if (s->exec_command[SERVICE_EXEC_START]) {
2966
/* If this is a forked process, then we should
2967
* ignore the return value if this was
2968
* configured for the starter process */
2970
if (s->exec_command[SERVICE_EXEC_START]->ignore)
2971
f = SERVICE_SUCCESS;
2974
log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2976
"MESSAGE=%s: main process exited, code=%s, status=%i/%s",
2977
u->id, sigchld_code_to_string(code), status,
2978
strna(code == CLD_EXITED
2979
? exit_status_to_string(status, EXIT_STATUS_FULL)
2980
: signal_to_string(status)),
2981
"EXIT_CODE=%s", sigchld_code_to_string(code),
2982
"EXIT_STATUS=%i", status,
2985
if (f != SERVICE_SUCCESS)
2988
if (s->main_command &&
2989
s->main_command->command_next &&
2990
f == SERVICE_SUCCESS) {
2992
/* There is another command to *
2993
* execute, so let's do that. */
2995
log_debug_unit(u->id,
2996
"%s running next main command for state %s",
2997
u->id, service_state_to_string(s->state));
2998
service_run_next_main(s);
3002
/* The service exited, so the service is officially
3004
s->main_command = NULL;
3008
case SERVICE_START_POST:
3009
case SERVICE_RELOAD:
3011
/* Need to wait until the operation is
3016
if (s->type == SERVICE_ONESHOT) {
3017
/* This was our main goal, so let's go on */
3018
if (f == SERVICE_SUCCESS)
3019
service_enter_start_post(s);
3021
service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3027
case SERVICE_RUNNING:
3028
service_enter_running(s, f);
3031
case SERVICE_STOP_SIGTERM:
3032
case SERVICE_STOP_SIGKILL:
3034
if (!control_pid_good(s))
3035
service_enter_stop_post(s, f);
3037
/* If there is still a control process, wait for that first */
3041
assert_not_reached("Uh, main process died at wrong time.");
3045
} else if (s->control_pid == pid) {
3049
if (s->control_command) {
3050
exec_status_exit(&s->control_command->exec_status,
3051
&s->exec_context, pid, code, status);
3053
if (s->control_command->ignore)
3054
f = SERVICE_SUCCESS;
3057
log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
3058
"%s: control process exited, code=%s status=%i",
3059
u->id, sigchld_code_to_string(code), status);
3061
if (f != SERVICE_SUCCESS)
3064
/* Immediately get rid of the cgroup, so that the
3065
* kernel doesn't delay the cgroup empty messages for
3066
* the service cgroup any longer than necessary */
3067
cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, SIGKILL,
3068
true, true, NULL, "control");
3070
if (s->control_command &&
3071
s->control_command->command_next &&
3072
f == SERVICE_SUCCESS) {
3074
/* There is another command to *
3075
* execute, so let's do that. */
3077
log_debug_unit(u->id,
3078
"%s running next control command for state %s",
3079
u->id, service_state_to_string(s->state));
3080
service_run_next_control(s);
3083
/* No further commands for this step, so let's
3084
* figure out what to do next */
3086
s->control_command = NULL;
3087
s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3089
log_debug_unit(u->id,
3090
"%s got final SIGCHLD for state %s",
3091
u->id, service_state_to_string(s->state));
3095
case SERVICE_START_PRE:
3096
if (f == SERVICE_SUCCESS)
3097
service_enter_start(s);
3099
service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3103
if (s->type != SERVICE_FORKING)
3104
/* Maybe spurious event due to a reload that changed the type? */
3107
if (f != SERVICE_SUCCESS) {
3108
service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3113
bool has_start_post;
3116
/* Let's try to load the pid file here if we can.
3117
* The PID file might actually be created by a START_POST
3118
* script. In that case don't worry if the loading fails. */
3120
has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3121
r = service_load_pid_file(s, !has_start_post);
3122
if (!has_start_post && r < 0) {
3123
r = service_demand_pid_file(s);
3124
if (r < 0 || !cgroup_good(s))
3125
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3129
service_search_main_pid(s);
3131
service_enter_start_post(s);
3134
case SERVICE_START_POST:
3135
if (f != SERVICE_SUCCESS) {
3136
service_enter_stop(s, f);
3143
r = service_load_pid_file(s, true);
3145
r = service_demand_pid_file(s);
3146
if (r < 0 || !cgroup_good(s))
3147
service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
3151
service_search_main_pid(s);
3153
service_enter_running(s, SERVICE_SUCCESS);
3156
case SERVICE_RELOAD:
3157
if (f == SERVICE_SUCCESS) {
3158
service_load_pid_file(s, true);
3159
service_search_main_pid(s);
3162
s->reload_result = f;
3163
service_enter_running(s, SERVICE_SUCCESS);
3167
service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
3170
case SERVICE_STOP_SIGTERM:
3171
case SERVICE_STOP_SIGKILL:
3172
if (main_pid_good(s) <= 0)
3173
service_enter_stop_post(s, f);
3175
/* If there is still a service
3176
* process around, wait until
3177
* that one quit, too */
3180
case SERVICE_STOP_POST:
3181
case SERVICE_FINAL_SIGTERM:
3182
case SERVICE_FINAL_SIGKILL:
3183
service_enter_dead(s, f, true);
3187
assert_not_reached("Uh, control process died at wrong time.");
3192
/* Notify clients about changed exit status */
3193
unit_add_to_dbus_queue(u);
3196
static void service_timer_event(Unit *u, uint64_t elapsed, Watch* w) {
3197
Service *s = SERVICE(u);
3200
assert(elapsed == 1);
3202
if (w == &s->watchdog_watch) {
3203
service_handle_watchdog(s);
3207
assert(w == &s->timer_watch);
3211
case SERVICE_START_PRE:
3213
log_warning_unit(u->id,
3214
"%s operation timed out. Terminating.", u->id);
3215
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3218
case SERVICE_START_POST:
3219
log_warning_unit(u->id,
3220
"%s operation timed out. Stopping.", u->id);
3221
service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
3224
case SERVICE_RELOAD:
3225
log_warning_unit(u->id,
3226
"%s operation timed out. Stopping.", u->id);
3227
s->reload_result = SERVICE_FAILURE_TIMEOUT;
3228
service_enter_running(s, SERVICE_SUCCESS);
3232
log_warning_unit(u->id,
3233
"%s stopping timed out. Terminating.", u->id);
3234
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3237
case SERVICE_STOP_SIGTERM:
3238
if (s->kill_context.send_sigkill) {
3239
log_warning_unit(u->id,
3240
"%s stopping timed out. Killing.", u->id);
3241
service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3243
log_warning_unit(u->id,
3244
"%s stopping timed out. Skipping SIGKILL.", u->id);
3245
service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3250
case SERVICE_STOP_SIGKILL:
3251
/* Uh, we sent a SIGKILL and it is still not gone?
3252
* Must be something we cannot kill, so let's just be
3253
* weirded out and continue */
3255
log_warning_unit(u->id,
3256
"%s still around after SIGKILL. Ignoring.", u->id);
3257
service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3260
case SERVICE_STOP_POST:
3261
log_warning_unit(u->id,
3262
"%s stopping timed out (2). Terminating.", u->id);
3263
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3266
case SERVICE_FINAL_SIGTERM:
3267
if (s->kill_context.send_sigkill) {
3268
log_warning_unit(u->id,
3269
"%s stopping timed out (2). Killing.", u->id);
3270
service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3272
log_warning_unit(u->id,
3273
"%s stopping timed out (2). Skipping SIGKILL. Entering failed mode.",
3275
service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
3280
case SERVICE_FINAL_SIGKILL:
3281
log_warning_unit(u->id,
3282
"%s still around after SIGKILL (2). Entering failed mode.", u->id);
3283
service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
3286
case SERVICE_AUTO_RESTART:
3287
log_info_unit(u->id,
3288
"%s holdoff time over, scheduling restart.", u->id);
3289
service_enter_restart(s);
3293
assert_not_reached("Timeout at wrong time.");
3297
static void service_cgroup_notify_event(Unit *u) {
3298
Service *s = SERVICE(u);
3302
log_debug_unit(u->id,
3303
"%s: cgroup is empty", u->id);
3307
/* Waiting for SIGCHLD is usually more interesting,
3308
* because it includes return codes/signals. Which is
3309
* why we ignore the cgroup events for most cases,
3310
* except when we don't know pid which to expect the
3314
case SERVICE_START_POST:
3315
/* If we were hoping for the daemon to write its PID file,
3316
* we can give up now. */
3317
if (s->pid_file_pathspec) {
3318
log_warning_unit(u->id,
3319
"%s never wrote its PID file. Failing.", UNIT(s)->id);
3320
service_unwatch_pid_file(s);
3321
if (s->state == SERVICE_START)
3322
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3324
service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
3328
case SERVICE_RUNNING:
3329
/* service_enter_running() will figure out what to do */
3330
service_enter_running(s, SERVICE_SUCCESS);
3333
case SERVICE_STOP_SIGTERM:
3334
case SERVICE_STOP_SIGKILL:
3336
if (main_pid_good(s) <= 0 && !control_pid_good(s))
3337
service_enter_stop_post(s, SERVICE_SUCCESS);
3341
case SERVICE_FINAL_SIGTERM:
3342
case SERVICE_FINAL_SIGKILL:
3343
if (main_pid_good(s) <= 0 && !control_pid_good(s))
3344
service_enter_dead(s, SERVICE_SUCCESS, true);
3353
static void service_notify_message(Unit *u, pid_t pid, char **tags) {
3354
Service *s = SERVICE(u);
3359
if (s->notify_access == NOTIFY_NONE) {
3360
log_warning_unit(u->id,
3361
"%s: Got notification message from PID %lu, but reception is disabled.",
3362
u->id, (unsigned long) pid);
3366
if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
3367
log_warning_unit(u->id,
3368
"%s: Got notification message from PID %lu, but reception only permitted for PID %lu",
3369
u->id, (unsigned long) pid, (unsigned long) s->main_pid);
3373
log_debug_unit(u->id,
3374
"%s: Got message", u->id);
3376
/* Interpret MAINPID= */
3377
if ((e = strv_find_prefix(tags, "MAINPID=")) &&
3378
(s->state == SERVICE_START ||
3379
s->state == SERVICE_START_POST ||
3380
s->state == SERVICE_RUNNING ||
3381
s->state == SERVICE_RELOAD)) {
3383
if (parse_pid(e + 8, &pid) < 0)
3384
log_warning_unit(u->id,
3385
"Failed to parse notification message %s", e);
3387
log_debug_unit(u->id,
3388
"%s: got %s", u->id, e);
3389
service_set_main_pid(s, pid);
3393
/* Interpret READY= */
3394
if (s->type == SERVICE_NOTIFY &&
3395
s->state == SERVICE_START &&
3396
strv_find(tags, "READY=1")) {
3397
log_debug_unit(u->id,
3398
"%s: got READY=1", u->id);
3400
service_enter_start_post(s);
3403
/* Interpret STATUS= */
3404
e = strv_find_prefix(tags, "STATUS=");
3410
if (!utf8_is_valid(e+7)) {
3411
log_warning_unit(u->id,
3412
"Status message in notification is not UTF-8 clean.");
3418
log_error_unit(u->id,
3419
"Failed to allocate string.");
3423
log_debug_unit(u->id,
3424
"%s: got %s", u->id, e);
3426
free(s->status_text);
3429
free(s->status_text);
3430
s->status_text = NULL;
3434
if (strv_find(tags, "WATCHDOG=1")) {
3435
log_debug_unit(u->id,
3436
"%s: got WATCHDOG=1", u->id);
3437
if (dual_timestamp_is_set(&s->watchdog_timestamp))
3438
service_reset_watchdog(s);
3441
/* Notify clients about changed status or main pid */
3442
unit_add_to_dbus_queue(u);
3445
#ifdef HAVE_SYSV_COMPAT
3447
static int service_enumerate(Manager *m) {
3450
_cleanup_closedir_ DIR *d = NULL;
3451
_cleanup_free_ char *path = NULL, *fpath = NULL, *name = NULL;
3452
Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
3453
_cleanup_set_free_ Set *shutdown_services = NULL;
3460
if (m->running_as != SYSTEMD_SYSTEM)
3463
STRV_FOREACH(p, m->lookup_paths.sysvrcnd_path)
3464
for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
3468
path = strjoin(*p, "/", rcnd_table[i].path, NULL);
3479
if (errno != ENOENT)
3480
log_warning("opendir(%s) failed: %s", path, strerror(errno));
3485
while ((de = readdir(d))) {
3488
if (ignore_file(de->d_name))
3491
if (de->d_name[0] != 'S' && de->d_name[0] != 'K')
3494
if (strlen(de->d_name) < 4)
3497
a = undecchar(de->d_name[1]);
3498
b = undecchar(de->d_name[2]);
3504
fpath = strjoin(path, "/", de->d_name, NULL);
3510
if (access(fpath, X_OK) < 0) {
3512
if (errno != ENOENT)
3513
log_warning("access() failed on %s: %s", fpath, strerror(errno));
3519
name = sysv_translate_name(de->d_name + 3);
3525
r = manager_load_unit_prepare(m, name, NULL, NULL, &service);
3527
log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
3531
if (de->d_name[0] == 'S') {
3533
if (rcnd_table[i].type == RUNLEVEL_UP) {
3534
SERVICE(service)->sysv_start_priority_from_rcnd =
3535
MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
3537
SERVICE(service)->sysv_enabled = true;
3540
r = set_ensure_allocated(&runlevel_services[i],
3541
trivial_hash_func, trivial_compare_func);
3545
r = set_put(runlevel_services[i], service);
3549
} else if (de->d_name[0] == 'K' &&
3550
(rcnd_table[i].type == RUNLEVEL_DOWN)) {
3552
r = set_ensure_allocated(&shutdown_services,
3553
trivial_hash_func, trivial_compare_func);
3557
r = set_put(shutdown_services, service);
3564
/* Now we loaded all stubs and are aware of the lowest
3565
start-up priority for all services, not let's actually load
3566
the services, this will also tell us which services are
3567
actually native now */
3568
manager_dispatch_load_queue(m);
3570
/* If this is a native service, rely on native ways to pull in
3571
* a service, don't pull it in via sysv rcN.d links. */
3572
for (i = 0; i < ELEMENTSOF(rcnd_table); i ++)
3573
SET_FOREACH(service, runlevel_services[i], j) {
3574
service = unit_follow_merge(service);
3576
if (service->fragment_path)
3579
r = unit_add_two_dependencies_by_name_inverse(
3580
service, UNIT_AFTER, UNIT_WANTS,
3581
rcnd_table[i].target, NULL, true);
3586
/* We honour K links only for halt/reboot. For the normal
3587
* runlevels we assume the stop jobs will be implicitly added
3588
* by the core logic. Also, we don't really distinguish here
3589
* between the runlevels 0 and 6 and just add them to the
3590
* special shutdown target. */
3591
SET_FOREACH(service, shutdown_services, j) {
3592
service = unit_follow_merge(service);
3594
if (service->fragment_path)
3597
r = unit_add_two_dependencies_by_name(
3598
service, UNIT_BEFORE, UNIT_CONFLICTS,
3599
SPECIAL_SHUTDOWN_TARGET, NULL, true);
3608
for (i = 0; i < ELEMENTSOF(rcnd_table); i++)
3609
set_free(runlevel_services[i]);
3615
static void service_bus_name_owner_change(
3618
const char *old_owner,
3619
const char *new_owner) {
3621
Service *s = SERVICE(u);
3626
assert(streq(s->bus_name, name));
3627
assert(old_owner || new_owner);
3629
if (old_owner && new_owner)
3630
log_debug_unit(u->id,
3631
"%s's D-Bus name %s changed owner from %s to %s",
3632
u->id, name, old_owner, new_owner);
3634
log_debug_unit(u->id,
3635
"%s's D-Bus name %s no longer registered by %s",
3636
u->id, name, old_owner);
3638
log_debug_unit(u->id,
3639
"%s's D-Bus name %s now registered by %s",
3640
u->id, name, new_owner);
3642
s->bus_name_good = !!new_owner;
3644
if (s->type == SERVICE_DBUS) {
3646
/* service_enter_running() will figure out what to
3648
if (s->state == SERVICE_RUNNING)
3649
service_enter_running(s, SERVICE_SUCCESS);
3650
else if (s->state == SERVICE_START && new_owner)
3651
service_enter_start_post(s);
3653
} else if (new_owner &&
3655
(s->state == SERVICE_START ||
3656
s->state == SERVICE_START_POST ||
3657
s->state == SERVICE_RUNNING ||
3658
s->state == SERVICE_RELOAD)) {
3660
/* Try to acquire PID from bus service */
3661
log_debug_unit(u->id,
3662
"Trying to acquire PID from D-Bus name...");
3664
bus_query_pid(u->manager, name);
3668
static void service_bus_query_pid_done(
3673
Service *s = SERVICE(u);
3678
log_debug_unit(u->id,
3679
"%s's D-Bus name %s is now owned by process %u",
3680
u->id, name, (unsigned) pid);
3682
if (s->main_pid <= 0 &&
3683
(s->state == SERVICE_START ||
3684
s->state == SERVICE_START_POST ||
3685
s->state == SERVICE_RUNNING ||
3686
s->state == SERVICE_RELOAD))
3687
service_set_main_pid(s, pid);
3690
int service_set_socket_fd(Service *s, int fd, Socket *sock) {
3695
/* This is called by the socket code when instantiating a new
3696
* service for a stream socket and the socket needs to be
3699
if (UNIT(s)->load_state != UNIT_LOADED)
3702
if (s->socket_fd >= 0)
3705
if (s->state != SERVICE_DEAD)
3709
s->got_socket_fd = true;
3711
unit_ref_set(&s->accept_socket, UNIT(sock));
3713
return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
3716
static void service_reset_failed(Unit *u) {
3717
Service *s = SERVICE(u);
3721
if (s->state == SERVICE_FAILED)
3722
service_set_state(s, SERVICE_DEAD);
3724
s->result = SERVICE_SUCCESS;
3725
s->reload_result = SERVICE_SUCCESS;
3727
RATELIMIT_RESET(s->start_limit);
3730
static int service_kill(Unit *u, KillWho who, int signo, DBusError *error) {
3731
Service *s = SERVICE(u);
3732
return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
3735
static const char* const service_state_table[_SERVICE_STATE_MAX] = {
3736
[SERVICE_DEAD] = "dead",
3737
[SERVICE_START_PRE] = "start-pre",
3738
[SERVICE_START] = "start",
3739
[SERVICE_START_POST] = "start-post",
3740
[SERVICE_RUNNING] = "running",
3741
[SERVICE_EXITED] = "exited",
3742
[SERVICE_RELOAD] = "reload",
3743
[SERVICE_STOP] = "stop",
3744
[SERVICE_STOP_SIGTERM] = "stop-sigterm",
3745
[SERVICE_STOP_SIGKILL] = "stop-sigkill",
3746
[SERVICE_STOP_POST] = "stop-post",
3747
[SERVICE_FINAL_SIGTERM] = "final-sigterm",
3748
[SERVICE_FINAL_SIGKILL] = "final-sigkill",
3749
[SERVICE_FAILED] = "failed",
3750
[SERVICE_AUTO_RESTART] = "auto-restart",
3753
DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
3755
static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
3756
[SERVICE_RESTART_NO] = "no",
3757
[SERVICE_RESTART_ON_SUCCESS] = "on-success",
3758
[SERVICE_RESTART_ON_FAILURE] = "on-failure",
3759
[SERVICE_RESTART_ON_ABORT] = "on-abort",
3760
[SERVICE_RESTART_ALWAYS] = "always"
3763
DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3765
static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
3766
[SERVICE_SIMPLE] = "simple",
3767
[SERVICE_FORKING] = "forking",
3768
[SERVICE_ONESHOT] = "oneshot",
3769
[SERVICE_DBUS] = "dbus",
3770
[SERVICE_NOTIFY] = "notify",
3771
[SERVICE_IDLE] = "idle"
3774
DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3776
static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
3777
[SERVICE_EXEC_START_PRE] = "ExecStartPre",
3778
[SERVICE_EXEC_START] = "ExecStart",
3779
[SERVICE_EXEC_START_POST] = "ExecStartPost",
3780
[SERVICE_EXEC_RELOAD] = "ExecReload",
3781
[SERVICE_EXEC_STOP] = "ExecStop",
3782
[SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3785
DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3787
static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
3788
[NOTIFY_NONE] = "none",
3789
[NOTIFY_MAIN] = "main",
3790
[NOTIFY_ALL] = "all"
3793
DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
3795
static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3796
[SERVICE_SUCCESS] = "success",
3797
[SERVICE_FAILURE_RESOURCES] = "resources",
3798
[SERVICE_FAILURE_TIMEOUT] = "timeout",
3799
[SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3800
[SERVICE_FAILURE_SIGNAL] = "signal",
3801
[SERVICE_FAILURE_CORE_DUMP] = "core-dump",
3802
[SERVICE_FAILURE_WATCHDOG] = "watchdog",
3803
[SERVICE_FAILURE_START_LIMIT] = "start-limit"
3806
DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3808
static const char* const start_limit_action_table[_SERVICE_START_LIMIT_MAX] = {
3809
[SERVICE_START_LIMIT_NONE] = "none",
3810
[SERVICE_START_LIMIT_REBOOT] = "reboot",
3811
[SERVICE_START_LIMIT_REBOOT_FORCE] = "reboot-force",
3812
[SERVICE_START_LIMIT_REBOOT_IMMEDIATE] = "reboot-immediate"
3814
DEFINE_STRING_TABLE_LOOKUP(start_limit_action, StartLimitAction);
3816
const UnitVTable service_vtable = {
3817
.object_size = sizeof(Service),
3824
.exec_context_offset = offsetof(Service, exec_context),
3825
.exec_section = "Service",
3827
.init = service_init,
3828
.done = service_done,
3829
.load = service_load,
3831
.coldplug = service_coldplug,
3833
.dump = service_dump,
3835
.start = service_start,
3836
.stop = service_stop,
3837
.reload = service_reload,
3839
.can_reload = service_can_reload,
3841
.kill = service_kill,
3843
.serialize = service_serialize,
3844
.deserialize_item = service_deserialize_item,
3846
.active_state = service_active_state,
3847
.sub_state_to_string = service_sub_state_to_string,
3849
.check_gc = service_check_gc,
3850
.check_snapshot = service_check_snapshot,
3852
.sigchld_event = service_sigchld_event,
3853
.timer_event = service_timer_event,
3854
.fd_event = service_fd_event,
3856
.reset_failed = service_reset_failed,
3858
.cgroup_notify_empty = service_cgroup_notify_event,
3859
.notify_message = service_notify_message,
3861
.bus_name_owner_change = service_bus_name_owner_change,
3862
.bus_query_pid_done = service_bus_query_pid_done,
3864
.bus_interface = "org.freedesktop.systemd1.Service",
3865
.bus_message_handler = bus_service_message_handler,
3866
.bus_invalidating_properties = bus_service_invalidating_properties,
3868
#ifdef HAVE_SYSV_COMPAT
3869
.enumerate = service_enumerate,
3871
.status_message_formats = {
3872
.starting_stopping = {
3873
[0] = "Starting %s...",
3874
[1] = "Stopping %s...",
3876
.finished_start_job = {
3877
[JOB_DONE] = "Started %s.",
3878
[JOB_FAILED] = "Failed to start %s.",
3879
[JOB_DEPENDENCY] = "Dependency failed for %s.",
3880
[JOB_TIMEOUT] = "Timed out starting %s.",
3882
.finished_stop_job = {
3883
[JOB_DONE] = "Stopped %s.",
3884
[JOB_FAILED] = "Stopped (with error) %s.",
3885
[JOB_TIMEOUT] = "Timed out stopping %s.",