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 General Public License as published by
10
the Free Software Foundation; either version 2 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
General Public License for more details.
18
You should have received a copy of the GNU 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 "dbus-service.h"
38
#include "bus-errors.h"
39
#include "exit-status.h"
44
#ifdef HAVE_SYSV_COMPAT
46
#define DEFAULT_SYSV_TIMEOUT_USEC (5*USEC_PER_MINUTE)
48
typedef enum RunlevelType {
57
const RunlevelType type;
59
/* Standard SysV runlevels for start-up */
60
{ "rc1.d", SPECIAL_RESCUE_TARGET, RUNLEVEL_UP },
61
{ "rc2.d", SPECIAL_RUNLEVEL2_TARGET, RUNLEVEL_UP },
62
{ "rc3.d", SPECIAL_RUNLEVEL3_TARGET, RUNLEVEL_UP },
63
{ "rc4.d", SPECIAL_RUNLEVEL4_TARGET, RUNLEVEL_UP },
64
{ "rc5.d", SPECIAL_RUNLEVEL5_TARGET, RUNLEVEL_UP },
67
/* SUSE style boot.d */
68
{ "boot.d", SPECIAL_SYSINIT_TARGET, RUNLEVEL_SYSINIT },
71
#if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU) || defined(TARGET_ANGSTROM)
72
/* Debian style rcS.d */
73
{ "rcS.d", SPECIAL_SYSINIT_TARGET, RUNLEVEL_SYSINIT },
76
/* Standard SysV runlevels for shutdown */
77
{ "rc0.d", SPECIAL_POWEROFF_TARGET, RUNLEVEL_DOWN },
78
{ "rc6.d", SPECIAL_REBOOT_TARGET, RUNLEVEL_DOWN }
80
/* Note that the order here matters, as we read the
81
directories in this order, and we want to make sure that
82
sysv_start_priority is known when we first load the
83
unit. And that value we only know from S links. Hence
84
UP/SYSINIT must be read before DOWN */
87
#define RUNLEVELS_UP "12345"
88
/* #define RUNLEVELS_DOWN "06" */
89
#define RUNLEVELS_BOOT "bBsS"
92
static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
93
[SERVICE_DEAD] = UNIT_INACTIVE,
94
[SERVICE_START_PRE] = UNIT_ACTIVATING,
95
[SERVICE_START] = UNIT_ACTIVATING,
96
[SERVICE_START_POST] = UNIT_ACTIVATING,
97
[SERVICE_RUNNING] = UNIT_ACTIVE,
98
[SERVICE_EXITED] = UNIT_ACTIVE,
99
[SERVICE_RELOAD] = UNIT_RELOADING,
100
[SERVICE_STOP] = UNIT_DEACTIVATING,
101
[SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
102
[SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
103
[SERVICE_STOP_POST] = UNIT_DEACTIVATING,
104
[SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
105
[SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
106
[SERVICE_FAILED] = UNIT_FAILED,
107
[SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
110
static void service_init(Unit *u) {
111
Service *s = SERVICE(u);
114
assert(u->load_state == UNIT_STUB);
116
s->timeout_usec = DEFAULT_TIMEOUT_USEC;
117
s->restart_usec = DEFAULT_RESTART_USEC;
119
s->watchdog_watch.type = WATCH_INVALID;
121
s->timer_watch.type = WATCH_INVALID;
122
#ifdef HAVE_SYSV_COMPAT
123
s->sysv_start_priority = -1;
124
s->sysv_start_priority_from_rcnd = -1;
127
s->guess_main_pid = true;
129
exec_context_init(&s->exec_context);
131
RATELIMIT_INIT(s->start_limit, 10*USEC_PER_SEC, 5);
133
s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
136
static void service_unwatch_control_pid(Service *s) {
139
if (s->control_pid <= 0)
142
unit_unwatch_pid(UNIT(s), s->control_pid);
146
static void service_unwatch_main_pid(Service *s) {
149
if (s->main_pid <= 0)
152
unit_unwatch_pid(UNIT(s), s->main_pid);
156
static void service_unwatch_pid_file(Service *s) {
157
if (!s->pid_file_pathspec)
160
log_debug("Stopping watch for %s's PID file %s", UNIT(s)->id, s->pid_file_pathspec->path);
161
path_spec_unwatch(s->pid_file_pathspec, UNIT(s));
162
path_spec_done(s->pid_file_pathspec);
163
free(s->pid_file_pathspec);
164
s->pid_file_pathspec = NULL;
167
static int service_set_main_pid(Service *s, pid_t pid) {
179
s->main_pid_known = true;
181
if (get_parent_of_pid(pid, &ppid) >= 0 && ppid != getpid()) {
182
log_warning("%s: Supervising process %lu which is not our child. We'll most likely not notice when it exits.",
183
UNIT(s)->id, (unsigned long) pid);
185
s->main_pid_alien = true;
187
s->main_pid_alien = false;
189
exec_status_start(&s->main_exec_status, pid);
194
static void service_close_socket_fd(Service *s) {
197
if (s->socket_fd < 0)
200
close_nointr_nofail(s->socket_fd);
204
static void service_connection_unref(Service *s) {
207
if (!UNIT_DEREF(s->accept_socket))
210
socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
211
unit_ref_unset(&s->accept_socket);
214
static void service_stop_watchdog(Service *s) {
217
unit_unwatch_timer(UNIT(s), &s->watchdog_watch);
218
s->watchdog_timestamp.realtime = 0;
219
s->watchdog_timestamp.monotonic = 0;
222
static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart);
224
static void service_handle_watchdog(Service *s) {
230
if (s->watchdog_usec == 0)
233
offset = now(CLOCK_MONOTONIC) - s->watchdog_timestamp.monotonic;
234
if (offset >= s->watchdog_usec) {
235
log_error("%s watchdog timeout!", UNIT(s)->id);
236
service_enter_dead(s, SERVICE_FAILURE_WATCHDOG, true);
240
r = unit_watch_timer(UNIT(s), s->watchdog_usec - offset, &s->watchdog_watch);
242
log_warning("%s failed to install watchdog timer: %s", UNIT(s)->id, strerror(-r));
245
static void service_reset_watchdog(Service *s) {
248
dual_timestamp_get(&s->watchdog_timestamp);
249
service_handle_watchdog(s);
252
static void service_done(Unit *u) {
253
Service *s = SERVICE(u);
260
#ifdef HAVE_SYSV_COMPAT
264
free(s->sysv_runlevels);
265
s->sysv_runlevels = NULL;
268
free(s->status_text);
269
s->status_text = NULL;
271
exec_context_done(&s->exec_context);
272
exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
273
s->control_command = NULL;
274
s->main_command = NULL;
276
/* This will leak a process, but at least no memory or any of
278
service_unwatch_main_pid(s);
279
service_unwatch_control_pid(s);
280
service_unwatch_pid_file(s);
283
unit_unwatch_bus_name(u, s->bus_name);
288
service_close_socket_fd(s);
289
service_connection_unref(s);
291
unit_ref_unset(&s->accept_socket);
293
service_stop_watchdog(s);
295
unit_unwatch_timer(u, &s->timer_watch);
298
#ifdef HAVE_SYSV_COMPAT
299
static char *sysv_translate_name(const char *name) {
302
if (!(r = new(char, strlen(name) + sizeof(".service"))))
305
#if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU) || defined(TARGET_ANGSTROM)
306
if (endswith(name, ".sh"))
307
/* Drop Debian-style .sh suffix */
308
strcpy(stpcpy(r, name) - 3, ".service");
311
if (startswith(name, "boot."))
312
/* Drop SuSE-style boot. prefix */
313
strcpy(stpcpy(r, name + 5), ".service");
315
#ifdef TARGET_FRUGALWARE
316
if (startswith(name, "rc."))
317
/* Drop Frugalware-style rc. prefix */
318
strcpy(stpcpy(r, name + 3), ".service");
321
/* Normal init scripts */
322
strcpy(stpcpy(r, name), ".service");
327
static int sysv_translate_facility(const char *name, const char *filename, char **_r) {
329
/* We silently ignore the $ prefix here. According to the LSB
330
* spec it simply indicates whether something is a
331
* standardized name or a distribution-specific one. Since we
332
* just follow what already exists and do not introduce new
333
* uses or names we don't care who introduced a new name. */
335
static const char * const table[] = {
336
/* LSB defined facilities */
337
"local_fs", SPECIAL_LOCAL_FS_TARGET,
338
#if defined(TARGET_MANDRIVA) || defined(TARGET_MAGEIA)
340
/* Due to unfortunate name selection in Mandriva,
341
* $network is provided by network-up which is ordered
342
* after network which actually starts interfaces.
343
* To break the loop, just ignore it */
344
"network", SPECIAL_NETWORK_TARGET,
346
"named", SPECIAL_NSS_LOOKUP_TARGET,
347
"portmap", SPECIAL_RPCBIND_TARGET,
348
"remote_fs", SPECIAL_REMOTE_FS_TARGET,
349
"syslog", SPECIAL_SYSLOG_TARGET,
350
"time", SPECIAL_TIME_SYNC_TARGET,
352
/* common extensions */
353
"mail-transfer-agent", SPECIAL_MAIL_TRANSFER_AGENT_TARGET,
354
"x-display-manager", SPECIAL_DISPLAY_MANAGER_SERVICE,
357
#if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU) || defined(TARGET_ANGSTROM)
358
"mail-transport-agent", SPECIAL_MAIL_TRANSFER_AGENT_TARGET,
362
"MTA", SPECIAL_MAIL_TRANSFER_AGENT_TARGET,
363
"smtpdaemon", SPECIAL_MAIL_TRANSFER_AGENT_TARGET,
364
"httpd", SPECIAL_HTTP_DAEMON_TARGET,
368
"smtp", SPECIAL_MAIL_TRANSFER_AGENT_TARGET,
379
n = *name == '$' ? name + 1 : name;
381
for (i = 0; i < ELEMENTSOF(table); i += 2) {
383
if (!streq(table[i], n))
389
if (!(r = strdup(table[i+1])))
395
/* If we don't know this name, fallback heuristics to figure
396
* out whether something is a target or a service alias. */
399
if (!unit_prefix_is_valid(n))
402
/* Facilities starting with $ are most likely targets */
403
r = unit_name_build(n, NULL, ".target");
404
} else if (filename && streq(name, filename))
405
/* Names equaling the file name of the services are redundant */
408
/* Everything else we assume to be normal service names */
409
r = sysv_translate_name(n);
420
static int sysv_fix_order(Service *s) {
426
if (s->sysv_start_priority < 0)
429
/* For each pair of services where at least one lacks a LSB
430
* header, we use the start priority value to order things. */
432
LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_SERVICE]) {
435
bool special_s, special_t;
442
if (UNIT(t)->load_state != UNIT_LOADED)
445
if (t->sysv_start_priority < 0)
448
/* If both units have modern headers we don't care
449
* about the priorities */
450
if ((UNIT(s)->fragment_path || s->sysv_has_lsb) &&
451
(UNIT(t)->fragment_path || t->sysv_has_lsb))
454
special_s = s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels);
455
special_t = t->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, t->sysv_runlevels);
457
if (special_t && !special_s)
459
else if (special_s && !special_t)
461
else if (t->sysv_start_priority < s->sysv_start_priority)
463
else if (t->sysv_start_priority > s->sysv_start_priority)
468
/* FIXME: Maybe we should compare the name here lexicographically? */
470
if ((r = unit_add_dependency(UNIT(s), d, UNIT(t), true)) < 0)
477
static ExecCommand *exec_command_new(const char *path, const char *arg1) {
480
if (!(c = new0(ExecCommand, 1)))
483
if (!(c->path = strdup(path))) {
488
if (!(c->argv = strv_new(path, arg1, NULL))) {
497
static int sysv_exec_commands(Service *s) {
501
assert(s->sysv_path);
503
if (!(c = exec_command_new(s->sysv_path, "start")))
505
exec_command_append_list(s->exec_command+SERVICE_EXEC_START, c);
507
if (!(c = exec_command_new(s->sysv_path, "stop")))
509
exec_command_append_list(s->exec_command+SERVICE_EXEC_STOP, c);
511
if (!(c = exec_command_new(s->sysv_path, "reload")))
513
exec_command_append_list(s->exec_command+SERVICE_EXEC_RELOAD, c);
518
static int service_load_sysv_path(Service *s, const char *path) {
529
char *short_description = NULL, *long_description = NULL, *chkconfig_description = NULL, *description;
537
if (!(f = fopen(path, "re"))) {
538
r = errno == ENOENT ? 0 : -errno;
543
if (fstat(fileno(f), &st) < 0) {
549
if (!(s->sysv_path = strdup(path))) {
554
s->sysv_mtime = timespec_load(&st.st_mtim);
556
if (null_or_empty(&st)) {
557
u->load_state = UNIT_MASKED;
563
char l[LINE_MAX], *t;
565
if (!fgets(l, sizeof(l), f)) {
570
log_error("Failed to read configuration file '%s': %s", path, strerror(-r));
580
if (state == NORMAL && streq(t, "### BEGIN INIT INFO")) {
582
s->sysv_has_lsb = true;
586
if ((state == LSB_DESCRIPTION || state == LSB) && streq(t, "### END INIT INFO")) {
592
t += strspn(t, WHITESPACE);
594
if (state == NORMAL) {
596
/* Try to parse Red Hat style chkconfig headers */
598
if (startswith_no_case(t, "chkconfig:")) {
600
char runlevels[16], *k;
604
if (sscanf(t+10, "%15s %i %*i",
606
&start_priority) != 2) {
608
log_warning("[%s:%u] Failed to parse chkconfig line. Ignoring.", path, line);
612
/* A start priority gathered from the
613
* symlink farms is preferred over the
614
* data from the LSB header. */
615
if (start_priority < 0 || start_priority > 99)
616
log_warning("[%s:%u] Start priority out of range. Ignoring.", path, line);
618
s->sysv_start_priority = start_priority;
620
char_array_0(runlevels);
621
k = delete_chars(runlevels, WHITESPACE "-");
626
if (!(d = strdup(k))) {
631
free(s->sysv_runlevels);
632
s->sysv_runlevels = d;
635
} else if (startswith_no_case(t, "description:")) {
637
size_t k = strlen(t);
641
if (t[k-1] == '\\') {
646
if ((j = strstrip(t+12)) && *j) {
647
if (!(d = strdup(j))) {
654
free(chkconfig_description);
655
chkconfig_description = d;
657
} else if (startswith_no_case(t, "pidfile:")) {
664
if (!path_is_absolute(fn)) {
665
log_warning("[%s:%u] PID file not absolute. Ignoring.", path, line);
669
if (!(fn = strdup(fn))) {
678
} else if (state == DESCRIPTION) {
680
/* Try to parse Red Hat style description
683
size_t k = strlen(t);
691
if ((j = strstrip(t)) && *j) {
694
if (chkconfig_description)
695
d = join(chkconfig_description, " ", j, NULL);
704
free(chkconfig_description);
705
chkconfig_description = d;
708
} else if (state == LSB || state == LSB_DESCRIPTION) {
710
if (startswith_no_case(t, "Provides:")) {
716
FOREACH_WORD_QUOTED(w, z, t+9, i) {
719
if (!(n = strndup(w, z))) {
724
r = sysv_translate_facility(n, file_name_from_path(path), &m);
733
if (unit_name_to_type(m) == UNIT_SERVICE)
734
r = unit_add_name(u, m);
741
* indication that the
743
* now available. This
746
* targets do NOT pull
749
r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, UNIT_WANTS, m, NULL, true);
752
log_error("[%s:%u] Failed to add LSB Provides name %s, ignoring: %s", path, line, m, strerror(-r));
757
} else if (startswith_no_case(t, "Required-Start:") ||
758
startswith_no_case(t, "Should-Start:") ||
759
startswith_no_case(t, "X-Start-Before:") ||
760
startswith_no_case(t, "X-Start-After:")) {
766
FOREACH_WORD_QUOTED(w, z, strchr(t, ':')+1, i) {
769
if (!(n = strndup(w, z))) {
774
r = sysv_translate_facility(n, file_name_from_path(path), &m);
777
log_error("[%s:%u] Failed to translate LSB dependency %s, ignoring: %s", path, line, n, strerror(-r));
787
r = unit_add_dependency_by_name(u, startswith_no_case(t, "X-Start-Before:") ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true);
790
log_error("[%s:%u] Failed to add dependency on %s, ignoring: %s", path, line, m, strerror(-r));
794
} else if (startswith_no_case(t, "Default-Start:")) {
799
k = delete_chars(t+14, WHITESPACE "-");
802
if (!(d = strdup(k))) {
807
free(s->sysv_runlevels);
808
s->sysv_runlevels = d;
811
} else if (startswith_no_case(t, "Description:")) {
814
state = LSB_DESCRIPTION;
816
if ((j = strstrip(t+12)) && *j) {
817
if (!(d = strdup(j))) {
824
free(long_description);
825
long_description = d;
827
} else if (startswith_no_case(t, "Short-Description:")) {
832
if ((j = strstrip(t+18)) && *j) {
833
if (!(d = strdup(j))) {
840
free(short_description);
841
short_description = d;
843
} else if (state == LSB_DESCRIPTION) {
845
if (startswith(l, "#\t") || startswith(l, "# ")) {
848
if ((j = strstrip(t)) && *j) {
851
if (long_description)
852
d = join(long_description, " ", t, NULL);
861
free(long_description);
862
long_description = d;
871
if ((r = sysv_exec_commands(s)) < 0)
873
if (s->sysv_runlevels &&
874
chars_intersect(RUNLEVELS_BOOT, s->sysv_runlevels) &&
875
chars_intersect(RUNLEVELS_UP, s->sysv_runlevels)) {
876
/* Service has both boot and "up" runlevels
877
configured. Kill the "up" ones. */
878
delete_chars(s->sysv_runlevels, RUNLEVELS_UP);
881
if (s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels)) {
882
/* If there a runlevels configured for this service
883
* but none of the standard ones, then we assume this
884
* is some special kind of service (which might be
885
* needed for early boot) and don't create any links
888
UNIT(s)->default_dependencies = false;
890
/* Don't timeout special services during boot (like fsck) */
893
s->timeout_usec = DEFAULT_SYSV_TIMEOUT_USEC;
895
/* Special setting for all SysV services */
896
s->type = SERVICE_FORKING;
897
s->remain_after_exit = !s->pid_file;
898
s->guess_main_pid = false;
899
s->restart = SERVICE_RESTART_NO;
900
s->exec_context.ignore_sigpipe = false;
902
if (UNIT(s)->manager->sysv_console)
903
s->exec_context.std_output = EXEC_OUTPUT_JOURNAL_AND_CONSOLE;
905
s->exec_context.kill_mode = KILL_PROCESS;
907
/* We use the long description only if
908
* no short description is set. */
910
if (short_description)
911
description = short_description;
912
else if (chkconfig_description)
913
description = chkconfig_description;
914
else if (long_description)
915
description = long_description;
922
if (!(d = strappend(s->sysv_has_lsb ? "LSB: " : "SYSV: ", description))) {
930
/* The priority that has been set in /etc/rcN.d/ hierarchies
931
* takes precedence over what is stored as default in the LSB
933
if (s->sysv_start_priority_from_rcnd >= 0)
934
s->sysv_start_priority = s->sysv_start_priority_from_rcnd;
936
u->load_state = UNIT_LOADED;
944
free(short_description);
945
free(long_description);
946
free(chkconfig_description);
951
static int service_load_sysv_name(Service *s, const char *name) {
957
/* For SysV services we strip the boot.*, rc.* and *.sh
958
* prefixes/suffixes. */
959
#if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU) || defined(TARGET_ANGSTROM)
960
if (endswith(name, ".sh.service"))
965
if (startswith(name, "boot."))
969
#ifdef TARGET_FRUGALWARE
970
if (startswith(name, "rc."))
974
STRV_FOREACH(p, UNIT(s)->manager->lookup_paths.sysvinit_path) {
978
path = join(*p, "/", name, NULL);
982
assert(endswith(path, ".service"));
983
path[strlen(path)-8] = 0;
985
r = service_load_sysv_path(s, path);
987
#if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU) || defined(TARGET_ANGSTROM)
988
if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) {
989
/* Try Debian style *.sh source'able init scripts */
991
r = service_load_sysv_path(s, path);
997
if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) {
998
/* Try SUSE style boot.* init scripts */
1000
path = join(*p, "/boot.", name, NULL);
1004
/* Drop .service suffix */
1005
path[strlen(path)-8] = 0;
1006
r = service_load_sysv_path(s, path);
1011
#ifdef TARGET_FRUGALWARE
1012
if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) {
1013
/* Try Frugalware style rc.* init scripts */
1015
path = join(*p, "/rc.", name, NULL);
1019
/* Drop .service suffix */
1020
path[strlen(path)-8] = 0;
1021
r = service_load_sysv_path(s, path);
1029
if ((UNIT(s)->load_state != UNIT_STUB))
1036
static int service_load_sysv(Service *s) {
1043
/* Load service data from SysV init scripts, preferably with
1044
* LSB headers ... */
1046
if (strv_isempty(UNIT(s)->manager->lookup_paths.sysvinit_path))
1049
if ((t = UNIT(s)->id))
1050
if ((r = service_load_sysv_name(s, t)) < 0)
1053
if (UNIT(s)->load_state == UNIT_STUB)
1054
SET_FOREACH(t, UNIT(s)->names, i) {
1055
if (t == UNIT(s)->id)
1058
if ((r = service_load_sysv_name(s, t)) < 0)
1061
if (UNIT(s)->load_state != UNIT_STUB)
1069
static int fsck_fix_order(Service *s) {
1075
if (s->fsck_passno <= 0)
1078
/* For each pair of services where both have an fsck priority
1079
* we order things based on it. */
1081
LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_SERVICE]) {
1090
if (UNIT(t)->load_state != UNIT_LOADED)
1093
if (t->fsck_passno <= 0)
1096
if (t->fsck_passno < s->fsck_passno)
1098
else if (t->fsck_passno > s->fsck_passno)
1103
if ((r = unit_add_dependency(UNIT(s), d, UNIT(t), true)) < 0)
1110
static int service_verify(Service *s) {
1113
if (UNIT(s)->load_state != UNIT_LOADED)
1116
if (!s->exec_command[SERVICE_EXEC_START]) {
1117
log_error("%s lacks ExecStart setting. Refusing.", UNIT(s)->id);
1121
if (s->type != SERVICE_ONESHOT &&
1122
s->exec_command[SERVICE_EXEC_START]->command_next) {
1123
log_error("%s has more than one ExecStart setting, which is only allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
1127
if (s->type == SERVICE_ONESHOT &&
1128
s->exec_command[SERVICE_EXEC_RELOAD]) {
1129
log_error("%s has an ExecReload setting, which is not allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
1133
if (s->type == SERVICE_DBUS && !s->bus_name) {
1134
log_error("%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", UNIT(s)->id);
1138
if (s->exec_context.pam_name && s->exec_context.kill_mode != KILL_CONTROL_GROUP) {
1139
log_error("%s has PAM enabled. Kill mode must be set to 'control-group'. Refusing.", UNIT(s)->id);
1146
static int service_add_default_dependencies(Service *s) {
1151
/* Add a number of automatic dependencies useful for the
1152
* majority of services. */
1154
/* First, pull in base system */
1155
if (UNIT(s)->manager->running_as == MANAGER_SYSTEM) {
1157
if ((r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_BASIC_TARGET, NULL, true)) < 0)
1160
} else if (UNIT(s)->manager->running_as == MANAGER_USER) {
1162
if ((r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SOCKETS_TARGET, NULL, true)) < 0)
1166
/* Second, activate normal shutdown */
1167
return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
1170
static void service_fix_output(Service *s) {
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. */
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;
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;
1188
static int service_load(Unit *u) {
1190
Service *s = SERVICE(u);
1194
/* Load a .service file */
1195
if ((r = unit_load_fragment(u)) < 0)
1198
#ifdef HAVE_SYSV_COMPAT
1199
/* Load a classic init script as a fallback, if we couldn't find anything */
1200
if (u->load_state == UNIT_STUB)
1201
if ((r = service_load_sysv(s)) < 0)
1205
/* Still nothing found? Then let's give up */
1206
if (u->load_state == UNIT_STUB)
1209
/* We were able to load something, then let's add in the
1210
* dropin directories. */
1211
if ((r = unit_load_dropin(unit_follow_merge(u))) < 0)
1214
/* This is a new unit? Then let's add in some extras */
1215
if (u->load_state == UNIT_LOADED) {
1216
service_fix_output(s);
1218
if ((r = unit_add_exec_dependencies(u, &s->exec_context)) < 0)
1221
if ((r = unit_add_default_cgroups(u)) < 0)
1224
#ifdef HAVE_SYSV_COMPAT
1225
if ((r = sysv_fix_order(s)) < 0)
1229
if ((r = fsck_fix_order(s)) < 0)
1233
if ((r = unit_watch_bus_name(u, s->bus_name)) < 0)
1236
if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
1237
s->notify_access = NOTIFY_MAIN;
1239
if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
1240
s->notify_access = NOTIFY_MAIN;
1242
if (s->type == SERVICE_DBUS || s->bus_name)
1243
if ((r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_REQUIRES, SPECIAL_DBUS_SOCKET, NULL, true)) < 0)
1246
if (UNIT(s)->default_dependencies)
1247
if ((r = service_add_default_dependencies(s)) < 0)
1251
return service_verify(s);
1254
static void service_dump(Unit *u, FILE *f, const char *prefix) {
1256
ServiceExecCommand c;
1257
Service *s = SERVICE(u);
1258
const char *prefix2;
1263
p2 = strappend(prefix, "\t");
1264
prefix2 = p2 ? p2 : prefix;
1267
"%sService State: %s\n"
1269
"%sReload Result: %s\n"
1270
"%sPermissionsStartOnly: %s\n"
1271
"%sRootDirectoryStartOnly: %s\n"
1272
"%sRemainAfterExit: %s\n"
1273
"%sGuessMainPID: %s\n"
1276
"%sNotifyAccess: %s\n",
1277
prefix, service_state_to_string(s->state),
1278
prefix, service_result_to_string(s->result),
1279
prefix, service_result_to_string(s->reload_result),
1280
prefix, yes_no(s->permissions_start_only),
1281
prefix, yes_no(s->root_directory_start_only),
1282
prefix, yes_no(s->remain_after_exit),
1283
prefix, yes_no(s->guess_main_pid),
1284
prefix, service_type_to_string(s->type),
1285
prefix, service_restart_to_string(s->restart),
1286
prefix, notify_access_to_string(s->notify_access));
1288
if (s->control_pid > 0)
1290
"%sControl PID: %lu\n",
1291
prefix, (unsigned long) s->control_pid);
1293
if (s->main_pid > 0)
1296
"%sMain PID Known: %s\n"
1297
"%sMain PID Alien: %s\n",
1298
prefix, (unsigned long) s->main_pid,
1299
prefix, yes_no(s->main_pid_known),
1300
prefix, yes_no(s->main_pid_alien));
1305
prefix, s->pid_file);
1310
"%sBus Name Good: %s\n",
1311
prefix, s->bus_name,
1312
prefix, yes_no(s->bus_name_good));
1314
exec_context_dump(&s->exec_context, f, prefix);
1316
for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
1318
if (!s->exec_command[c])
1321
fprintf(f, "%s-> %s:\n",
1322
prefix, service_exec_command_to_string(c));
1324
exec_command_dump_list(s->exec_command[c], f, prefix2);
1327
#ifdef HAVE_SYSV_COMPAT
1330
"%sSysV Init Script Path: %s\n"
1331
"%sSysV Init Script has LSB Header: %s\n"
1332
"%sSysVEnabled: %s\n",
1333
prefix, s->sysv_path,
1334
prefix, yes_no(s->sysv_has_lsb),
1335
prefix, yes_no(s->sysv_enabled));
1337
if (s->sysv_start_priority >= 0)
1339
"%sSysVStartPriority: %i\n",
1340
prefix, s->sysv_start_priority);
1342
if (s->sysv_runlevels)
1343
fprintf(f, "%sSysVRunLevels: %s\n",
1344
prefix, s->sysv_runlevels);
1347
if (s->fsck_passno > 0)
1349
"%sFsckPassNo: %i\n",
1350
prefix, s->fsck_passno);
1353
fprintf(f, "%sStatus Text: %s\n",
1354
prefix, s->status_text);
1359
static int service_load_pid_file(Service *s, bool may_warn) {
1369
if ((r = read_one_line_file(s->pid_file, &k)) < 0) {
1371
log_info("PID file %s not readable (yet?) after %s.",
1372
s->pid_file, service_state_to_string(s->state));
1376
r = parse_pid(k, &pid);
1382
if (kill(pid, 0) < 0 && errno != EPERM) {
1384
log_info("PID %lu read from file %s does not exist.",
1385
(unsigned long) pid, s->pid_file);
1389
if (s->main_pid_known) {
1390
if (pid == s->main_pid)
1393
log_debug("Main PID changing: %lu -> %lu",
1394
(unsigned long) s->main_pid, (unsigned long) pid);
1395
service_unwatch_main_pid(s);
1396
s->main_pid_known = false;
1398
log_debug("Main PID loaded: %lu", (unsigned long) pid);
1400
if ((r = service_set_main_pid(s, pid)) < 0)
1403
if ((r = unit_watch_pid(UNIT(s), pid)) < 0)
1404
/* FIXME: we need to do something here */
1410
static int service_search_main_pid(Service *s) {
1416
/* If we know it anyway, don't ever fallback to unreliable
1418
if (s->main_pid_known)
1421
if (!s->guess_main_pid)
1424
assert(s->main_pid <= 0);
1426
if ((pid = cgroup_bonding_search_main_pid_list(UNIT(s)->cgroup_bondings)) <= 0)
1429
log_debug("Main PID guessed: %lu", (unsigned long) pid);
1430
if ((r = service_set_main_pid(s, pid)) < 0)
1433
if ((r = unit_watch_pid(UNIT(s), pid)) < 0)
1434
/* FIXME: we need to do something here */
1440
static void service_notify_sockets_dead(Service *s, bool failed_permanent) {
1446
/* Notifies all our sockets when we die */
1448
if (s->socket_fd >= 0)
1451
SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i)
1452
if (u->type == UNIT_SOCKET)
1453
socket_notify_service_dead(SOCKET(u), failed_permanent);
1458
static void service_set_state(Service *s, ServiceState state) {
1459
ServiceState old_state;
1462
old_state = s->state;
1465
service_unwatch_pid_file(s);
1467
if (state != SERVICE_START_PRE &&
1468
state != SERVICE_START &&
1469
state != SERVICE_START_POST &&
1470
state != SERVICE_RELOAD &&
1471
state != SERVICE_STOP &&
1472
state != SERVICE_STOP_SIGTERM &&
1473
state != SERVICE_STOP_SIGKILL &&
1474
state != SERVICE_STOP_POST &&
1475
state != SERVICE_FINAL_SIGTERM &&
1476
state != SERVICE_FINAL_SIGKILL &&
1477
state != SERVICE_AUTO_RESTART)
1478
unit_unwatch_timer(UNIT(s), &s->timer_watch);
1480
if (state != SERVICE_START &&
1481
state != SERVICE_START_POST &&
1482
state != SERVICE_RUNNING &&
1483
state != SERVICE_RELOAD &&
1484
state != SERVICE_STOP &&
1485
state != SERVICE_STOP_SIGTERM &&
1486
state != SERVICE_STOP_SIGKILL) {
1487
service_unwatch_main_pid(s);
1488
s->main_command = NULL;
1491
if (state != SERVICE_START_PRE &&
1492
state != SERVICE_START &&
1493
state != SERVICE_START_POST &&
1494
state != SERVICE_RELOAD &&
1495
state != SERVICE_STOP &&
1496
state != SERVICE_STOP_SIGTERM &&
1497
state != SERVICE_STOP_SIGKILL &&
1498
state != SERVICE_STOP_POST &&
1499
state != SERVICE_FINAL_SIGTERM &&
1500
state != SERVICE_FINAL_SIGKILL) {
1501
service_unwatch_control_pid(s);
1502
s->control_command = NULL;
1503
s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1506
if (state == SERVICE_DEAD ||
1507
state == SERVICE_STOP ||
1508
state == SERVICE_STOP_SIGTERM ||
1509
state == SERVICE_STOP_SIGKILL ||
1510
state == SERVICE_STOP_POST ||
1511
state == SERVICE_FINAL_SIGTERM ||
1512
state == SERVICE_FINAL_SIGKILL ||
1513
state == SERVICE_FAILED ||
1514
state == SERVICE_AUTO_RESTART)
1515
service_notify_sockets_dead(s, false);
1517
if (state != SERVICE_START_PRE &&
1518
state != SERVICE_START &&
1519
state != SERVICE_START_POST &&
1520
state != SERVICE_RUNNING &&
1521
state != SERVICE_RELOAD &&
1522
state != SERVICE_STOP &&
1523
state != SERVICE_STOP_SIGTERM &&
1524
state != SERVICE_STOP_SIGKILL &&
1525
state != SERVICE_STOP_POST &&
1526
state != SERVICE_FINAL_SIGTERM &&
1527
state != SERVICE_FINAL_SIGKILL &&
1528
!(state == SERVICE_DEAD && UNIT(s)->job)) {
1529
service_close_socket_fd(s);
1530
service_connection_unref(s);
1533
if (state == SERVICE_STOP)
1534
service_stop_watchdog(s);
1536
/* For the inactive states unit_notify() will trim the cgroup,
1537
* but for exit we have to do that ourselves... */
1538
if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
1539
cgroup_bonding_trim_list(UNIT(s)->cgroup_bondings, true);
1541
if (old_state != state)
1542
log_debug("%s changed %s -> %s", UNIT(s)->id, service_state_to_string(old_state), service_state_to_string(state));
1544
unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], s->reload_result == SERVICE_SUCCESS);
1545
s->reload_result = SERVICE_SUCCESS;
1548
static int service_coldplug(Unit *u) {
1549
Service *s = SERVICE(u);
1553
assert(s->state == SERVICE_DEAD);
1555
if (s->deserialized_state != s->state) {
1557
if (s->deserialized_state == SERVICE_START_PRE ||
1558
s->deserialized_state == SERVICE_START ||
1559
s->deserialized_state == SERVICE_START_POST ||
1560
s->deserialized_state == SERVICE_RELOAD ||
1561
s->deserialized_state == SERVICE_STOP ||
1562
s->deserialized_state == SERVICE_STOP_SIGTERM ||
1563
s->deserialized_state == SERVICE_STOP_SIGKILL ||
1564
s->deserialized_state == SERVICE_STOP_POST ||
1565
s->deserialized_state == SERVICE_FINAL_SIGTERM ||
1566
s->deserialized_state == SERVICE_FINAL_SIGKILL ||
1567
s->deserialized_state == SERVICE_AUTO_RESTART) {
1569
if (s->deserialized_state == SERVICE_AUTO_RESTART || s->timeout_usec > 0) {
1572
k = s->deserialized_state == SERVICE_AUTO_RESTART ? s->restart_usec : s->timeout_usec;
1574
if ((r = unit_watch_timer(UNIT(s), k, &s->timer_watch)) < 0)
1579
if ((s->deserialized_state == SERVICE_START &&
1580
(s->type == SERVICE_FORKING ||
1581
s->type == SERVICE_DBUS ||
1582
s->type == SERVICE_ONESHOT ||
1583
s->type == SERVICE_NOTIFY)) ||
1584
s->deserialized_state == SERVICE_START_POST ||
1585
s->deserialized_state == SERVICE_RUNNING ||
1586
s->deserialized_state == SERVICE_RELOAD ||
1587
s->deserialized_state == SERVICE_STOP ||
1588
s->deserialized_state == SERVICE_STOP_SIGTERM ||
1589
s->deserialized_state == SERVICE_STOP_SIGKILL)
1590
if (s->main_pid > 0)
1591
if ((r = unit_watch_pid(UNIT(s), s->main_pid)) < 0)
1594
if (s->deserialized_state == SERVICE_START_PRE ||
1595
s->deserialized_state == SERVICE_START ||
1596
s->deserialized_state == SERVICE_START_POST ||
1597
s->deserialized_state == SERVICE_RELOAD ||
1598
s->deserialized_state == SERVICE_STOP ||
1599
s->deserialized_state == SERVICE_STOP_SIGTERM ||
1600
s->deserialized_state == SERVICE_STOP_SIGKILL ||
1601
s->deserialized_state == SERVICE_STOP_POST ||
1602
s->deserialized_state == SERVICE_FINAL_SIGTERM ||
1603
s->deserialized_state == SERVICE_FINAL_SIGKILL)
1604
if (s->control_pid > 0)
1605
if ((r = unit_watch_pid(UNIT(s), s->control_pid)) < 0)
1608
if (s->deserialized_state == SERVICE_START_POST ||
1609
s->deserialized_state == SERVICE_RUNNING)
1610
service_handle_watchdog(s);
1612
service_set_state(s, s->deserialized_state);
1617
static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1621
unsigned rn_fds = 0;
1628
if (s->socket_fd >= 0)
1631
SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
1636
if (u->type != UNIT_SOCKET)
1641
if ((r = socket_collect_fds(sock, &cfds, &cn_fds)) < 0)
1653
if (!(t = new(int, rn_fds+cn_fds))) {
1659
memcpy(t, rfds, rn_fds * sizeof(int));
1660
memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
1665
rn_fds = rn_fds+cn_fds;
1680
static int service_spawn(
1685
bool apply_permissions,
1687
bool apply_tty_stdin,
1688
bool set_notify_socket,
1693
int *fds = NULL, *fdsbuf = NULL;
1694
unsigned n_fds = 0, n_env = 0;
1695
char **argv = NULL, **final_env = NULL, **our_env = NULL;
1702
s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1703
s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1704
s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1706
if (s->socket_fd >= 0) {
1707
fds = &s->socket_fd;
1710
if ((r = service_collect_fds(s, &fdsbuf, &n_fds)) < 0)
1717
if (timeout && s->timeout_usec) {
1718
if ((r = unit_watch_timer(UNIT(s), s->timeout_usec, &s->timer_watch)) < 0)
1721
unit_unwatch_timer(UNIT(s), &s->timer_watch);
1723
if (!(argv = unit_full_printf_strv(UNIT(s), c->argv))) {
1728
if (!(our_env = new0(char*, 4))) {
1733
if (set_notify_socket)
1734
if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
1739
if (s->main_pid > 0)
1740
if (asprintf(our_env + n_env++, "MAINPID=%lu", (unsigned long) s->main_pid) < 0) {
1745
if (s->watchdog_usec > 0)
1746
if (asprintf(our_env + n_env++, "WATCHDOG_USEC=%llu", (unsigned long long) s->watchdog_usec) < 0) {
1751
if (!(final_env = strv_env_merge(2,
1752
UNIT(s)->manager->environment,
1767
UNIT(s)->manager->confirm_spawn,
1768
UNIT(s)->cgroup_bondings,
1769
UNIT(s)->cgroup_attributes,
1776
if ((r = unit_watch_pid(UNIT(s), pid)) < 0)
1777
/* FIXME: we need to do something here */
1783
strv_free(final_env);
1793
strv_free(final_env);
1796
unit_unwatch_timer(UNIT(s), &s->timer_watch);
1801
static int main_pid_good(Service *s) {
1804
/* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1807
/* If we know the pid file, then lets just check if it is
1809
if (s->main_pid_known) {
1811
/* If it's an alien child let's check if it is still
1813
if (s->main_pid_alien)
1814
return kill(s->main_pid, 0) >= 0 || errno != ESRCH;
1816
/* .. otherwise assume we'll get a SIGCHLD for it,
1817
* which we really should wait for to collect exit
1818
* status and code */
1819
return s->main_pid > 0;
1822
/* We don't know the pid */
1826
static int control_pid_good(Service *s) {
1829
return s->control_pid > 0;
1832
static int cgroup_good(Service *s) {
1837
if ((r = cgroup_bonding_is_empty_list(UNIT(s)->cgroup_bondings)) < 0)
1843
static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
1847
if (f != SERVICE_SUCCESS)
1850
if (allow_restart &&
1851
!s->forbid_restart &&
1852
(s->restart == SERVICE_RESTART_ALWAYS ||
1853
(s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1854
(s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
1855
(s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
1856
s->result == SERVICE_FAILURE_CORE_DUMP)))) {
1858
r = unit_watch_timer(UNIT(s), s->restart_usec, &s->timer_watch);
1862
service_set_state(s, SERVICE_AUTO_RESTART);
1864
service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1866
s->forbid_restart = false;
1871
log_warning("%s failed to run install restart timer: %s", UNIT(s)->id, strerror(-r));
1872
service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
1875
static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
1877
static void service_enter_stop_post(Service *s, ServiceResult f) {
1881
if (f != SERVICE_SUCCESS)
1884
service_unwatch_control_pid(s);
1886
if ((s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST])) {
1887
s->control_command_id = SERVICE_EXEC_STOP_POST;
1889
if ((r = service_spawn(s,
1893
!s->permissions_start_only,
1894
!s->root_directory_start_only,
1897
&s->control_pid)) < 0)
1901
service_set_state(s, SERVICE_STOP_POST);
1903
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
1908
log_warning("%s failed to run 'stop-post' task: %s", UNIT(s)->id, strerror(-r));
1909
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
1912
static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
1914
Set *pid_set = NULL;
1915
bool wait_for_exit = false;
1919
if (f != SERVICE_SUCCESS)
1922
if (s->exec_context.kill_mode != KILL_NONE) {
1923
int sig = (state == SERVICE_STOP_SIGTERM || state == SERVICE_FINAL_SIGTERM) ? s->exec_context.kill_signal : SIGKILL;
1925
if (s->main_pid > 0) {
1926
if (kill_and_sigcont(s->main_pid, sig) < 0 && errno != ESRCH)
1927
log_warning("Failed to kill main process %li: %m", (long) s->main_pid);
1929
wait_for_exit = !s->main_pid_alien;
1932
if (s->control_pid > 0) {
1933
if (kill_and_sigcont(s->control_pid, sig) < 0 && errno != ESRCH)
1934
log_warning("Failed to kill control process %li: %m", (long) s->control_pid);
1936
wait_for_exit = true;
1939
if (s->exec_context.kill_mode == KILL_CONTROL_GROUP) {
1941
if (!(pid_set = set_new(trivial_hash_func, trivial_compare_func))) {
1946
/* Exclude the main/control pids from being killed via the cgroup */
1947
if (s->main_pid > 0)
1948
if ((r = set_put(pid_set, LONG_TO_PTR(s->main_pid))) < 0)
1951
if (s->control_pid > 0)
1952
if ((r = set_put(pid_set, LONG_TO_PTR(s->control_pid))) < 0)
1955
if ((r = cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, sig, true, pid_set)) < 0) {
1956
if (r != -EAGAIN && r != -ESRCH && r != -ENOENT)
1957
log_warning("Failed to kill control group: %s", strerror(-r));
1959
wait_for_exit = true;
1966
if (wait_for_exit) {
1967
if (s->timeout_usec > 0)
1968
if ((r = unit_watch_timer(UNIT(s), s->timeout_usec, &s->timer_watch)) < 0)
1971
service_set_state(s, state);
1972
} else if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
1973
service_enter_stop_post(s, SERVICE_SUCCESS);
1975
service_enter_dead(s, SERVICE_SUCCESS, true);
1980
log_warning("%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
1982
if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
1983
service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
1985
service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
1991
static void service_enter_stop(Service *s, ServiceResult f) {
1996
if (f != SERVICE_SUCCESS)
1999
service_unwatch_control_pid(s);
2001
if ((s->control_command = s->exec_command[SERVICE_EXEC_STOP])) {
2002
s->control_command_id = SERVICE_EXEC_STOP;
2004
if ((r = service_spawn(s,
2008
!s->permissions_start_only,
2009
!s->root_directory_start_only,
2012
&s->control_pid)) < 0)
2015
service_set_state(s, SERVICE_STOP);
2017
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2022
log_warning("%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
2023
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2026
static void service_enter_running(Service *s, ServiceResult f) {
2027
int main_pid_ok, cgroup_ok;
2030
if (f != SERVICE_SUCCESS)
2033
main_pid_ok = main_pid_good(s);
2034
cgroup_ok = cgroup_good(s);
2036
if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
2037
(s->bus_name_good || s->type != SERVICE_DBUS))
2038
service_set_state(s, SERVICE_RUNNING);
2039
else if (s->remain_after_exit)
2040
service_set_state(s, SERVICE_EXITED);
2042
service_enter_stop(s, SERVICE_SUCCESS);
2045
static void service_enter_start_post(Service *s) {
2049
service_unwatch_control_pid(s);
2051
if (s->watchdog_usec > 0)
2052
service_reset_watchdog(s);
2054
if ((s->control_command = s->exec_command[SERVICE_EXEC_START_POST])) {
2055
s->control_command_id = SERVICE_EXEC_START_POST;
2057
if ((r = service_spawn(s,
2061
!s->permissions_start_only,
2062
!s->root_directory_start_only,
2065
&s->control_pid)) < 0)
2068
service_set_state(s, SERVICE_START_POST);
2070
service_enter_running(s, SERVICE_SUCCESS);
2075
log_warning("%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
2076
service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2079
static void service_enter_start(Service *s) {
2086
assert(s->exec_command[SERVICE_EXEC_START]);
2087
assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
2089
if (s->type == SERVICE_FORKING)
2090
service_unwatch_control_pid(s);
2092
service_unwatch_main_pid(s);
2094
/* We want to ensure that nobody leaks processes from
2095
* START_PRE here, so let's go on a killing spree, People
2096
* should not spawn long running processes from START_PRE. */
2097
cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, SIGKILL, true, NULL);
2099
if (s->type == SERVICE_FORKING) {
2100
s->control_command_id = SERVICE_EXEC_START;
2101
c = s->control_command = s->exec_command[SERVICE_EXEC_START];
2103
s->main_command = NULL;
2105
s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2106
s->control_command = NULL;
2108
c = s->main_command = s->exec_command[SERVICE_EXEC_START];
2111
if ((r = service_spawn(s,
2113
s->type == SERVICE_FORKING || s->type == SERVICE_DBUS || s->type == SERVICE_NOTIFY,
2118
s->notify_access != NOTIFY_NONE,
2122
if (s->type == SERVICE_SIMPLE) {
2123
/* For simple services we immediately start
2124
* the START_POST binaries. */
2126
service_set_main_pid(s, pid);
2127
service_enter_start_post(s);
2129
} else if (s->type == SERVICE_FORKING) {
2131
/* For forking services we wait until the start
2132
* process exited. */
2134
s->control_pid = pid;
2135
service_set_state(s, SERVICE_START);
2137
} else if (s->type == SERVICE_ONESHOT ||
2138
s->type == SERVICE_DBUS ||
2139
s->type == SERVICE_NOTIFY) {
2141
/* For oneshot services we wait until the start
2142
* process exited, too, but it is our main process. */
2144
/* For D-Bus services we know the main pid right away,
2145
* but wait for the bus name to appear on the
2146
* bus. Notify services are similar. */
2148
service_set_main_pid(s, pid);
2149
service_set_state(s, SERVICE_START);
2151
assert_not_reached("Unknown service type");
2156
log_warning("%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
2157
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2160
static void service_enter_start_pre(Service *s) {
2165
service_unwatch_control_pid(s);
2167
if ((s->control_command = s->exec_command[SERVICE_EXEC_START_PRE])) {
2169
/* Before we start anything, let's clear up what might
2170
* be left from previous runs. */
2171
cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, SIGKILL, true, NULL);
2173
s->control_command_id = SERVICE_EXEC_START_PRE;
2175
if ((r = service_spawn(s,
2179
!s->permissions_start_only,
2180
!s->root_directory_start_only,
2183
&s->control_pid)) < 0)
2186
service_set_state(s, SERVICE_START_PRE);
2188
service_enter_start(s);
2193
log_warning("%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
2194
service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2197
static void service_enter_restart(Service *s) {
2202
dbus_error_init(&error);
2205
log_info("Job pending for unit, delaying automatic restart.");
2207
if ((r = unit_watch_timer(UNIT(s), s->restart_usec, &s->timer_watch)) < 0)
2211
service_enter_dead(s, SERVICE_SUCCESS, false);
2213
if ((r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT(s), JOB_FAIL, false, &error, NULL)) < 0)
2216
log_debug("%s scheduled restart job.", UNIT(s)->id);
2220
log_warning("%s failed to schedule restart job: %s", UNIT(s)->id, bus_error(&error, -r));
2221
service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
2223
dbus_error_free(&error);
2226
static void service_enter_reload(Service *s) {
2231
service_unwatch_control_pid(s);
2233
if ((s->control_command = s->exec_command[SERVICE_EXEC_RELOAD])) {
2234
s->control_command_id = SERVICE_EXEC_RELOAD;
2236
if ((r = service_spawn(s,
2240
!s->permissions_start_only,
2241
!s->root_directory_start_only,
2244
&s->control_pid)) < 0)
2247
service_set_state(s, SERVICE_RELOAD);
2249
service_enter_running(s, SERVICE_SUCCESS);
2254
log_warning("%s failed to run 'reload' task: %s", UNIT(s)->id, strerror(-r));
2255
s->reload_result = SERVICE_FAILURE_RESOURCES;
2256
service_enter_running(s, SERVICE_SUCCESS);
2259
static void service_run_next_control(Service *s) {
2263
assert(s->control_command);
2264
assert(s->control_command->command_next);
2266
assert(s->control_command_id != SERVICE_EXEC_START);
2268
s->control_command = s->control_command->command_next;
2269
service_unwatch_control_pid(s);
2271
if ((r = service_spawn(s,
2275
!s->permissions_start_only,
2276
!s->root_directory_start_only,
2277
s->control_command_id == SERVICE_EXEC_START_PRE ||
2278
s->control_command_id == SERVICE_EXEC_STOP_POST,
2280
&s->control_pid)) < 0)
2286
log_warning("%s failed to run next control task: %s", UNIT(s)->id, strerror(-r));
2288
if (s->state == SERVICE_START_PRE)
2289
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2290
else if (s->state == SERVICE_STOP)
2291
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2292
else if (s->state == SERVICE_STOP_POST)
2293
service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2294
else if (s->state == SERVICE_RELOAD) {
2295
s->reload_result = SERVICE_FAILURE_RESOURCES;
2296
service_enter_running(s, SERVICE_SUCCESS);
2298
service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2301
static void service_run_next_main(Service *s) {
2306
assert(s->main_command);
2307
assert(s->main_command->command_next);
2308
assert(s->type == SERVICE_ONESHOT);
2310
s->main_command = s->main_command->command_next;
2311
service_unwatch_main_pid(s);
2313
if ((r = service_spawn(s,
2320
s->notify_access != NOTIFY_NONE,
2324
service_set_main_pid(s, pid);
2329
log_warning("%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
2330
service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2333
static int service_start_limit_test(Service *s) {
2336
if (ratelimit_test(&s->start_limit))
2339
switch (s->start_limit_action) {
2341
case SERVICE_START_LIMIT_NONE:
2342
log_warning("%s start request repeated too quickly, refusing to start.", UNIT(s)->id);
2345
case SERVICE_START_LIMIT_REBOOT: {
2349
dbus_error_init(&error);
2351
log_warning("%s start request repeated too quickly, rebooting.", UNIT(s)->id);
2353
r = manager_add_job_by_name(UNIT(s)->manager, JOB_START, SPECIAL_REBOOT_TARGET, JOB_REPLACE, true, &error, NULL);
2355
log_error("Failed to reboot: %s.", bus_error(&error, r));
2356
dbus_error_free(&error);
2362
case SERVICE_START_LIMIT_REBOOT_FORCE:
2363
log_warning("%s start request repeated too quickly, forcibly rebooting.", UNIT(s)->id);
2364
UNIT(s)->manager->exit_code = MANAGER_REBOOT;
2367
case SERVICE_START_LIMIT_REBOOT_IMMEDIATE:
2368
log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id);
2369
reboot(RB_AUTOBOOT);
2373
log_error("start limit action=%i", s->start_limit_action);
2374
assert_not_reached("Unknown StartLimitAction.");
2380
static int service_start(Unit *u) {
2381
Service *s = SERVICE(u);
2386
/* We cannot fulfill this request right now, try again later
2388
if (s->state == SERVICE_STOP ||
2389
s->state == SERVICE_STOP_SIGTERM ||
2390
s->state == SERVICE_STOP_SIGKILL ||
2391
s->state == SERVICE_STOP_POST ||
2392
s->state == SERVICE_FINAL_SIGTERM ||
2393
s->state == SERVICE_FINAL_SIGKILL)
2396
/* Already on it! */
2397
if (s->state == SERVICE_START_PRE ||
2398
s->state == SERVICE_START ||
2399
s->state == SERVICE_START_POST)
2402
assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED || s->state == SERVICE_AUTO_RESTART);
2404
/* Make sure we don't enter a busy loop of some kind. */
2405
r = service_start_limit_test(s);
2407
service_notify_sockets_dead(s, true);
2411
s->result = SERVICE_SUCCESS;
2412
s->reload_result = SERVICE_SUCCESS;
2413
s->main_pid_known = false;
2414
s->main_pid_alien = false;
2415
s->forbid_restart = false;
2417
service_enter_start_pre(s);
2421
static int service_stop(Unit *u) {
2422
Service *s = SERVICE(u);
2426
/* This is a user request, so don't do restarts on this
2428
s->forbid_restart = true;
2431
if (s->state == SERVICE_STOP ||
2432
s->state == SERVICE_STOP_SIGTERM ||
2433
s->state == SERVICE_STOP_SIGKILL ||
2434
s->state == SERVICE_STOP_POST ||
2435
s->state == SERVICE_FINAL_SIGTERM ||
2436
s->state == SERVICE_FINAL_SIGKILL)
2439
/* Don't allow a restart */
2440
if (s->state == SERVICE_AUTO_RESTART) {
2441
service_set_state(s, SERVICE_DEAD);
2445
/* If there's already something running we go directly into
2447
if (s->state == SERVICE_START_PRE ||
2448
s->state == SERVICE_START ||
2449
s->state == SERVICE_START_POST ||
2450
s->state == SERVICE_RELOAD) {
2451
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2455
assert(s->state == SERVICE_RUNNING ||
2456
s->state == SERVICE_EXITED);
2458
service_enter_stop(s, SERVICE_SUCCESS);
2462
static int service_reload(Unit *u) {
2463
Service *s = SERVICE(u);
2467
assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
2469
service_enter_reload(s);
2473
static bool service_can_reload(Unit *u) {
2474
Service *s = SERVICE(u);
2478
return !!s->exec_command[SERVICE_EXEC_RELOAD];
2481
static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2482
Service *s = SERVICE(u);
2488
unit_serialize_item(u, f, "state", service_state_to_string(s->state));
2489
unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2490
unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
2492
if (s->control_pid > 0)
2493
unit_serialize_item_format(u, f, "control-pid", "%lu", (unsigned long) s->control_pid);
2495
if (s->main_pid_known && s->main_pid > 0)
2496
unit_serialize_item_format(u, f, "main-pid", "%lu", (unsigned long) s->main_pid);
2498
unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
2501
unit_serialize_item(u, f, "status-text", s->status_text);
2503
/* FIXME: There's a minor uncleanliness here: if there are
2504
* multiple commands attached here, we will start from the
2505
* first one again */
2506
if (s->control_command_id >= 0)
2507
unit_serialize_item(u, f, "control-command", service_exec_command_to_string(s->control_command_id));
2509
if (s->socket_fd >= 0) {
2512
if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
2515
unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2518
if (s->main_exec_status.pid > 0) {
2519
unit_serialize_item_format(u, f, "main-exec-status-pid", "%lu", (unsigned long) s->main_exec_status.pid);
2520
dual_timestamp_serialize(f, "main-exec-status-start", &s->main_exec_status.start_timestamp);
2521
dual_timestamp_serialize(f, "main-exec-status-exit", &s->main_exec_status.exit_timestamp);
2523
if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
2524
unit_serialize_item_format(u, f, "main-exec-status-code", "%i", s->main_exec_status.code);
2525
unit_serialize_item_format(u, f, "main-exec-status-status", "%i", s->main_exec_status.status);
2528
if (dual_timestamp_is_set(&s->watchdog_timestamp))
2529
dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
2534
static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2535
Service *s = SERVICE(u);
2542
if (streq(key, "state")) {
2545
if ((state = service_state_from_string(value)) < 0)
2546
log_debug("Failed to parse state value %s", value);
2548
s->deserialized_state = state;
2549
} else if (streq(key, "result")) {
2552
f = service_result_from_string(value);
2554
log_debug("Failed to parse result value %s", value);
2555
else if (f != SERVICE_SUCCESS)
2558
} else if (streq(key, "reload-result")) {
2561
f = service_result_from_string(value);
2563
log_debug("Failed to parse reload result value %s", value);
2564
else if (f != SERVICE_SUCCESS)
2565
s->reload_result = f;
2567
} else if (streq(key, "control-pid")) {
2570
if (parse_pid(value, &pid) < 0)
2571
log_debug("Failed to parse control-pid value %s", value);
2573
s->control_pid = pid;
2574
} else if (streq(key, "main-pid")) {
2577
if (parse_pid(value, &pid) < 0)
2578
log_debug("Failed to parse main-pid value %s", value);
2580
service_set_main_pid(s, (pid_t) pid);
2581
} else if (streq(key, "main-pid-known")) {
2584
if ((b = parse_boolean(value)) < 0)
2585
log_debug("Failed to parse main-pid-known value %s", value);
2587
s->main_pid_known = b;
2588
} else if (streq(key, "status-text")) {
2591
if ((t = strdup(value))) {
2592
free(s->status_text);
2596
} else if (streq(key, "control-command")) {
2597
ServiceExecCommand id;
2599
if ((id = service_exec_command_from_string(value)) < 0)
2600
log_debug("Failed to parse exec-command value %s", value);
2602
s->control_command_id = id;
2603
s->control_command = s->exec_command[id];
2605
} else if (streq(key, "socket-fd")) {
2608
if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2609
log_debug("Failed to parse socket-fd value %s", value);
2612
if (s->socket_fd >= 0)
2613
close_nointr_nofail(s->socket_fd);
2614
s->socket_fd = fdset_remove(fds, fd);
2616
} else if (streq(key, "main-exec-status-pid")) {
2619
if (parse_pid(value, &pid) < 0)
2620
log_debug("Failed to parse main-exec-status-pid value %s", value);
2622
s->main_exec_status.pid = pid;
2623
} else if (streq(key, "main-exec-status-code")) {
2626
if (safe_atoi(value, &i) < 0)
2627
log_debug("Failed to parse main-exec-status-code value %s", value);
2629
s->main_exec_status.code = i;
2630
} else if (streq(key, "main-exec-status-status")) {
2633
if (safe_atoi(value, &i) < 0)
2634
log_debug("Failed to parse main-exec-status-status value %s", value);
2636
s->main_exec_status.status = i;
2637
} else if (streq(key, "main-exec-status-start"))
2638
dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2639
else if (streq(key, "main-exec-status-exit"))
2640
dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
2641
else if (streq(key, "watchdog-timestamp"))
2642
dual_timestamp_deserialize(value, &s->watchdog_timestamp);
2644
log_debug("Unknown serialization key '%s'", key);
2649
static UnitActiveState service_active_state(Unit *u) {
2652
return state_translation_table[SERVICE(u)->state];
2655
static const char *service_sub_state_to_string(Unit *u) {
2658
return service_state_to_string(SERVICE(u)->state);
2661
static bool service_check_gc(Unit *u) {
2662
Service *s = SERVICE(u);
2666
/* Never clean up services that still have a process around,
2667
* even if the service is formally dead. */
2668
if (cgroup_good(s) > 0 ||
2669
main_pid_good(s) > 0 ||
2670
control_pid_good(s) > 0)
2673
#ifdef HAVE_SYSV_COMPAT
2681
static bool service_check_snapshot(Unit *u) {
2682
Service *s = SERVICE(u);
2686
return !s->got_socket_fd;
2689
static int service_retry_pid_file(Service *s) {
2692
assert(s->pid_file);
2693
assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2695
r = service_load_pid_file(s, false);
2699
service_unwatch_pid_file(s);
2701
service_enter_running(s, SERVICE_SUCCESS);
2705
static int service_watch_pid_file(Service *s) {
2708
log_debug("Setting watch for %s's PID file %s", UNIT(s)->id, s->pid_file_pathspec->path);
2709
r = path_spec_watch(s->pid_file_pathspec, UNIT(s));
2713
/* the pidfile might have appeared just before we set the watch */
2714
service_retry_pid_file(s);
2718
log_error("Failed to set a watch for %s's PID file %s: %s",
2719
UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
2720
service_unwatch_pid_file(s);
2724
static int service_demand_pid_file(Service *s) {
2727
assert(s->pid_file);
2728
assert(!s->pid_file_pathspec);
2730
ps = new0(PathSpec, 1);
2734
ps->path = strdup(s->pid_file);
2740
path_kill_slashes(ps->path);
2742
/* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2743
* keep their PID file open all the time. */
2744
ps->type = PATH_MODIFIED;
2745
ps->inotify_fd = -1;
2747
s->pid_file_pathspec = ps;
2749
return service_watch_pid_file(s);
2752
static void service_fd_event(Unit *u, int fd, uint32_t events, Watch *w) {
2753
Service *s = SERVICE(u);
2757
assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2758
assert(s->pid_file_pathspec);
2759
assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
2761
log_debug("inotify event for %s", u->id);
2763
if (path_spec_fd_event(s->pid_file_pathspec, events) < 0)
2766
if (service_retry_pid_file(s) == 0)
2769
if (service_watch_pid_file(s) < 0)
2774
service_unwatch_pid_file(s);
2775
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2778
static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2779
Service *s = SERVICE(u);
2785
if (UNIT(s)->fragment_path ? is_clean_exit(code, status) : is_clean_exit_lsb(code, status))
2786
f = SERVICE_SUCCESS;
2787
else if (code == CLD_EXITED)
2788
f = SERVICE_FAILURE_EXIT_CODE;
2789
else if (code == CLD_KILLED)
2790
f = SERVICE_FAILURE_SIGNAL;
2791
else if (code == CLD_DUMPED)
2792
f = SERVICE_FAILURE_CORE_DUMP;
2794
assert_not_reached("Unknown code");
2796
if (s->main_pid == pid) {
2797
/* Forking services may occasionally move to a new PID.
2798
* As long as they update the PID file before exiting the old
2799
* PID, they're fine. */
2800
if (service_load_pid_file(s, false) == 0)
2804
exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
2806
/* If this is not a forking service than the main
2807
* process got started and hence we copy the exit
2808
* status so that it is recorded both as main and as
2809
* control process exit status */
2810
if (s->main_command) {
2811
s->main_command->exec_status = s->main_exec_status;
2813
if (s->main_command->ignore)
2814
f = SERVICE_SUCCESS;
2817
log_full(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2818
"%s: main process exited, code=%s, status=%i", u->id, sigchld_code_to_string(code), status);
2820
if (f != SERVICE_SUCCESS)
2823
if (s->main_command &&
2824
s->main_command->command_next &&
2825
f == SERVICE_SUCCESS) {
2827
/* There is another command to *
2828
* execute, so let's do that. */
2830
log_debug("%s running next main command for state %s", u->id, service_state_to_string(s->state));
2831
service_run_next_main(s);
2835
/* The service exited, so the service is officially
2837
s->main_command = NULL;
2841
case SERVICE_START_POST:
2842
case SERVICE_RELOAD:
2844
/* Need to wait until the operation is
2849
if (s->type == SERVICE_ONESHOT) {
2850
/* This was our main goal, so let's go on */
2851
if (f == SERVICE_SUCCESS)
2852
service_enter_start_post(s);
2854
service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
2857
assert(s->type == SERVICE_DBUS || s->type == SERVICE_NOTIFY);
2862
case SERVICE_RUNNING:
2863
service_enter_running(s, f);
2866
case SERVICE_STOP_SIGTERM:
2867
case SERVICE_STOP_SIGKILL:
2869
if (!control_pid_good(s))
2870
service_enter_stop_post(s, f);
2872
/* If there is still a control process, wait for that first */
2876
assert_not_reached("Uh, main process died at wrong time.");
2880
} else if (s->control_pid == pid) {
2884
if (s->control_command) {
2885
exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
2887
if (s->control_command->ignore)
2888
f = SERVICE_SUCCESS;
2891
log_full(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2892
"%s: control process exited, code=%s status=%i", u->id, sigchld_code_to_string(code), status);
2894
if (f != SERVICE_SUCCESS)
2897
if (s->control_command &&
2898
s->control_command->command_next &&
2899
f == SERVICE_SUCCESS) {
2901
/* There is another command to *
2902
* execute, so let's do that. */
2904
log_debug("%s running next control command for state %s", u->id, service_state_to_string(s->state));
2905
service_run_next_control(s);
2908
/* No further commands for this step, so let's
2909
* figure out what to do next */
2911
s->control_command = NULL;
2912
s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2914
log_debug("%s got final SIGCHLD for state %s", u->id, service_state_to_string(s->state));
2918
case SERVICE_START_PRE:
2919
if (f == SERVICE_SUCCESS)
2920
service_enter_start(s);
2922
service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
2926
assert(s->type == SERVICE_FORKING);
2928
if (f != SERVICE_SUCCESS) {
2929
service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
2934
bool has_start_post;
2937
/* Let's try to load the pid file here if we can.
2938
* The PID file might actually be created by a START_POST
2939
* script. In that case don't worry if the loading fails. */
2941
has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
2942
r = service_load_pid_file(s, !has_start_post);
2943
if (!has_start_post && r < 0) {
2944
r = service_demand_pid_file(s);
2945
if (r < 0 || !cgroup_good(s))
2946
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2950
service_search_main_pid(s);
2952
service_enter_start_post(s);
2955
case SERVICE_START_POST:
2956
if (f != SERVICE_SUCCESS) {
2957
service_enter_stop(s, f);
2964
r = service_load_pid_file(s, true);
2966
r = service_demand_pid_file(s);
2967
if (r < 0 || !cgroup_good(s))
2968
service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2972
service_search_main_pid(s);
2974
service_enter_running(s, SERVICE_SUCCESS);
2977
case SERVICE_RELOAD:
2978
if (f == SERVICE_SUCCESS) {
2979
service_load_pid_file(s, true);
2980
service_search_main_pid(s);
2983
s->reload_result = f;
2984
service_enter_running(s, SERVICE_SUCCESS);
2988
service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
2991
case SERVICE_STOP_SIGTERM:
2992
case SERVICE_STOP_SIGKILL:
2993
if (main_pid_good(s) <= 0)
2994
service_enter_stop_post(s, f);
2996
/* If there is still a service
2997
* process around, wait until
2998
* that one quit, too */
3001
case SERVICE_STOP_POST:
3002
case SERVICE_FINAL_SIGTERM:
3003
case SERVICE_FINAL_SIGKILL:
3004
service_enter_dead(s, f, true);
3008
assert_not_reached("Uh, control process died at wrong time.");
3013
/* Notify clients about changed exit status */
3014
unit_add_to_dbus_queue(u);
3017
static void service_timer_event(Unit *u, uint64_t elapsed, Watch* w) {
3018
Service *s = SERVICE(u);
3021
assert(elapsed == 1);
3023
if (w == &s->watchdog_watch) {
3024
service_handle_watchdog(s);
3028
assert(w == &s->timer_watch);
3032
case SERVICE_START_PRE:
3034
log_warning("%s operation timed out. Terminating.", u->id);
3035
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3038
case SERVICE_START_POST:
3039
log_warning("%s operation timed out. Stopping.", u->id);
3040
service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
3043
case SERVICE_RELOAD:
3044
log_warning("%s operation timed out. Stopping.", u->id);
3045
s->reload_result = SERVICE_FAILURE_TIMEOUT;
3046
service_enter_running(s, SERVICE_SUCCESS);
3050
log_warning("%s stopping timed out. Terminating.", u->id);
3051
service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3054
case SERVICE_STOP_SIGTERM:
3055
if (s->exec_context.send_sigkill) {
3056
log_warning("%s stopping timed out. Killing.", u->id);
3057
service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3059
log_warning("%s stopping timed out. Skipping SIGKILL.", u->id);
3060
service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3065
case SERVICE_STOP_SIGKILL:
3066
/* Uh, we sent a SIGKILL and it is still not gone?
3067
* Must be something we cannot kill, so let's just be
3068
* weirded out and continue */
3070
log_warning("%s still around after SIGKILL. Ignoring.", u->id);
3071
service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3074
case SERVICE_STOP_POST:
3075
log_warning("%s stopping timed out (2). Terminating.", u->id);
3076
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3079
case SERVICE_FINAL_SIGTERM:
3080
if (s->exec_context.send_sigkill) {
3081
log_warning("%s stopping timed out (2). Killing.", u->id);
3082
service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3084
log_warning("%s stopping timed out (2). Skipping SIGKILL. Entering failed mode.", u->id);
3085
service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
3090
case SERVICE_FINAL_SIGKILL:
3091
log_warning("%s still around after SIGKILL (2). Entering failed mode.", u->id);
3092
service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
3095
case SERVICE_AUTO_RESTART:
3096
log_info("%s holdoff time over, scheduling restart.", u->id);
3097
service_enter_restart(s);
3101
assert_not_reached("Timeout at wrong time.");
3105
static void service_cgroup_notify_event(Unit *u) {
3106
Service *s = SERVICE(u);
3110
log_debug("%s: cgroup is empty", u->id);
3114
/* Waiting for SIGCHLD is usually more interesting,
3115
* because it includes return codes/signals. Which is
3116
* why we ignore the cgroup events for most cases,
3117
* except when we don't know pid which to expect the
3121
case SERVICE_START_POST:
3122
/* If we were hoping for the daemon to write its PID file,
3123
* we can give up now. */
3124
if (s->pid_file_pathspec) {
3125
log_warning("%s never wrote its PID file. Failing.", UNIT(s)->id);
3126
service_unwatch_pid_file(s);
3127
if (s->state == SERVICE_START)
3128
service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3130
service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
3134
case SERVICE_RUNNING:
3135
/* service_enter_running() will figure out what to do */
3136
service_enter_running(s, SERVICE_SUCCESS);
3139
case SERVICE_STOP_SIGTERM:
3140
case SERVICE_STOP_SIGKILL:
3142
if (main_pid_good(s) <= 0 && !control_pid_good(s))
3143
service_enter_stop_post(s, SERVICE_SUCCESS);
3147
case SERVICE_FINAL_SIGTERM:
3148
case SERVICE_FINAL_SIGKILL:
3149
if (main_pid_good(s) <= 0 && !control_pid_good(s))
3150
service_enter_dead(s, SERVICE_SUCCESS, SERVICE_SUCCESS);
3159
static void service_notify_message(Unit *u, pid_t pid, char **tags) {
3160
Service *s = SERVICE(u);
3165
if (s->notify_access == NOTIFY_NONE) {
3166
log_warning("%s: Got notification message from PID %lu, but reception is disabled.",
3167
u->id, (unsigned long) pid);
3171
if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
3172
log_warning("%s: Got notification message from PID %lu, but reception only permitted for PID %lu",
3173
u->id, (unsigned long) pid, (unsigned long) s->main_pid);
3177
log_debug("%s: Got message", u->id);
3179
/* Interpret MAINPID= */
3180
if ((e = strv_find_prefix(tags, "MAINPID=")) &&
3181
(s->state == SERVICE_START ||
3182
s->state == SERVICE_START_POST ||
3183
s->state == SERVICE_RUNNING ||
3184
s->state == SERVICE_RELOAD)) {
3186
if (parse_pid(e + 8, &pid) < 0)
3187
log_warning("Failed to parse notification message %s", e);
3189
log_debug("%s: got %s", u->id, e);
3190
service_set_main_pid(s, pid);
3194
/* Interpret READY= */
3195
if (s->type == SERVICE_NOTIFY &&
3196
s->state == SERVICE_START &&
3197
strv_find(tags, "READY=1")) {
3198
log_debug("%s: got READY=1", u->id);
3200
service_enter_start_post(s);
3203
/* Interpret STATUS= */
3204
e = strv_find_prefix(tags, "STATUS=");
3210
if (!utf8_is_valid(e+7)) {
3211
log_warning("Status message in notification is not UTF-8 clean.");
3217
log_error("Failed to allocate string.");
3221
log_debug("%s: got %s", u->id, e);
3223
free(s->status_text);
3226
free(s->status_text);
3227
s->status_text = NULL;
3231
if (strv_find(tags, "WATCHDOG=1")) {
3232
log_debug("%s: got WATCHDOG=1", u->id);
3233
service_reset_watchdog(s);
3236
/* Notify clients about changed status or main pid */
3237
unit_add_to_dbus_queue(u);
3240
#ifdef HAVE_SYSV_COMPAT
3243
static void sysv_facility_in_insserv_conf(Manager *mgr) {
3247
if (!(f = fopen("/etc/insserv.conf", "re"))) {
3248
r = errno == ENOENT ? 0 : -errno;
3253
char l[LINE_MAX], *t;
3254
char **parsed = NULL;
3256
if (!fgets(l, sizeof(l), f)) {
3261
log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r));
3266
if (*t != '$' && *t != '<')
3269
parsed = strv_split(t,WHITESPACE);
3270
/* we ignore <interactive>, not used, equivalent to X-Interactive */
3271
if (parsed && !startswith_no_case (parsed[0], "<interactive>")) {
3274
if (sysv_translate_facility(parsed[0], NULL, &facility) < 0)
3276
if ((u = manager_get_unit(mgr, facility)) && (u->type == UNIT_TARGET)) {
3278
char *dep = NULL, *name, **j;
3280
STRV_FOREACH (j, parsed+1) {
3289
if (sysv_translate_facility(name, NULL, &dep) < 0)
3292
r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true);
3307
static int service_enumerate(Manager *m) {
3311
char *path = NULL, *fpath = NULL, *name = NULL;
3312
Set *runlevel_services[ELEMENTSOF(rcnd_table)], *shutdown_services = NULL;
3319
if (m->running_as != MANAGER_SYSTEM)
3322
zero(runlevel_services);
3324
STRV_FOREACH(p, m->lookup_paths.sysvrcnd_path)
3325
for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
3329
path = join(*p, "/", rcnd_table[i].path, NULL);
3338
if (!(d = opendir(path))) {
3339
if (errno != ENOENT)
3340
log_warning("opendir() failed on %s: %s", path, strerror(errno));
3345
while ((de = readdir(d))) {
3348
if (ignore_file(de->d_name))
3351
if (de->d_name[0] != 'S' && de->d_name[0] != 'K')
3354
if (strlen(de->d_name) < 4)
3357
a = undecchar(de->d_name[1]);
3358
b = undecchar(de->d_name[2]);
3364
fpath = join(path, "/", de->d_name, NULL);
3370
if (access(fpath, X_OK) < 0) {
3372
if (errno != ENOENT)
3373
log_warning("access() failed on %s: %s", fpath, strerror(errno));
3379
if (!(name = sysv_translate_name(de->d_name + 3))) {
3384
if ((r = manager_load_unit_prepare(m, name, NULL, NULL, &service)) < 0) {
3385
log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
3389
if (de->d_name[0] == 'S') {
3391
if (rcnd_table[i].type == RUNLEVEL_UP || rcnd_table[i].type == RUNLEVEL_SYSINIT) {
3392
SERVICE(service)->sysv_start_priority_from_rcnd =
3393
MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
3395
SERVICE(service)->sysv_enabled = true;
3398
if ((r = set_ensure_allocated(&runlevel_services[i], trivial_hash_func, trivial_compare_func)) < 0)
3401
if ((r = set_put(runlevel_services[i], service)) < 0)
3404
} else if (de->d_name[0] == 'K' &&
3405
(rcnd_table[i].type == RUNLEVEL_DOWN ||
3406
rcnd_table[i].type == RUNLEVEL_SYSINIT)) {
3408
if ((r = set_ensure_allocated(&shutdown_services, trivial_hash_func, trivial_compare_func)) < 0)
3411
if ((r = set_put(shutdown_services, service)) < 0)
3417
/* Now we loaded all stubs and are aware of the lowest
3418
start-up priority for all services, not let's actually load
3419
the services, this will also tell us which services are
3420
actually native now */
3421
manager_dispatch_load_queue(m);
3423
/* If this is a native service, rely on native ways to pull in
3424
* a service, don't pull it in via sysv rcN.d links. */
3425
for (i = 0; i < ELEMENTSOF(rcnd_table); i ++)
3426
SET_FOREACH(service, runlevel_services[i], j) {
3427
service = unit_follow_merge(service);
3429
if (service->fragment_path)
3432
if ((r = unit_add_two_dependencies_by_name_inverse(service, UNIT_AFTER, UNIT_WANTS, rcnd_table[i].target, NULL, true)) < 0)
3436
/* We honour K links only for halt/reboot. For the normal
3437
* runlevels we assume the stop jobs will be implicitly added
3438
* by the core logic. Also, we don't really distinguish here
3439
* between the runlevels 0 and 6 and just add them to the
3440
* special shutdown target. On SUSE the boot.d/ runlevel is
3441
* also used for shutdown, so we add links for that too to the
3442
* shutdown target.*/
3443
SET_FOREACH(service, shutdown_services, j) {
3444
service = unit_follow_merge(service);
3446
if (service->fragment_path)
3449
if ((r = unit_add_two_dependencies_by_name(service, UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true)) < 0)
3456
sysv_facility_in_insserv_conf (m);
3464
for (i = 0; i < ELEMENTSOF(rcnd_table); i++)
3465
set_free(runlevel_services[i]);
3466
set_free(shutdown_services);
3475
static void service_bus_name_owner_change(
3478
const char *old_owner,
3479
const char *new_owner) {
3481
Service *s = SERVICE(u);
3486
assert(streq(s->bus_name, name));
3487
assert(old_owner || new_owner);
3489
if (old_owner && new_owner)
3490
log_debug("%s's D-Bus name %s changed owner from %s to %s", u->id, name, old_owner, new_owner);
3492
log_debug("%s's D-Bus name %s no longer registered by %s", u->id, name, old_owner);
3494
log_debug("%s's D-Bus name %s now registered by %s", u->id, name, new_owner);
3496
s->bus_name_good = !!new_owner;
3498
if (s->type == SERVICE_DBUS) {
3500
/* service_enter_running() will figure out what to
3502
if (s->state == SERVICE_RUNNING)
3503
service_enter_running(s, SERVICE_SUCCESS);
3504
else if (s->state == SERVICE_START && new_owner)
3505
service_enter_start_post(s);
3507
} else if (new_owner &&
3509
(s->state == SERVICE_START ||
3510
s->state == SERVICE_START_POST ||
3511
s->state == SERVICE_RUNNING ||
3512
s->state == SERVICE_RELOAD)) {
3514
/* Try to acquire PID from bus service */
3515
log_debug("Trying to acquire PID from D-Bus name...");
3517
bus_query_pid(u->manager, name);
3521
static void service_bus_query_pid_done(
3526
Service *s = SERVICE(u);
3531
log_debug("%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
3533
if (s->main_pid <= 0 &&
3534
(s->state == SERVICE_START ||
3535
s->state == SERVICE_START_POST ||
3536
s->state == SERVICE_RUNNING ||
3537
s->state == SERVICE_RELOAD))
3538
service_set_main_pid(s, pid);
3541
int service_set_socket_fd(Service *s, int fd, Socket *sock) {
3546
/* This is called by the socket code when instantiating a new
3547
* service for a stream socket and the socket needs to be
3550
if (UNIT(s)->load_state != UNIT_LOADED)
3553
if (s->socket_fd >= 0)
3556
if (s->state != SERVICE_DEAD)
3560
s->got_socket_fd = true;
3562
unit_ref_set(&s->accept_socket, UNIT(sock));
3564
return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
3567
static void service_reset_failed(Unit *u) {
3568
Service *s = SERVICE(u);
3572
if (s->state == SERVICE_FAILED)
3573
service_set_state(s, SERVICE_DEAD);
3575
s->result = SERVICE_SUCCESS;
3576
s->reload_result = SERVICE_SUCCESS;
3579
static bool service_need_daemon_reload(Unit *u) {
3580
Service *s = SERVICE(u);
3584
#ifdef HAVE_SYSV_COMPAT
3589
if (stat(s->sysv_path, &st) < 0)
3590
/* What, cannot access this anymore? */
3593
if (s->sysv_mtime > 0 &&
3594
timespec_load(&st.st_mtim) != s->sysv_mtime)
3602
static int service_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusError *error) {
3603
Service *s = SERVICE(u);
3605
Set *pid_set = NULL;
3609
if (s->main_pid <= 0 && who == KILL_MAIN) {
3610
dbus_set_error(error, BUS_ERROR_NO_SUCH_PROCESS, "No main process to kill");
3614
if (s->control_pid <= 0 && who == KILL_CONTROL) {
3615
dbus_set_error(error, BUS_ERROR_NO_SUCH_PROCESS, "No control process to kill");
3619
if (who == KILL_CONTROL || who == KILL_ALL)
3620
if (s->control_pid > 0)
3621
if (kill(s->control_pid, signo) < 0)
3624
if (who == KILL_MAIN || who == KILL_ALL)
3625
if (s->main_pid > 0)
3626
if (kill(s->main_pid, signo) < 0)
3629
if (who == KILL_ALL && mode == KILL_CONTROL_GROUP) {
3632
if (!(pid_set = set_new(trivial_hash_func, trivial_compare_func)))
3635
/* Exclude the control/main pid from being killed via the cgroup */
3636
if (s->control_pid > 0)
3637
if ((q = set_put(pid_set, LONG_TO_PTR(s->control_pid))) < 0) {
3642
if (s->main_pid > 0)
3643
if ((q = set_put(pid_set, LONG_TO_PTR(s->main_pid))) < 0) {
3648
if ((q = cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, signo, false, pid_set)) < 0)
3649
if (q != -EAGAIN && q != -ESRCH && q != -ENOENT)
3660
static const char* const service_state_table[_SERVICE_STATE_MAX] = {
3661
[SERVICE_DEAD] = "dead",
3662
[SERVICE_START_PRE] = "start-pre",
3663
[SERVICE_START] = "start",
3664
[SERVICE_START_POST] = "start-post",
3665
[SERVICE_RUNNING] = "running",
3666
[SERVICE_EXITED] = "exited",
3667
[SERVICE_RELOAD] = "reload",
3668
[SERVICE_STOP] = "stop",
3669
[SERVICE_STOP_SIGTERM] = "stop-sigterm",
3670
[SERVICE_STOP_SIGKILL] = "stop-sigkill",
3671
[SERVICE_STOP_POST] = "stop-post",
3672
[SERVICE_FINAL_SIGTERM] = "final-sigterm",
3673
[SERVICE_FINAL_SIGKILL] = "final-sigkill",
3674
[SERVICE_FAILED] = "failed",
3675
[SERVICE_AUTO_RESTART] = "auto-restart",
3678
DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
3680
static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
3681
[SERVICE_RESTART_NO] = "no",
3682
[SERVICE_RESTART_ON_SUCCESS] = "on-success",
3683
[SERVICE_RESTART_ON_FAILURE] = "on-failure",
3684
[SERVICE_RESTART_ON_ABORT] = "on-abort",
3685
[SERVICE_RESTART_ALWAYS] = "always"
3688
DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3690
static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
3691
[SERVICE_SIMPLE] = "simple",
3692
[SERVICE_FORKING] = "forking",
3693
[SERVICE_ONESHOT] = "oneshot",
3694
[SERVICE_DBUS] = "dbus",
3695
[SERVICE_NOTIFY] = "notify"
3698
DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3700
static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
3701
[SERVICE_EXEC_START_PRE] = "ExecStartPre",
3702
[SERVICE_EXEC_START] = "ExecStart",
3703
[SERVICE_EXEC_START_POST] = "ExecStartPost",
3704
[SERVICE_EXEC_RELOAD] = "ExecReload",
3705
[SERVICE_EXEC_STOP] = "ExecStop",
3706
[SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3709
DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3711
static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
3712
[NOTIFY_NONE] = "none",
3713
[NOTIFY_MAIN] = "main",
3714
[NOTIFY_ALL] = "all"
3717
DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
3719
static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3720
[SERVICE_SUCCESS] = "success",
3721
[SERVICE_FAILURE_RESOURCES] = "resources",
3722
[SERVICE_FAILURE_TIMEOUT] = "timeout",
3723
[SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3724
[SERVICE_FAILURE_SIGNAL] = "signal",
3725
[SERVICE_FAILURE_CORE_DUMP] = "core-dump",
3726
[SERVICE_FAILURE_WATCHDOG] = "watchdog"
3729
DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3731
static const char* const start_limit_action_table[_SERVICE_START_LIMIT_MAX] = {
3732
[SERVICE_START_LIMIT_NONE] = "none",
3733
[SERVICE_START_LIMIT_REBOOT] = "reboot",
3734
[SERVICE_START_LIMIT_REBOOT_FORCE] = "reboot-force",
3735
[SERVICE_START_LIMIT_REBOOT_IMMEDIATE] = "reboot-immediate"
3737
DEFINE_STRING_TABLE_LOOKUP(start_limit_action, StartLimitAction);
3739
const UnitVTable service_vtable = {
3740
.suffix = ".service",
3741
.object_size = sizeof(Service),
3746
.show_status = true,
3748
.init = service_init,
3749
.done = service_done,
3750
.load = service_load,
3752
.coldplug = service_coldplug,
3754
.dump = service_dump,
3756
.start = service_start,
3757
.stop = service_stop,
3758
.reload = service_reload,
3760
.can_reload = service_can_reload,
3762
.kill = service_kill,
3764
.serialize = service_serialize,
3765
.deserialize_item = service_deserialize_item,
3767
.active_state = service_active_state,
3768
.sub_state_to_string = service_sub_state_to_string,
3770
.check_gc = service_check_gc,
3771
.check_snapshot = service_check_snapshot,
3773
.sigchld_event = service_sigchld_event,
3774
.timer_event = service_timer_event,
3775
.fd_event = service_fd_event,
3777
.reset_failed = service_reset_failed,
3779
.need_daemon_reload = service_need_daemon_reload,
3781
.cgroup_notify_empty = service_cgroup_notify_event,
3782
.notify_message = service_notify_message,
3784
.bus_name_owner_change = service_bus_name_owner_change,
3785
.bus_query_pid_done = service_bus_query_pid_done,
3787
.bus_interface = "org.freedesktop.systemd1.Service",
3788
.bus_message_handler = bus_service_message_handler,
3789
.bus_invalidating_properties = bus_service_invalidating_properties,
3791
#ifdef HAVE_SYSV_COMPAT
3792
.enumerate = service_enumerate