1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 This file is part of systemd.
5 Copyright 2010 Lennart Poettering
7 systemd is free software; you can redistribute it and/or modify it
8 under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 2.1 of the License, or
10 (at your option) any later version.
12 systemd is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
17 You should have received a copy of the GNU Lesser General Public License
18 along with systemd; If not, see <http://www.gnu.org/licenses/>.
25 #include "sd-messages.h"
27 #include "alloc-util.h"
29 #include "bus-error.h"
30 #include "bus-kernel.h"
32 #include "dbus-service.h"
36 #include "exit-status.h"
39 #include "format-util.h"
41 #include "load-dropin.h"
42 #include "load-fragment.h"
45 #include "parse-util.h"
46 #include "path-util.h"
47 #include "process-util.h"
49 #include "signal-util.h"
51 #include "stdio-util.h"
52 #include "string-table.h"
53 #include "string-util.h"
55 #include "unit-name.h"
60 static const UnitActiveState state_translation_table
[_SERVICE_STATE_MAX
] = {
61 [SERVICE_DEAD
] = UNIT_INACTIVE
,
62 [SERVICE_START_PRE
] = UNIT_ACTIVATING
,
63 [SERVICE_START
] = UNIT_ACTIVATING
,
64 [SERVICE_START_POST
] = UNIT_ACTIVATING
,
65 [SERVICE_RUNNING
] = UNIT_ACTIVE
,
66 [SERVICE_EXITED
] = UNIT_ACTIVE
,
67 [SERVICE_RELOAD
] = UNIT_RELOADING
,
68 [SERVICE_STOP
] = UNIT_DEACTIVATING
,
69 [SERVICE_STOP_SIGABRT
] = UNIT_DEACTIVATING
,
70 [SERVICE_STOP_SIGTERM
] = UNIT_DEACTIVATING
,
71 [SERVICE_STOP_SIGKILL
] = UNIT_DEACTIVATING
,
72 [SERVICE_STOP_POST
] = UNIT_DEACTIVATING
,
73 [SERVICE_FINAL_SIGTERM
] = UNIT_DEACTIVATING
,
74 [SERVICE_FINAL_SIGKILL
] = UNIT_DEACTIVATING
,
75 [SERVICE_FAILED
] = UNIT_FAILED
,
76 [SERVICE_AUTO_RESTART
] = UNIT_ACTIVATING
79 /* For Type=idle we never want to delay any other jobs, hence we
80 * consider idle jobs active as soon as we start working on them */
81 static const UnitActiveState state_translation_table_idle
[_SERVICE_STATE_MAX
] = {
82 [SERVICE_DEAD
] = UNIT_INACTIVE
,
83 [SERVICE_START_PRE
] = UNIT_ACTIVE
,
84 [SERVICE_START
] = UNIT_ACTIVE
,
85 [SERVICE_START_POST
] = UNIT_ACTIVE
,
86 [SERVICE_RUNNING
] = UNIT_ACTIVE
,
87 [SERVICE_EXITED
] = UNIT_ACTIVE
,
88 [SERVICE_RELOAD
] = UNIT_RELOADING
,
89 [SERVICE_STOP
] = UNIT_DEACTIVATING
,
90 [SERVICE_STOP_SIGABRT
] = UNIT_DEACTIVATING
,
91 [SERVICE_STOP_SIGTERM
] = UNIT_DEACTIVATING
,
92 [SERVICE_STOP_SIGKILL
] = UNIT_DEACTIVATING
,
93 [SERVICE_STOP_POST
] = UNIT_DEACTIVATING
,
94 [SERVICE_FINAL_SIGTERM
] = UNIT_DEACTIVATING
,
95 [SERVICE_FINAL_SIGKILL
] = UNIT_DEACTIVATING
,
96 [SERVICE_FAILED
] = UNIT_FAILED
,
97 [SERVICE_AUTO_RESTART
] = UNIT_ACTIVATING
100 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
);
101 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
);
102 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
);
104 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
);
105 static void service_enter_reload_by_notify(Service
*s
);
107 static void service_init(Unit
*u
) {
108 Service
*s
= SERVICE(u
);
111 assert(u
->load_state
== UNIT_STUB
);
113 s
->timeout_start_usec
= u
->manager
->default_timeout_start_usec
;
114 s
->timeout_stop_usec
= u
->manager
->default_timeout_stop_usec
;
115 s
->restart_usec
= u
->manager
->default_restart_usec
;
116 s
->runtime_max_usec
= USEC_INFINITY
;
117 s
->type
= _SERVICE_TYPE_INVALID
;
119 s
->stdin_fd
= s
->stdout_fd
= s
->stderr_fd
= -1;
120 s
->guess_main_pid
= true;
122 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
125 static void service_unwatch_control_pid(Service
*s
) {
128 if (s
->control_pid
<= 0)
131 unit_unwatch_pid(UNIT(s
), s
->control_pid
);
135 static void service_unwatch_main_pid(Service
*s
) {
138 if (s
->main_pid
<= 0)
141 unit_unwatch_pid(UNIT(s
), s
->main_pid
);
145 static void service_unwatch_pid_file(Service
*s
) {
146 if (!s
->pid_file_pathspec
)
149 log_unit_debug(UNIT(s
), "Stopping watch for PID file %s", s
->pid_file_pathspec
->path
);
150 path_spec_unwatch(s
->pid_file_pathspec
);
151 path_spec_done(s
->pid_file_pathspec
);
152 s
->pid_file_pathspec
= mfree(s
->pid_file_pathspec
);
155 static int service_set_main_pid(Service
*s
, pid_t pid
) {
163 if (pid
== getpid_cached())
166 if (s
->main_pid
== pid
&& s
->main_pid_known
)
169 if (s
->main_pid
!= pid
) {
170 service_unwatch_main_pid(s
);
171 exec_status_start(&s
->main_exec_status
, pid
);
175 s
->main_pid_known
= true;
177 if (get_process_ppid(pid
, &ppid
) >= 0 && ppid
!= getpid_cached()) {
178 log_unit_warning(UNIT(s
), "Supervising process "PID_FMT
" which is not our child. We'll most likely not notice when it exits.", pid
);
179 s
->main_pid_alien
= true;
181 s
->main_pid_alien
= false;
186 void service_close_socket_fd(Service
*s
) {
189 /* Undo the effect of service_set_socket_fd(). */
191 s
->socket_fd
= asynchronous_close(s
->socket_fd
);
193 if (UNIT_ISSET(s
->accept_socket
)) {
194 socket_connection_unref(SOCKET(UNIT_DEREF(s
->accept_socket
)));
195 unit_ref_unset(&s
->accept_socket
);
199 static void service_stop_watchdog(Service
*s
) {
202 s
->watchdog_event_source
= sd_event_source_unref(s
->watchdog_event_source
);
203 s
->watchdog_timestamp
= DUAL_TIMESTAMP_NULL
;
206 static usec_t
service_get_watchdog_usec(Service
*s
) {
209 if (s
->watchdog_override_enable
)
210 return s
->watchdog_override_usec
;
212 return s
->watchdog_usec
;
215 static void service_start_watchdog(Service
*s
) {
217 usec_t watchdog_usec
;
221 watchdog_usec
= service_get_watchdog_usec(s
);
222 if (IN_SET(watchdog_usec
, 0, USEC_INFINITY
))
225 if (s
->watchdog_event_source
) {
226 r
= sd_event_source_set_time(s
->watchdog_event_source
, usec_add(s
->watchdog_timestamp
.monotonic
, watchdog_usec
));
228 log_unit_warning_errno(UNIT(s
), r
, "Failed to reset watchdog timer: %m");
232 r
= sd_event_source_set_enabled(s
->watchdog_event_source
, SD_EVENT_ONESHOT
);
234 r
= sd_event_add_time(
235 UNIT(s
)->manager
->event
,
236 &s
->watchdog_event_source
,
238 usec_add(s
->watchdog_timestamp
.monotonic
, watchdog_usec
), 0,
239 service_dispatch_watchdog
, s
);
241 log_unit_warning_errno(UNIT(s
), r
, "Failed to add watchdog timer: %m");
245 (void) sd_event_source_set_description(s
->watchdog_event_source
, "service-watchdog");
247 /* Let's process everything else which might be a sign
248 * of living before we consider a service died. */
249 r
= sd_event_source_set_priority(s
->watchdog_event_source
, SD_EVENT_PRIORITY_IDLE
);
253 log_unit_warning_errno(UNIT(s
), r
, "Failed to install watchdog timer: %m");
256 static void service_reset_watchdog(Service
*s
) {
259 dual_timestamp_get(&s
->watchdog_timestamp
);
260 service_start_watchdog(s
);
263 static void service_reset_watchdog_timeout(Service
*s
, usec_t watchdog_override_usec
) {
266 s
->watchdog_override_enable
= true;
267 s
->watchdog_override_usec
= watchdog_override_usec
;
268 service_reset_watchdog(s
);
270 log_unit_debug(UNIT(s
), "watchdog_usec="USEC_FMT
, s
->watchdog_usec
);
271 log_unit_debug(UNIT(s
), "watchdog_override_usec="USEC_FMT
, s
->watchdog_override_usec
);
274 static void service_fd_store_unlink(ServiceFDStore
*fs
) {
280 assert(fs
->service
->n_fd_store
> 0);
281 LIST_REMOVE(fd_store
, fs
->service
->fd_store
, fs
);
282 fs
->service
->n_fd_store
--;
285 if (fs
->event_source
) {
286 sd_event_source_set_enabled(fs
->event_source
, SD_EVENT_OFF
);
287 sd_event_source_unref(fs
->event_source
);
295 static void service_release_fd_store(Service
*s
) {
298 if (s
->n_keep_fd_store
> 0)
301 log_unit_debug(UNIT(s
), "Releasing all stored fds");
303 service_fd_store_unlink(s
->fd_store
);
305 assert(s
->n_fd_store
== 0);
308 static void service_release_resources(Unit
*u
) {
309 Service
*s
= SERVICE(u
);
313 if (!s
->fd_store
&& s
->stdin_fd
< 0 && s
->stdout_fd
< 0 && s
->stderr_fd
< 0)
316 log_unit_debug(u
, "Releasing resources.");
318 s
->stdin_fd
= safe_close(s
->stdin_fd
);
319 s
->stdout_fd
= safe_close(s
->stdout_fd
);
320 s
->stderr_fd
= safe_close(s
->stderr_fd
);
322 service_release_fd_store(s
);
325 static void service_done(Unit
*u
) {
326 Service
*s
= SERVICE(u
);
330 s
->pid_file
= mfree(s
->pid_file
);
331 s
->status_text
= mfree(s
->status_text
);
333 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
334 exec_command_free_array(s
->exec_command
, _SERVICE_EXEC_COMMAND_MAX
);
335 s
->control_command
= NULL
;
336 s
->main_command
= NULL
;
338 dynamic_creds_unref(&s
->dynamic_creds
);
340 exit_status_set_free(&s
->restart_prevent_status
);
341 exit_status_set_free(&s
->restart_force_status
);
342 exit_status_set_free(&s
->success_status
);
344 /* This will leak a process, but at least no memory or any of
346 service_unwatch_main_pid(s
);
347 service_unwatch_control_pid(s
);
348 service_unwatch_pid_file(s
);
351 unit_unwatch_bus_name(u
, s
->bus_name
);
352 s
->bus_name
= mfree(s
->bus_name
);
355 s
->bus_name_owner
= mfree(s
->bus_name_owner
);
357 service_close_socket_fd(s
);
358 s
->peer
= socket_peer_unref(s
->peer
);
360 unit_ref_unset(&s
->accept_socket
);
362 service_stop_watchdog(s
);
364 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
366 service_release_resources(u
);
369 static int on_fd_store_io(sd_event_source
*e
, int fd
, uint32_t revents
, void *userdata
) {
370 ServiceFDStore
*fs
= userdata
;
375 /* If we get either EPOLLHUP or EPOLLERR, it's time to remove this entry from the fd store */
376 log_unit_debug(UNIT(fs
->service
),
377 "Received %s on stored fd %d (%s), closing.",
378 revents
& EPOLLERR
? "EPOLLERR" : "EPOLLHUP",
379 fs
->fd
, strna(fs
->fdname
));
380 service_fd_store_unlink(fs
);
384 static int service_add_fd_store(Service
*s
, int fd
, const char *name
) {
388 /* fd is always consumed if we return >= 0 */
393 if (s
->n_fd_store
>= s
->n_fd_store_max
)
394 return -EXFULL
; /* Our store is full.
395 * Use this errno rather than E[NM]FILE to distinguish from
396 * the case where systemd itself hits the file limit. */
398 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
399 r
= same_fd(fs
->fd
, fd
);
404 return 0; /* fd already included */
408 fs
= new0(ServiceFDStore
, 1);
414 fs
->fdname
= strdup(name
?: "stored");
420 r
= sd_event_add_io(UNIT(s
)->manager
->event
, &fs
->event_source
, fd
, 0, on_fd_store_io
, fs
);
421 if (r
< 0 && r
!= -EPERM
) { /* EPERM indicates fds that aren't pollable, which is OK */
426 (void) sd_event_source_set_description(fs
->event_source
, "service-fd-store");
428 LIST_PREPEND(fd_store
, s
->fd_store
, fs
);
431 return 1; /* fd newly stored */
434 static int service_add_fd_store_set(Service
*s
, FDSet
*fds
, const char *name
) {
439 while (fdset_size(fds
) > 0) {
440 _cleanup_close_
int fd
= -1;
442 fd
= fdset_steal_first(fds
);
446 r
= service_add_fd_store(s
, fd
, name
);
448 return log_unit_warning_errno(UNIT(s
), r
,
449 "Cannot store more fds than FileDescriptorStoreMax=%u, closing remaining.",
452 return log_unit_error_errno(UNIT(s
), r
, "Failed to add fd to store: %m");
454 log_unit_debug(UNIT(s
), "Added fd %u (%s) to fd store.", fd
, strna(name
));
461 static int service_arm_timer(Service
*s
, usec_t usec
) {
466 if (s
->timer_event_source
) {
467 r
= sd_event_source_set_time(s
->timer_event_source
, usec
);
471 return sd_event_source_set_enabled(s
->timer_event_source
, SD_EVENT_ONESHOT
);
474 if (usec
== USEC_INFINITY
)
477 r
= sd_event_add_time(
478 UNIT(s
)->manager
->event
,
479 &s
->timer_event_source
,
482 service_dispatch_timer
, s
);
486 (void) sd_event_source_set_description(s
->timer_event_source
, "service-timer");
491 static int service_verify(Service
*s
) {
494 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
497 if (!s
->exec_command
[SERVICE_EXEC_START
] && !s
->exec_command
[SERVICE_EXEC_STOP
]) {
498 log_unit_error(UNIT(s
), "Service lacks both ExecStart= and ExecStop= setting. Refusing.");
502 if (s
->type
!= SERVICE_ONESHOT
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
503 log_unit_error(UNIT(s
), "Service has no ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
507 if (!s
->remain_after_exit
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
508 log_unit_error(UNIT(s
), "Service has no ExecStart= setting, which is only allowed for RemainAfterExit=yes services. Refusing.");
512 if (s
->type
!= SERVICE_ONESHOT
&& s
->exec_command
[SERVICE_EXEC_START
]->command_next
) {
513 log_unit_error(UNIT(s
), "Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
517 if (s
->type
== SERVICE_ONESHOT
&& s
->restart
!= SERVICE_RESTART_NO
) {
518 log_unit_error(UNIT(s
), "Service has Restart= setting other than no, which isn't allowed for Type=oneshot services. Refusing.");
522 if (s
->type
== SERVICE_ONESHOT
&& !exit_status_set_is_empty(&s
->restart_force_status
)) {
523 log_unit_error(UNIT(s
), "Service has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.");
527 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name
) {
528 log_unit_error(UNIT(s
), "Service is of type D-Bus but no D-Bus service name has been specified. Refusing.");
532 if (s
->bus_name
&& s
->type
!= SERVICE_DBUS
)
533 log_unit_warning(UNIT(s
), "Service has a D-Bus service name specified, but is not of type dbus. Ignoring.");
535 if (s
->exec_context
.pam_name
&& !IN_SET(s
->kill_context
.kill_mode
, KILL_CONTROL_GROUP
, KILL_MIXED
)) {
536 log_unit_error(UNIT(s
), "Service has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.");
540 if (s
->usb_function_descriptors
&& !s
->usb_function_strings
)
541 log_unit_warning(UNIT(s
), "Service has USBFunctionDescriptors= setting, but no USBFunctionStrings=. Ignoring.");
543 if (!s
->usb_function_descriptors
&& s
->usb_function_strings
)
544 log_unit_warning(UNIT(s
), "Service has USBFunctionStrings= setting, but no USBFunctionDescriptors=. Ignoring.");
546 if (s
->runtime_max_usec
!= USEC_INFINITY
&& s
->type
== SERVICE_ONESHOT
)
547 log_unit_warning(UNIT(s
), "MaxRuntimeSec= has no effect in combination with Type=oneshot. Ignoring.");
552 static int service_add_default_dependencies(Service
*s
) {
557 if (!UNIT(s
)->default_dependencies
)
560 /* Add a number of automatic dependencies useful for the
561 * majority of services. */
563 if (MANAGER_IS_SYSTEM(UNIT(s
)->manager
)) {
564 /* First, pull in the really early boot stuff, and
565 * require it, so that we fail if we can't acquire
568 r
= unit_add_two_dependencies_by_name(UNIT(s
), UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_SYSINIT_TARGET
, NULL
, true, UNIT_DEPENDENCY_DEFAULT
);
573 /* In the --user instance there's no sysinit.target,
574 * in that case require basic.target instead. */
576 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_REQUIRES
, SPECIAL_BASIC_TARGET
, NULL
, true, UNIT_DEPENDENCY_DEFAULT
);
581 /* Second, if the rest of the base system is in the same
582 * transaction, order us after it, but do not pull it in or
583 * even require it. */
584 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_AFTER
, SPECIAL_BASIC_TARGET
, NULL
, true, UNIT_DEPENDENCY_DEFAULT
);
588 /* Third, add us in for normal shutdown. */
589 return unit_add_two_dependencies_by_name(UNIT(s
), UNIT_BEFORE
, UNIT_CONFLICTS
, SPECIAL_SHUTDOWN_TARGET
, NULL
, true, UNIT_DEPENDENCY_DEFAULT
);
592 static void service_fix_output(Service
*s
) {
595 /* If nothing has been explicitly configured, patch default output in. If input is socket/tty we avoid this
596 * however, since in that case we want output to default to the same place as we read input from. */
598 if (s
->exec_context
.std_error
== EXEC_OUTPUT_INHERIT
&&
599 s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
600 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
601 s
->exec_context
.std_error
= UNIT(s
)->manager
->default_std_error
;
603 if (s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
604 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
605 s
->exec_context
.std_output
= UNIT(s
)->manager
->default_std_output
;
607 if (s
->exec_context
.std_input
== EXEC_INPUT_NULL
&&
608 s
->exec_context
.stdin_data_size
> 0)
609 s
->exec_context
.std_input
= EXEC_INPUT_DATA
;
612 static int service_setup_bus_name(Service
*s
) {
620 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_REQUIRES
, SPECIAL_DBUS_SOCKET
, NULL
, true, UNIT_DEPENDENCY_FILE
);
622 return log_unit_error_errno(UNIT(s
), r
, "Failed to add dependency on " SPECIAL_DBUS_SOCKET
": %m");
624 /* We always want to be ordered against dbus.socket if both are in the transaction. */
625 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_AFTER
, SPECIAL_DBUS_SOCKET
, NULL
, true, UNIT_DEPENDENCY_FILE
);
627 return log_unit_error_errno(UNIT(s
), r
, "Failed to add dependency on " SPECIAL_DBUS_SOCKET
": %m");
629 r
= unit_watch_bus_name(UNIT(s
), s
->bus_name
);
631 return log_unit_error_errno(UNIT(s
), r
, "Two services allocated for the same bus name %s, refusing operation.", s
->bus_name
);
633 return log_unit_error_errno(UNIT(s
), r
, "Cannot watch bus name %s: %m", s
->bus_name
);
638 static int service_add_extras(Service
*s
) {
643 if (s
->type
== _SERVICE_TYPE_INVALID
) {
644 /* Figure out a type automatically */
646 s
->type
= SERVICE_DBUS
;
647 else if (s
->exec_command
[SERVICE_EXEC_START
])
648 s
->type
= SERVICE_SIMPLE
;
650 s
->type
= SERVICE_ONESHOT
;
653 /* Oneshot services have disabled start timeout by default */
654 if (s
->type
== SERVICE_ONESHOT
&& !s
->start_timeout_defined
)
655 s
->timeout_start_usec
= USEC_INFINITY
;
657 service_fix_output(s
);
659 r
= unit_patch_contexts(UNIT(s
));
663 r
= unit_add_exec_dependencies(UNIT(s
), &s
->exec_context
);
667 r
= unit_set_default_slice(UNIT(s
));
671 if (s
->type
== SERVICE_NOTIFY
&& s
->notify_access
== NOTIFY_NONE
)
672 s
->notify_access
= NOTIFY_MAIN
;
674 if (s
->watchdog_usec
> 0 && s
->notify_access
== NOTIFY_NONE
)
675 s
->notify_access
= NOTIFY_MAIN
;
677 r
= service_add_default_dependencies(s
);
681 r
= service_setup_bus_name(s
);
688 static int service_load(Unit
*u
) {
689 Service
*s
= SERVICE(u
);
694 /* Load a .service file */
695 r
= unit_load_fragment(u
);
699 /* Still nothing found? Then let's give up */
700 if (u
->load_state
== UNIT_STUB
)
703 /* This is a new unit? Then let's add in some extras */
704 if (u
->load_state
== UNIT_LOADED
) {
706 /* We were able to load something, then let's add in
707 * the dropin directories. */
708 r
= unit_load_dropin(u
);
712 /* This is a new unit? Then let's add in some
714 r
= service_add_extras(s
);
719 return service_verify(s
);
722 static void service_dump(Unit
*u
, FILE *f
, const char *prefix
) {
723 ServiceExecCommand c
;
724 Service
*s
= SERVICE(u
);
729 prefix
= strempty(prefix
);
730 prefix2
= strjoina(prefix
, "\t");
733 "%sService State: %s\n"
735 "%sReload Result: %s\n"
736 "%sPermissionsStartOnly: %s\n"
737 "%sRootDirectoryStartOnly: %s\n"
738 "%sRemainAfterExit: %s\n"
739 "%sGuessMainPID: %s\n"
742 "%sNotifyAccess: %s\n"
743 "%sNotifyState: %s\n",
744 prefix
, service_state_to_string(s
->state
),
745 prefix
, service_result_to_string(s
->result
),
746 prefix
, service_result_to_string(s
->reload_result
),
747 prefix
, yes_no(s
->permissions_start_only
),
748 prefix
, yes_no(s
->root_directory_start_only
),
749 prefix
, yes_no(s
->remain_after_exit
),
750 prefix
, yes_no(s
->guess_main_pid
),
751 prefix
, service_type_to_string(s
->type
),
752 prefix
, service_restart_to_string(s
->restart
),
753 prefix
, notify_access_to_string(s
->notify_access
),
754 prefix
, notify_state_to_string(s
->notify_state
));
756 if (s
->control_pid
> 0)
758 "%sControl PID: "PID_FMT
"\n",
759 prefix
, s
->control_pid
);
763 "%sMain PID: "PID_FMT
"\n"
764 "%sMain PID Known: %s\n"
765 "%sMain PID Alien: %s\n",
767 prefix
, yes_no(s
->main_pid_known
),
768 prefix
, yes_no(s
->main_pid_alien
));
773 prefix
, s
->pid_file
);
778 "%sBus Name Good: %s\n",
780 prefix
, yes_no(s
->bus_name_good
));
782 if (UNIT_ISSET(s
->accept_socket
))
784 "%sAccept Socket: %s\n",
785 prefix
, UNIT_DEREF(s
->accept_socket
)->id
);
787 kill_context_dump(&s
->kill_context
, f
, prefix
);
788 exec_context_dump(&s
->exec_context
, f
, prefix
);
790 for (c
= 0; c
< _SERVICE_EXEC_COMMAND_MAX
; c
++) {
792 if (!s
->exec_command
[c
])
795 fprintf(f
, "%s-> %s:\n",
796 prefix
, service_exec_command_to_string(c
));
798 exec_command_dump_list(s
->exec_command
[c
], f
, prefix2
);
802 fprintf(f
, "%sStatus Text: %s\n",
803 prefix
, s
->status_text
);
805 if (s
->n_fd_store_max
> 0)
807 "%sFile Descriptor Store Max: %u\n"
808 "%sFile Descriptor Store Current: %u\n",
809 prefix
, s
->n_fd_store_max
,
810 prefix
, s
->n_fd_store
);
812 cgroup_context_dump(&s
->cgroup_context
, f
, prefix
);
815 static int service_load_pid_file(Service
*s
, bool may_warn
) {
816 _cleanup_free_
char *k
= NULL
;
825 r
= read_one_line_file(s
->pid_file
, &k
);
828 log_unit_info_errno(UNIT(s
), r
, "PID file %s not readable (yet?) after %s: %m", s
->pid_file
, service_state_to_string(s
->state
));
832 r
= parse_pid(k
, &pid
);
835 log_unit_info_errno(UNIT(s
), r
, "Failed to read PID from file %s: %m", s
->pid_file
);
839 if (!pid_is_alive(pid
)) {
841 log_unit_info(UNIT(s
), "PID "PID_FMT
" read from file %s does not exist or is a zombie.", pid
, s
->pid_file
);
845 if (s
->main_pid_known
) {
846 if (pid
== s
->main_pid
)
849 log_unit_debug(UNIT(s
), "Main PID changing: "PID_FMT
" -> "PID_FMT
, s
->main_pid
, pid
);
851 service_unwatch_main_pid(s
);
852 s
->main_pid_known
= false;
854 log_unit_debug(UNIT(s
), "Main PID loaded: "PID_FMT
, pid
);
856 r
= service_set_main_pid(s
, pid
);
860 r
= unit_watch_pid(UNIT(s
), pid
);
861 if (r
< 0) /* FIXME: we need to do something here */
862 return log_unit_warning_errno(UNIT(s
), r
, "Failed to watch PID "PID_FMT
" for service: %m", pid
);
867 static void service_search_main_pid(Service
*s
) {
873 /* If we know it anyway, don't ever fallback to unreliable
875 if (s
->main_pid_known
)
878 if (!s
->guess_main_pid
)
881 assert(s
->main_pid
<= 0);
883 if (unit_search_main_pid(UNIT(s
), &pid
) < 0)
886 log_unit_debug(UNIT(s
), "Main PID guessed: "PID_FMT
, pid
);
887 if (service_set_main_pid(s
, pid
) < 0)
890 r
= unit_watch_pid(UNIT(s
), pid
);
892 /* FIXME: we need to do something here */
893 log_unit_warning_errno(UNIT(s
), r
, "Failed to watch PID "PID_FMT
" from: %m", pid
);
896 static void service_set_state(Service
*s
, ServiceState state
) {
897 ServiceState old_state
;
898 const UnitActiveState
*table
;
902 table
= s
->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
904 old_state
= s
->state
;
907 service_unwatch_pid_file(s
);
910 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
913 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
914 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
,
915 SERVICE_AUTO_RESTART
))
916 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
919 SERVICE_START
, SERVICE_START_POST
,
920 SERVICE_RUNNING
, SERVICE_RELOAD
,
921 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
922 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
923 service_unwatch_main_pid(s
);
924 s
->main_command
= NULL
;
928 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
930 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
931 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
932 service_unwatch_control_pid(s
);
933 s
->control_command
= NULL
;
934 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
937 if (IN_SET(state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
938 unit_unwatch_all_pids(UNIT(s
));
941 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
942 SERVICE_RUNNING
, SERVICE_RELOAD
,
943 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
944 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
) &&
945 !(state
== SERVICE_DEAD
&& UNIT(s
)->job
))
946 service_close_socket_fd(s
);
948 if (!IN_SET(state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
949 service_stop_watchdog(s
);
951 /* For the inactive states unit_notify() will trim the cgroup,
952 * but for exit we have to do that ourselves... */
953 if (state
== SERVICE_EXITED
&& !MANAGER_IS_RELOADING(UNIT(s
)->manager
))
954 unit_prune_cgroup(UNIT(s
));
956 /* For remain_after_exit services, let's see if we can "release" the
957 * hold on the console, since unit_notify() only does that in case of
959 if (state
== SERVICE_EXITED
&&
960 s
->remain_after_exit
&&
961 UNIT(s
)->manager
->n_on_console
> 0) {
965 ec
= unit_get_exec_context(UNIT(s
));
966 if (ec
&& exec_context_may_touch_console(ec
)) {
967 Manager
*m
= UNIT(s
)->manager
;
970 if (m
->n_on_console
== 0)
971 /* unset no_console_output flag, since the console is free */
972 m
->no_console_output
= false;
976 if (old_state
!= state
)
977 log_unit_debug(UNIT(s
), "Changed %s -> %s", service_state_to_string(old_state
), service_state_to_string(state
));
979 unit_notify(UNIT(s
), table
[old_state
], table
[state
], s
->reload_result
== SERVICE_SUCCESS
);
982 static usec_t
service_coldplug_timeout(Service
*s
) {
985 switch (s
->deserialized_state
) {
987 case SERVICE_START_PRE
:
989 case SERVICE_START_POST
:
991 return usec_add(UNIT(s
)->state_change_timestamp
.monotonic
, s
->timeout_start_usec
);
993 case SERVICE_RUNNING
:
994 return usec_add(UNIT(s
)->active_enter_timestamp
.monotonic
, s
->runtime_max_usec
);
997 case SERVICE_STOP_SIGABRT
:
998 case SERVICE_STOP_SIGTERM
:
999 case SERVICE_STOP_SIGKILL
:
1000 case SERVICE_STOP_POST
:
1001 case SERVICE_FINAL_SIGTERM
:
1002 case SERVICE_FINAL_SIGKILL
:
1003 return usec_add(UNIT(s
)->state_change_timestamp
.monotonic
, s
->timeout_stop_usec
);
1005 case SERVICE_AUTO_RESTART
:
1006 return usec_add(UNIT(s
)->inactive_enter_timestamp
.monotonic
, s
->restart_usec
);
1009 return USEC_INFINITY
;
1013 static int service_coldplug(Unit
*u
) {
1014 Service
*s
= SERVICE(u
);
1018 assert(s
->state
== SERVICE_DEAD
);
1020 if (s
->deserialized_state
== s
->state
)
1023 r
= service_arm_timer(s
, service_coldplug_timeout(s
));
1027 if (s
->main_pid
> 0 &&
1028 pid_is_unwaited(s
->main_pid
) &&
1029 ((s
->deserialized_state
== SERVICE_START
&& IN_SET(s
->type
, SERVICE_FORKING
, SERVICE_DBUS
, SERVICE_ONESHOT
, SERVICE_NOTIFY
)) ||
1030 IN_SET(s
->deserialized_state
,
1031 SERVICE_START
, SERVICE_START_POST
,
1032 SERVICE_RUNNING
, SERVICE_RELOAD
,
1033 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1034 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))) {
1035 r
= unit_watch_pid(UNIT(s
), s
->main_pid
);
1040 if (s
->control_pid
> 0 &&
1041 pid_is_unwaited(s
->control_pid
) &&
1042 IN_SET(s
->deserialized_state
,
1043 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
1045 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1046 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
1047 r
= unit_watch_pid(UNIT(s
), s
->control_pid
);
1052 if (!IN_SET(s
->deserialized_state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
1053 unit_watch_all_pids(UNIT(s
));
1055 if (IN_SET(s
->deserialized_state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
1056 service_start_watchdog(s
);
1058 if (!IN_SET(s
->deserialized_state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
1059 (void) unit_setup_dynamic_creds(u
);
1061 if (UNIT_ISSET(s
->accept_socket
)) {
1062 Socket
* socket
= SOCKET(UNIT_DEREF(s
->accept_socket
));
1064 if (socket
->max_connections_per_source
> 0) {
1067 /* Make a best-effort attempt at bumping the connection count */
1068 if (socket_acquire_peer(socket
, s
->socket_fd
, &peer
) > 0) {
1069 socket_peer_unref(s
->peer
);
1075 service_set_state(s
, s
->deserialized_state
);
1079 static int service_collect_fds(Service
*s
,
1082 unsigned *n_storage_fds
,
1083 unsigned *n_socket_fds
) {
1085 _cleanup_strv_free_
char **rfd_names
= NULL
;
1086 _cleanup_free_
int *rfds
= NULL
;
1087 unsigned rn_socket_fds
= 0, rn_storage_fds
= 0;
1093 assert(n_socket_fds
);
1095 if (s
->socket_fd
>= 0) {
1097 /* Pass the per-connection socket */
1102 rfds
[0] = s
->socket_fd
;
1104 rfd_names
= strv_new("connection", NULL
);
1114 /* Pass all our configured sockets for singleton services */
1116 HASHMAP_FOREACH_KEY(v
, u
, UNIT(s
)->dependencies
[UNIT_TRIGGERED_BY
], i
) {
1117 _cleanup_free_
int *cfds
= NULL
;
1121 if (u
->type
!= UNIT_SOCKET
)
1126 cn_fds
= socket_collect_fds(sock
, &cfds
);
1135 rn_socket_fds
= cn_fds
;
1141 t
= realloc(rfds
, (rn_socket_fds
+ cn_fds
) * sizeof(int));
1145 memcpy(t
+ rn_socket_fds
, cfds
, cn_fds
* sizeof(int));
1148 rn_socket_fds
+= cn_fds
;
1151 r
= strv_extend_n(&rfd_names
, socket_fdname(sock
), cn_fds
);
1157 if (s
->n_fd_store
> 0) {
1163 t
= realloc(rfds
, (rn_socket_fds
+ s
->n_fd_store
) * sizeof(int));
1169 nl
= realloc(rfd_names
, (rn_socket_fds
+ s
->n_fd_store
+ 1) * sizeof(char*));
1174 n_fds
= rn_socket_fds
;
1176 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
1177 rfds
[n_fds
] = fs
->fd
;
1178 rfd_names
[n_fds
] = strdup(strempty(fs
->fdname
));
1179 if (!rfd_names
[n_fds
])
1186 rfd_names
[n_fds
] = NULL
;
1190 *fd_names
= rfd_names
;
1191 *n_socket_fds
= rn_socket_fds
;
1192 *n_storage_fds
= rn_storage_fds
;
1200 static bool service_exec_needs_notify_socket(Service
*s
, ExecFlags flags
) {
1203 /* Notifications are accepted depending on the process and
1204 * the access setting of the service:
1205 * process: \ access: NONE MAIN EXEC ALL
1206 * main no yes yes yes
1207 * control no no yes yes
1208 * other (forked) no no no yes */
1210 if (flags
& EXEC_IS_CONTROL
)
1211 /* A control process */
1212 return IN_SET(s
->notify_access
, NOTIFY_EXEC
, NOTIFY_ALL
);
1214 /* We only spawn main processes and control processes, so any
1215 * process that is not a control process is a main process */
1216 return s
->notify_access
!= NOTIFY_NONE
;
1219 static int service_spawn(
1226 ExecParameters exec_params
= {
1232 _cleanup_strv_free_
char **final_env
= NULL
, **our_env
= NULL
, **fd_names
= NULL
;
1233 unsigned n_storage_fds
= 0, n_socket_fds
= 0, n_env
= 0;
1234 _cleanup_free_
int *fds
= NULL
;
1242 r
= unit_prepare_exec(UNIT(s
));
1246 if (flags
& EXEC_IS_CONTROL
) {
1247 /* If this is a control process, mask the permissions/chroot application if this is requested. */
1248 if (s
->permissions_start_only
)
1249 exec_params
.flags
&= ~EXEC_APPLY_SANDBOXING
;
1250 if (s
->root_directory_start_only
)
1251 exec_params
.flags
&= ~EXEC_APPLY_CHROOT
;
1254 if ((flags
& EXEC_PASS_FDS
) ||
1255 s
->exec_context
.std_input
== EXEC_INPUT_SOCKET
||
1256 s
->exec_context
.std_output
== EXEC_OUTPUT_SOCKET
||
1257 s
->exec_context
.std_error
== EXEC_OUTPUT_SOCKET
) {
1259 r
= service_collect_fds(s
, &fds
, &fd_names
, &n_storage_fds
, &n_socket_fds
);
1263 log_unit_debug(UNIT(s
), "Passing %i fds to service", n_storage_fds
+ n_socket_fds
);
1266 r
= service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), timeout
));
1270 our_env
= new0(char*, 9);
1274 if (service_exec_needs_notify_socket(s
, flags
))
1275 if (asprintf(our_env
+ n_env
++, "NOTIFY_SOCKET=%s", UNIT(s
)->manager
->notify_socket
) < 0)
1278 if (s
->main_pid
> 0)
1279 if (asprintf(our_env
+ n_env
++, "MAINPID="PID_FMT
, s
->main_pid
) < 0)
1282 if (MANAGER_IS_USER(UNIT(s
)->manager
))
1283 if (asprintf(our_env
+ n_env
++, "MANAGERPID="PID_FMT
, getpid_cached()) < 0)
1286 if (s
->socket_fd
>= 0) {
1287 union sockaddr_union sa
;
1288 socklen_t salen
= sizeof(sa
);
1290 /* If this is a per-connection service instance, let's set $REMOTE_ADDR and $REMOTE_PORT to something
1291 * useful. Note that we do this only when we are still connected at this point in time, which we might
1292 * very well not be. Hence we ignore all errors when retrieving peer information (as that might result
1293 * in ENOTCONN), and just use whate we can use. */
1295 if (getpeername(s
->socket_fd
, &sa
.sa
, &salen
) >= 0 &&
1296 IN_SET(sa
.sa
.sa_family
, AF_INET
, AF_INET6
, AF_VSOCK
)) {
1298 _cleanup_free_
char *addr
= NULL
;
1302 r
= sockaddr_pretty(&sa
.sa
, salen
, true, false, &addr
);
1306 t
= strappend("REMOTE_ADDR=", addr
);
1309 our_env
[n_env
++] = t
;
1311 r
= sockaddr_port(&sa
.sa
, &port
);
1315 if (asprintf(&t
, "REMOTE_PORT=%u", port
) < 0)
1317 our_env
[n_env
++] = t
;
1321 if (flags
& EXEC_SETENV_RESULT
) {
1322 if (asprintf(our_env
+ n_env
++, "SERVICE_RESULT=%s", service_result_to_string(s
->result
)) < 0)
1325 if (s
->main_exec_status
.pid
> 0 &&
1326 dual_timestamp_is_set(&s
->main_exec_status
.exit_timestamp
)) {
1327 if (asprintf(our_env
+ n_env
++, "EXIT_CODE=%s", sigchld_code_to_string(s
->main_exec_status
.code
)) < 0)
1330 if (s
->main_exec_status
.code
== CLD_EXITED
)
1331 r
= asprintf(our_env
+ n_env
++, "EXIT_STATUS=%i", s
->main_exec_status
.status
);
1333 r
= asprintf(our_env
+ n_env
++, "EXIT_STATUS=%s", signal_to_string(s
->main_exec_status
.status
));
1339 manager_set_exec_params(UNIT(s
)->manager
, &exec_params
);
1340 unit_set_exec_params(UNIT(s
), &exec_params
);
1342 final_env
= strv_env_merge(2, exec_params
.environment
, our_env
, NULL
);
1346 if ((flags
& EXEC_IS_CONTROL
) && UNIT(s
)->cgroup_path
) {
1347 exec_params
.cgroup_path
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1348 (void) cg_create(SYSTEMD_CGROUP_CONTROLLER
, exec_params
.cgroup_path
);
1351 /* System services should get a new keyring by default. */
1352 SET_FLAG(exec_params
.flags
, EXEC_NEW_KEYRING
, MANAGER_IS_SYSTEM(UNIT(s
)->manager
));
1354 /* System D-Bus needs nss-systemd disabled, so that we don't deadlock */
1355 SET_FLAG(exec_params
.flags
, EXEC_NSS_BYPASS_BUS
,
1356 MANAGER_IS_SYSTEM(UNIT(s
)->manager
) && unit_has_name(UNIT(s
), SPECIAL_DBUS_SERVICE
));
1358 exec_params
.argv
= c
->argv
;
1359 exec_params
.environment
= final_env
;
1360 exec_params
.fds
= fds
;
1361 exec_params
.fd_names
= fd_names
;
1362 exec_params
.n_storage_fds
= n_storage_fds
;
1363 exec_params
.n_socket_fds
= n_socket_fds
;
1364 exec_params
.watchdog_usec
= s
->watchdog_usec
;
1365 exec_params
.selinux_context_net
= s
->socket_fd_selinux_context_net
;
1366 if (s
->type
== SERVICE_IDLE
)
1367 exec_params
.idle_pipe
= UNIT(s
)->manager
->idle_pipe
;
1368 exec_params
.stdin_fd
= s
->stdin_fd
;
1369 exec_params
.stdout_fd
= s
->stdout_fd
;
1370 exec_params
.stderr_fd
= s
->stderr_fd
;
1372 r
= exec_spawn(UNIT(s
),
1382 r
= unit_watch_pid(UNIT(s
), pid
);
1383 if (r
< 0) /* FIXME: we need to do something here */
1391 static int main_pid_good(Service
*s
) {
1394 /* Returns 0 if the pid is dead, > 0 if it is good, < 0 if we don't know */
1396 /* If we know the pid file, then let's just check if it is
1398 if (s
->main_pid_known
) {
1400 /* If it's an alien child let's check if it is still
1402 if (s
->main_pid_alien
&& s
->main_pid
> 0)
1403 return pid_is_alive(s
->main_pid
);
1405 /* .. otherwise assume we'll get a SIGCHLD for it,
1406 * which we really should wait for to collect exit
1407 * status and code */
1408 return s
->main_pid
> 0;
1411 /* We don't know the pid */
1415 static int control_pid_good(Service
*s
) {
1418 /* Returns 0 if the control PID is dead, > 0 if it is good. We never actually return < 0 here, but in order to
1419 * make this function as similar as possible to main_pid_good() and cgroup_good(), we pretend that < 0 also
1420 * means: we can't figure it out. */
1422 return s
->control_pid
> 0;
1425 static int cgroup_good(Service
*s
) {
1430 /* Returns 0 if the cgroup is empty or doesn't exist, > 0 if it is exists and is populated, < 0 if we can't
1433 if (!UNIT(s
)->cgroup_path
)
1436 r
= cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER
, UNIT(s
)->cgroup_path
);
1443 static bool service_shall_restart(Service
*s
) {
1446 /* Don't restart after manual stops */
1447 if (s
->forbid_restart
)
1450 /* Never restart if this is configured as special exception */
1451 if (exit_status_set_test(&s
->restart_prevent_status
, s
->main_exec_status
.code
, s
->main_exec_status
.status
))
1454 /* Restart if the exit code/status are configured as restart triggers */
1455 if (exit_status_set_test(&s
->restart_force_status
, s
->main_exec_status
.code
, s
->main_exec_status
.status
))
1458 switch (s
->restart
) {
1460 case SERVICE_RESTART_NO
:
1463 case SERVICE_RESTART_ALWAYS
:
1466 case SERVICE_RESTART_ON_SUCCESS
:
1467 return s
->result
== SERVICE_SUCCESS
;
1469 case SERVICE_RESTART_ON_FAILURE
:
1470 return s
->result
!= SERVICE_SUCCESS
;
1472 case SERVICE_RESTART_ON_ABNORMAL
:
1473 return !IN_SET(s
->result
, SERVICE_SUCCESS
, SERVICE_FAILURE_EXIT_CODE
);
1475 case SERVICE_RESTART_ON_WATCHDOG
:
1476 return s
->result
== SERVICE_FAILURE_WATCHDOG
;
1478 case SERVICE_RESTART_ON_ABORT
:
1479 return IN_SET(s
->result
, SERVICE_FAILURE_SIGNAL
, SERVICE_FAILURE_CORE_DUMP
);
1482 assert_not_reached("unknown restart setting");
1486 static bool service_will_restart(Service
*s
) {
1489 if (s
->state
== SERVICE_AUTO_RESTART
)
1493 if (UNIT(s
)->job
->type
== JOB_START
)
1498 static void service_enter_dead(Service
*s
, ServiceResult f
, bool allow_restart
) {
1503 /* If there's a stop job queued before we enter the DEAD state, we shouldn't act on Restart=, in order to not
1504 * undo what has already been enqueued. */
1505 if (unit_stop_pending(UNIT(s
)))
1506 allow_restart
= false;
1508 if (s
->result
== SERVICE_SUCCESS
)
1511 if (s
->result
!= SERVICE_SUCCESS
)
1512 log_unit_warning(UNIT(s
), "Failed with result '%s'.", service_result_to_string(s
->result
));
1514 /* Make sure service_release_resources() doesn't destroy our FD store, while we are changing through
1515 * SERVICE_FAILED/SERVICE_DEAD before entering into SERVICE_AUTO_RESTART. */
1516 s
->n_keep_fd_store
++;
1518 service_set_state(s
, s
->result
!= SERVICE_SUCCESS
? SERVICE_FAILED
: SERVICE_DEAD
);
1520 if (allow_restart
&& service_shall_restart(s
)) {
1522 r
= service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), s
->restart_usec
));
1524 s
->n_keep_fd_store
--;
1528 service_set_state(s
, SERVICE_AUTO_RESTART
);
1530 /* If we shan't restart, then flush out the restart counter. But don't do that immediately, so that the
1531 * user can still introspect the counter. Do so on the next start. */
1532 s
->flush_n_restarts
= true;
1534 /* The new state is in effect, let's decrease the fd store ref counter again. Let's also readd us to the GC
1535 * queue, so that the fd store is possibly gc'ed again */
1536 s
->n_keep_fd_store
--;
1537 unit_add_to_gc_queue(UNIT(s
));
1539 /* The next restart might not be a manual stop, hence reset the flag indicating manual stops */
1540 s
->forbid_restart
= false;
1542 /* We want fresh tmpdirs in case service is started again immediately */
1543 exec_runtime_destroy(s
->exec_runtime
);
1544 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
1546 if (s
->exec_context
.runtime_directory_preserve_mode
== EXEC_PRESERVE_NO
||
1547 (s
->exec_context
.runtime_directory_preserve_mode
== EXEC_PRESERVE_RESTART
&& !service_will_restart(s
)))
1548 /* Also, remove the runtime directory */
1549 exec_context_destroy_runtime_directory(&s
->exec_context
, UNIT(s
)->manager
->prefix
[EXEC_DIRECTORY_RUNTIME
]);
1551 /* Get rid of the IPC bits of the user */
1552 unit_unref_uid_gid(UNIT(s
), true);
1554 /* Release the user, and destroy it if we are the only remaining owner */
1555 dynamic_creds_destroy(&s
->dynamic_creds
);
1557 /* Try to delete the pid file. At this point it will be
1558 * out-of-date, and some software might be confused by it, so
1559 * let's remove it. */
1561 (void) unlink(s
->pid_file
);
1566 log_unit_warning_errno(UNIT(s
), r
, "Failed to run install restart timer: %m");
1567 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1570 static void service_enter_stop_post(Service
*s
, ServiceResult f
) {
1574 if (s
->result
== SERVICE_SUCCESS
)
1577 service_unwatch_control_pid(s
);
1578 unit_watch_all_pids(UNIT(s
));
1580 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP_POST
];
1581 if (s
->control_command
) {
1582 s
->control_command_id
= SERVICE_EXEC_STOP_POST
;
1584 r
= service_spawn(s
,
1586 s
->timeout_stop_usec
,
1587 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_APPLY_TTY_STDIN
|EXEC_IS_CONTROL
|EXEC_SETENV_RESULT
,
1592 service_set_state(s
, SERVICE_STOP_POST
);
1594 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_SUCCESS
);
1599 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'stop-post' task: %m");
1600 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1603 static int state_to_kill_operation(ServiceState state
) {
1606 case SERVICE_STOP_SIGABRT
:
1609 case SERVICE_STOP_SIGTERM
:
1610 case SERVICE_FINAL_SIGTERM
:
1611 return KILL_TERMINATE
;
1613 case SERVICE_STOP_SIGKILL
:
1614 case SERVICE_FINAL_SIGKILL
:
1618 return _KILL_OPERATION_INVALID
;
1622 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
) {
1627 if (s
->result
== SERVICE_SUCCESS
)
1630 unit_watch_all_pids(UNIT(s
));
1632 r
= unit_kill_context(
1635 state_to_kill_operation(state
),
1643 r
= service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), s
->timeout_stop_usec
));
1647 service_set_state(s
, state
);
1648 } else if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
) && s
->kill_context
.send_sigkill
)
1649 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_SUCCESS
);
1650 else if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
))
1651 service_enter_stop_post(s
, SERVICE_SUCCESS
);
1652 else if (state
== SERVICE_FINAL_SIGTERM
&& s
->kill_context
.send_sigkill
)
1653 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_SUCCESS
);
1655 service_enter_dead(s
, SERVICE_SUCCESS
, true);
1660 log_unit_warning_errno(UNIT(s
), r
, "Failed to kill processes: %m");
1662 if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
))
1663 service_enter_stop_post(s
, SERVICE_FAILURE_RESOURCES
);
1665 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1668 static void service_enter_stop_by_notify(Service
*s
) {
1671 unit_watch_all_pids(UNIT(s
));
1673 service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), s
->timeout_stop_usec
));
1675 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1676 service_set_state(s
, SERVICE_STOP_SIGTERM
);
1679 static void service_enter_stop(Service
*s
, ServiceResult f
) {
1684 if (s
->result
== SERVICE_SUCCESS
)
1687 service_unwatch_control_pid(s
);
1688 unit_watch_all_pids(UNIT(s
));
1690 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP
];
1691 if (s
->control_command
) {
1692 s
->control_command_id
= SERVICE_EXEC_STOP
;
1694 r
= service_spawn(s
,
1696 s
->timeout_stop_usec
,
1697 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_IS_CONTROL
|EXEC_SETENV_RESULT
,
1702 service_set_state(s
, SERVICE_STOP
);
1704 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
1709 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'stop' task: %m");
1710 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1713 static bool service_good(Service
*s
) {
1717 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name_good
)
1720 main_pid_ok
= main_pid_good(s
);
1721 if (main_pid_ok
> 0) /* It's alive */
1723 if (main_pid_ok
== 0) /* It's dead */
1726 /* OK, we don't know anything about the main PID, maybe
1727 * because there is none. Let's check the control group
1730 return cgroup_good(s
) != 0;
1733 static void service_enter_running(Service
*s
, ServiceResult f
) {
1736 if (s
->result
== SERVICE_SUCCESS
)
1739 service_unwatch_control_pid(s
);
1741 if (service_good(s
)) {
1743 /* If there are any queued up sd_notify()
1744 * notifications, process them now */
1745 if (s
->notify_state
== NOTIFY_RELOADING
)
1746 service_enter_reload_by_notify(s
);
1747 else if (s
->notify_state
== NOTIFY_STOPPING
)
1748 service_enter_stop_by_notify(s
);
1750 service_set_state(s
, SERVICE_RUNNING
);
1751 service_arm_timer(s
, usec_add(UNIT(s
)->active_enter_timestamp
.monotonic
, s
->runtime_max_usec
));
1754 } else if (f
!= SERVICE_SUCCESS
)
1755 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
1756 else if (s
->remain_after_exit
)
1757 service_set_state(s
, SERVICE_EXITED
);
1759 service_enter_stop(s
, SERVICE_SUCCESS
);
1762 static void service_enter_start_post(Service
*s
) {
1766 service_unwatch_control_pid(s
);
1767 service_reset_watchdog(s
);
1769 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_POST
];
1770 if (s
->control_command
) {
1771 s
->control_command_id
= SERVICE_EXEC_START_POST
;
1773 r
= service_spawn(s
,
1775 s
->timeout_start_usec
,
1776 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_IS_CONTROL
,
1781 service_set_state(s
, SERVICE_START_POST
);
1783 service_enter_running(s
, SERVICE_SUCCESS
);
1788 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start-post' task: %m");
1789 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1792 static void service_kill_control_processes(Service
*s
) {
1797 if (s
->control_pid
> 0) {
1798 r
= kill_and_sigcont(s
->control_pid
, SIGKILL
);
1800 _cleanup_free_
char *comm
= NULL
;
1802 (void) get_process_comm(s
->control_pid
, &comm
);
1804 log_unit_debug_errno(UNIT(s
), r
, "Failed to kill control process " PID_FMT
" (%s), ignoring: %m",
1805 s
->control_pid
, strna(comm
));
1809 if (UNIT(s
)->cgroup_path
) {
1810 _cleanup_set_free_ Set
*pid_set
= NULL
;
1813 if (s
->control_pid
> 0) {
1814 r
= set_make(&pid_set
, PID_TO_PTR(s
->control_pid
), NULL
);
1821 p
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1822 r
= cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, p
, SIGKILL
, CGROUP_SIGCONT
|CGROUP_IGNORE_SELF
|CGROUP_REMOVE
, pid_set
, NULL
, NULL
);
1824 log_unit_debug_errno(UNIT(s
), r
, "Failed to send SIGKILL to processes of control group %s: %m", p
);
1828 static void service_enter_start(Service
*s
) {
1836 service_unwatch_control_pid(s
);
1837 service_unwatch_main_pid(s
);
1839 /* We want to ensure that nobody leaks processes from
1840 * START_PRE here, so let's go on a killing spree, People
1841 * should not spawn long running processes from START_PRE. */
1842 service_kill_control_processes(s
);
1844 if (s
->type
== SERVICE_FORKING
) {
1845 s
->control_command_id
= SERVICE_EXEC_START
;
1846 c
= s
->control_command
= s
->exec_command
[SERVICE_EXEC_START
];
1848 s
->main_command
= NULL
;
1850 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
1851 s
->control_command
= NULL
;
1853 c
= s
->main_command
= s
->exec_command
[SERVICE_EXEC_START
];
1857 if (s
->type
!= SERVICE_ONESHOT
) {
1858 /* There's no command line configured for the main command? Hmm, that is strange. This can only
1859 * happen if the configuration changes at runtime. In this case, let's enter a failure
1861 log_unit_error(UNIT(s
), "There's no 'start' task anymore we could start: %m");
1866 service_enter_start_post(s
);
1870 if (IN_SET(s
->type
, SERVICE_SIMPLE
, SERVICE_IDLE
))
1871 /* For simple + idle this is the main process. We don't apply any timeout here, but
1872 * service_enter_running() will later apply the .runtime_max_usec timeout. */
1873 timeout
= USEC_INFINITY
;
1875 timeout
= s
->timeout_start_usec
;
1877 r
= service_spawn(s
,
1880 EXEC_PASS_FDS
|EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_APPLY_TTY_STDIN
|EXEC_SET_WATCHDOG
,
1885 if (IN_SET(s
->type
, SERVICE_SIMPLE
, SERVICE_IDLE
)) {
1886 /* For simple services we immediately start
1887 * the START_POST binaries. */
1889 service_set_main_pid(s
, pid
);
1890 service_enter_start_post(s
);
1892 } else if (s
->type
== SERVICE_FORKING
) {
1894 /* For forking services we wait until the start
1895 * process exited. */
1897 s
->control_pid
= pid
;
1898 service_set_state(s
, SERVICE_START
);
1900 } else if (IN_SET(s
->type
, SERVICE_ONESHOT
, SERVICE_DBUS
, SERVICE_NOTIFY
)) {
1902 /* For oneshot services we wait until the start
1903 * process exited, too, but it is our main process. */
1905 /* For D-Bus services we know the main pid right away,
1906 * but wait for the bus name to appear on the
1907 * bus. Notify services are similar. */
1909 service_set_main_pid(s
, pid
);
1910 service_set_state(s
, SERVICE_START
);
1912 assert_not_reached("Unknown service type");
1917 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start' task: %m");
1918 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1921 static void service_enter_start_pre(Service
*s
) {
1926 service_unwatch_control_pid(s
);
1928 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_PRE
];
1929 if (s
->control_command
) {
1930 /* Before we start anything, let's clear up what might
1931 * be left from previous runs. */
1932 service_kill_control_processes(s
);
1934 s
->control_command_id
= SERVICE_EXEC_START_PRE
;
1936 r
= service_spawn(s
,
1938 s
->timeout_start_usec
,
1939 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_IS_CONTROL
|EXEC_APPLY_TTY_STDIN
,
1944 service_set_state(s
, SERVICE_START_PRE
);
1946 service_enter_start(s
);
1951 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start-pre' task: %m");
1952 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1955 static void service_enter_restart(Service
*s
) {
1956 _cleanup_(sd_bus_error_free
) sd_bus_error error
= SD_BUS_ERROR_NULL
;
1961 if (UNIT(s
)->job
&& UNIT(s
)->job
->type
== JOB_STOP
) {
1962 /* Don't restart things if we are going down anyway */
1963 log_unit_info(UNIT(s
), "Stop job pending for unit, delaying automatic restart.");
1965 r
= service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), s
->restart_usec
));
1972 /* Any units that are bound to this service must also be
1973 * restarted. We use JOB_RESTART (instead of the more obvious
1974 * JOB_START) here so that those dependency jobs will be added
1976 r
= manager_add_job(UNIT(s
)->manager
, JOB_RESTART
, UNIT(s
), JOB_FAIL
, &error
, NULL
);
1980 /* Count the jobs we enqueue for restarting. This counter is maintained as long as the unit isn't fully
1981 * stopped, i.e. as long as it remains up or remains in auto-start states. The use can reset the counter
1982 * explicitly however via the usual "systemctl reset-failure" logic. */
1984 s
->flush_n_restarts
= false;
1986 log_struct(LOG_INFO
,
1987 "MESSAGE_ID=" SD_MESSAGE_UNIT_RESTART_SCHEDULED_STR
,
1988 LOG_UNIT_ID(UNIT(s
)),
1989 LOG_UNIT_INVOCATION_ID(UNIT(s
)),
1990 LOG_UNIT_MESSAGE(UNIT(s
), "Scheduled restart job, restart counter is at %u.", s
->n_restarts
),
1991 "N_RESTARTS=%u", s
->n_restarts
,
1994 /* Notify clients about changed restart counter */
1995 unit_add_to_dbus_queue(UNIT(s
));
1997 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
1998 * it will be canceled as part of the service_stop() call that
1999 * is executed as part of JOB_RESTART. */
2004 log_unit_warning(UNIT(s
), "Failed to schedule restart job: %s", bus_error_message(&error
, -r
));
2005 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
2008 static void service_enter_reload_by_notify(Service
*s
) {
2009 _cleanup_(sd_bus_error_free
) sd_bus_error error
= SD_BUS_ERROR_NULL
;
2014 service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), s
->timeout_start_usec
));
2015 service_set_state(s
, SERVICE_RELOAD
);
2017 /* service_enter_reload_by_notify is never called during a reload, thus no loops are possible. */
2018 r
= manager_propagate_reload(UNIT(s
)->manager
, UNIT(s
), JOB_FAIL
, &error
);
2020 log_unit_warning(UNIT(s
), "Failed to schedule propagation of reload: %s", bus_error_message(&error
, -r
));
2023 static void service_enter_reload(Service
*s
) {
2028 service_unwatch_control_pid(s
);
2029 s
->reload_result
= SERVICE_SUCCESS
;
2031 s
->control_command
= s
->exec_command
[SERVICE_EXEC_RELOAD
];
2032 if (s
->control_command
) {
2033 s
->control_command_id
= SERVICE_EXEC_RELOAD
;
2035 r
= service_spawn(s
,
2037 s
->timeout_start_usec
,
2038 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_IS_CONTROL
,
2043 service_set_state(s
, SERVICE_RELOAD
);
2045 service_enter_running(s
, SERVICE_SUCCESS
);
2050 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'reload' task: %m");
2051 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
2052 service_enter_running(s
, SERVICE_SUCCESS
);
2055 static void service_run_next_control(Service
*s
) {
2060 assert(s
->control_command
);
2061 assert(s
->control_command
->command_next
);
2063 assert(s
->control_command_id
!= SERVICE_EXEC_START
);
2065 s
->control_command
= s
->control_command
->command_next
;
2066 service_unwatch_control_pid(s
);
2068 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
2069 timeout
= s
->timeout_start_usec
;
2071 timeout
= s
->timeout_stop_usec
;
2073 r
= service_spawn(s
,
2076 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_IS_CONTROL
|
2077 (IN_SET(s
->control_command_id
, SERVICE_EXEC_START_PRE
, SERVICE_EXEC_STOP_POST
) ? EXEC_APPLY_TTY_STDIN
: 0)|
2078 (IN_SET(s
->control_command_id
, SERVICE_EXEC_STOP
, SERVICE_EXEC_STOP_POST
) ? EXEC_SETENV_RESULT
: 0),
2086 log_unit_warning_errno(UNIT(s
), r
, "Failed to run next control task: %m");
2088 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START_POST
, SERVICE_STOP
))
2089 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2090 else if (s
->state
== SERVICE_STOP_POST
)
2091 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
2092 else if (s
->state
== SERVICE_RELOAD
) {
2093 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
2094 service_enter_running(s
, SERVICE_SUCCESS
);
2096 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2099 static void service_run_next_main(Service
*s
) {
2104 assert(s
->main_command
);
2105 assert(s
->main_command
->command_next
);
2106 assert(s
->type
== SERVICE_ONESHOT
);
2108 s
->main_command
= s
->main_command
->command_next
;
2109 service_unwatch_main_pid(s
);
2111 r
= service_spawn(s
,
2113 s
->timeout_start_usec
,
2114 EXEC_PASS_FDS
|EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_APPLY_TTY_STDIN
|EXEC_SET_WATCHDOG
,
2119 service_set_main_pid(s
, pid
);
2124 log_unit_warning_errno(UNIT(s
), r
, "Failed to run next main task: %m");
2125 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2128 static int service_start(Unit
*u
) {
2129 Service
*s
= SERVICE(u
);
2134 /* We cannot fulfill this request right now, try again later
2136 if (IN_SET(s
->state
,
2137 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
2138 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))
2141 /* Already on it! */
2142 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
))
2145 /* A service that will be restarted must be stopped first to
2146 * trigger BindsTo and/or OnFailure dependencies. If a user
2147 * does not want to wait for the holdoff time to elapse, the
2148 * service should be manually restarted, not started. We
2149 * simply return EAGAIN here, so that any start jobs stay
2150 * queued, and assume that the auto restart timer will
2151 * eventually trigger the restart. */
2152 if (s
->state
== SERVICE_AUTO_RESTART
)
2155 assert(IN_SET(s
->state
, SERVICE_DEAD
, SERVICE_FAILED
));
2157 /* Make sure we don't enter a busy loop of some kind. */
2158 r
= unit_start_limit_test(u
);
2160 service_enter_dead(s
, SERVICE_FAILURE_START_LIMIT_HIT
, false);
2164 r
= unit_acquire_invocation_id(u
);
2168 s
->result
= SERVICE_SUCCESS
;
2169 s
->reload_result
= SERVICE_SUCCESS
;
2170 s
->main_pid_known
= false;
2171 s
->main_pid_alien
= false;
2172 s
->forbid_restart
= false;
2174 u
->reset_accounting
= true;
2176 s
->status_text
= mfree(s
->status_text
);
2177 s
->status_errno
= 0;
2179 s
->notify_state
= NOTIFY_UNKNOWN
;
2181 s
->watchdog_override_enable
= false;
2182 s
->watchdog_override_usec
= 0;
2184 /* This is not an automatic restart? Flush the restart counter then */
2185 if (s
->flush_n_restarts
) {
2187 s
->flush_n_restarts
= false;
2190 service_enter_start_pre(s
);
2194 static int service_stop(Unit
*u
) {
2195 Service
*s
= SERVICE(u
);
2199 /* Don't create restart jobs from manual stops. */
2200 s
->forbid_restart
= true;
2203 if (IN_SET(s
->state
,
2204 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
2205 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))
2208 /* A restart will be scheduled or is in progress. */
2209 if (s
->state
== SERVICE_AUTO_RESTART
) {
2210 service_set_state(s
, SERVICE_DEAD
);
2214 /* If there's already something running we go directly into
2216 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RELOAD
)) {
2217 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
2221 assert(IN_SET(s
->state
, SERVICE_RUNNING
, SERVICE_EXITED
));
2223 service_enter_stop(s
, SERVICE_SUCCESS
);
2227 static int service_reload(Unit
*u
) {
2228 Service
*s
= SERVICE(u
);
2232 assert(IN_SET(s
->state
, SERVICE_RUNNING
, SERVICE_EXITED
));
2234 service_enter_reload(s
);
2238 _pure_
static bool service_can_reload(Unit
*u
) {
2239 Service
*s
= SERVICE(u
);
2243 return !!s
->exec_command
[SERVICE_EXEC_RELOAD
];
2246 static unsigned service_exec_command_index(Unit
*u
, ServiceExecCommand id
, ExecCommand
*current
) {
2247 Service
*s
= SERVICE(u
);
2249 ExecCommand
*first
, *c
;
2253 first
= s
->exec_command
[id
];
2255 /* Figure out where we are in the list by walking back to the beginning */
2256 for (c
= current
; c
!= first
; c
= c
->command_prev
)
2262 static int service_serialize_exec_command(Unit
*u
, FILE *f
, ExecCommand
*command
) {
2263 Service
*s
= SERVICE(u
);
2264 ServiceExecCommand id
;
2268 _cleanup_free_
char *args
= NULL
, *p
= NULL
;
2269 size_t allocated
= 0, length
= 0;
2277 if (command
== s
->control_command
) {
2279 id
= s
->control_command_id
;
2282 id
= SERVICE_EXEC_START
;
2285 idx
= service_exec_command_index(u
, id
, command
);
2287 STRV_FOREACH(arg
, command
->argv
) {
2289 _cleanup_free_
char *e
= NULL
;
2291 e
= xescape(*arg
, WHITESPACE
);
2296 if (!GREEDY_REALLOC(args
, allocated
, length
+ 1 + n
+ 1))
2300 args
[length
++] = ' ';
2302 memcpy(args
+ length
, e
, n
);
2306 if (!GREEDY_REALLOC(args
, allocated
, length
+ 1))
2310 p
= xescape(command
->path
, WHITESPACE
);
2314 fprintf(f
, "%s-command=%s %u %s %s\n", type
, service_exec_command_to_string(id
), idx
, p
, args
);
2319 static int service_serialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
2320 Service
*s
= SERVICE(u
);
2328 unit_serialize_item(u
, f
, "state", service_state_to_string(s
->state
));
2329 unit_serialize_item(u
, f
, "result", service_result_to_string(s
->result
));
2330 unit_serialize_item(u
, f
, "reload-result", service_result_to_string(s
->reload_result
));
2332 if (s
->control_pid
> 0)
2333 unit_serialize_item_format(u
, f
, "control-pid", PID_FMT
, s
->control_pid
);
2335 if (s
->main_pid_known
&& s
->main_pid
> 0)
2336 unit_serialize_item_format(u
, f
, "main-pid", PID_FMT
, s
->main_pid
);
2338 unit_serialize_item(u
, f
, "main-pid-known", yes_no(s
->main_pid_known
));
2339 unit_serialize_item(u
, f
, "bus-name-good", yes_no(s
->bus_name_good
));
2340 unit_serialize_item(u
, f
, "bus-name-owner", s
->bus_name_owner
);
2342 unit_serialize_item_format(u
, f
, "n-restarts", "%u", s
->n_restarts
);
2343 unit_serialize_item(u
, f
, "flush-n-restarts", yes_no(s
->flush_n_restarts
));
2345 r
= unit_serialize_item_escaped(u
, f
, "status-text", s
->status_text
);
2349 service_serialize_exec_command(u
, f
, s
->control_command
);
2350 service_serialize_exec_command(u
, f
, s
->main_command
);
2352 r
= unit_serialize_item_fd(u
, f
, fds
, "stdin-fd", s
->stdin_fd
);
2355 r
= unit_serialize_item_fd(u
, f
, fds
, "stdout-fd", s
->stdout_fd
);
2358 r
= unit_serialize_item_fd(u
, f
, fds
, "stderr-fd", s
->stderr_fd
);
2362 if (UNIT_ISSET(s
->accept_socket
)) {
2363 r
= unit_serialize_item(u
, f
, "accept-socket", UNIT_DEREF(s
->accept_socket
)->id
);
2368 r
= unit_serialize_item_fd(u
, f
, fds
, "socket-fd", s
->socket_fd
);
2372 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
2373 _cleanup_free_
char *c
= NULL
;
2376 copy
= fdset_put_dup(fds
, fs
->fd
);
2380 c
= cescape(fs
->fdname
);
2382 unit_serialize_item_format(u
, f
, "fd-store-fd", "%i %s", copy
, strempty(c
));
2385 if (s
->main_exec_status
.pid
> 0) {
2386 unit_serialize_item_format(u
, f
, "main-exec-status-pid", PID_FMT
, s
->main_exec_status
.pid
);
2387 dual_timestamp_serialize(f
, "main-exec-status-start", &s
->main_exec_status
.start_timestamp
);
2388 dual_timestamp_serialize(f
, "main-exec-status-exit", &s
->main_exec_status
.exit_timestamp
);
2390 if (dual_timestamp_is_set(&s
->main_exec_status
.exit_timestamp
)) {
2391 unit_serialize_item_format(u
, f
, "main-exec-status-code", "%i", s
->main_exec_status
.code
);
2392 unit_serialize_item_format(u
, f
, "main-exec-status-status", "%i", s
->main_exec_status
.status
);
2396 dual_timestamp_serialize(f
, "watchdog-timestamp", &s
->watchdog_timestamp
);
2398 unit_serialize_item(u
, f
, "forbid-restart", yes_no(s
->forbid_restart
));
2400 if (s
->watchdog_override_enable
)
2401 unit_serialize_item_format(u
, f
, "watchdog-override-usec", USEC_FMT
, s
->watchdog_override_usec
);
2406 static int service_deserialize_exec_command(Unit
*u
, const char *key
, const char *value
) {
2407 Service
*s
= SERVICE(u
);
2409 unsigned idx
= 0, i
;
2410 bool control
, found
= false;
2411 ServiceExecCommand id
= _SERVICE_EXEC_COMMAND_INVALID
;
2412 ExecCommand
*command
= NULL
;
2413 _cleanup_free_
char *path
= NULL
;
2414 _cleanup_strv_free_
char **argv
= NULL
;
2416 enum ExecCommandState
{
2417 STATE_EXEC_COMMAND_TYPE
,
2418 STATE_EXEC_COMMAND_INDEX
,
2419 STATE_EXEC_COMMAND_PATH
,
2420 STATE_EXEC_COMMAND_ARGS
,
2421 _STATE_EXEC_COMMAND_MAX
,
2422 _STATE_EXEC_COMMAND_INVALID
= -1,
2429 control
= streq(key
, "control-command");
2431 state
= STATE_EXEC_COMMAND_TYPE
;
2434 _cleanup_free_
char *arg
= NULL
;
2436 r
= extract_first_word(&value
, &arg
, NULL
, EXTRACT_CUNESCAPE
);
2443 case STATE_EXEC_COMMAND_TYPE
:
2444 id
= service_exec_command_from_string(arg
);
2448 state
= STATE_EXEC_COMMAND_INDEX
;
2450 case STATE_EXEC_COMMAND_INDEX
:
2451 r
= safe_atou(arg
, &idx
);
2455 state
= STATE_EXEC_COMMAND_PATH
;
2457 case STATE_EXEC_COMMAND_PATH
:
2460 state
= STATE_EXEC_COMMAND_ARGS
;
2462 if (!path_is_absolute(path
))
2465 case STATE_EXEC_COMMAND_ARGS
:
2466 r
= strv_extend(&argv
, arg
);
2471 assert_not_reached("Unknown error at deserialization of exec command");
2476 if (state
!= STATE_EXEC_COMMAND_ARGS
)
2479 /* Let's check whether exec command on given offset matches data that we just deserialized */
2480 for (command
= s
->exec_command
[id
], i
= 0; command
; command
= command
->command_next
, i
++) {
2484 found
= strv_equal(argv
, command
->argv
) && streq(command
->path
, path
);
2489 /* Command at the index we serialized is different, let's look for command that exactly
2490 * matches but is on different index. If there is no such command we will not resume execution. */
2491 for (command
= s
->exec_command
[id
]; command
; command
= command
->command_next
)
2492 if (strv_equal(command
->argv
, argv
) && streq(command
->path
, path
))
2496 if (command
&& control
)
2497 s
->control_command
= command
;
2499 s
->main_command
= command
;
2501 log_unit_warning(u
, "Current command vanished from the unit file, execution of the command list won't be resumed.");
2506 static int service_deserialize_item(Unit
*u
, const char *key
, const char *value
, FDSet
*fds
) {
2507 Service
*s
= SERVICE(u
);
2515 if (streq(key
, "state")) {
2518 state
= service_state_from_string(value
);
2520 log_unit_debug(u
, "Failed to parse state value: %s", value
);
2522 s
->deserialized_state
= state
;
2523 } else if (streq(key
, "result")) {
2526 f
= service_result_from_string(value
);
2528 log_unit_debug(u
, "Failed to parse result value: %s", value
);
2529 else if (f
!= SERVICE_SUCCESS
)
2532 } else if (streq(key
, "reload-result")) {
2535 f
= service_result_from_string(value
);
2537 log_unit_debug(u
, "Failed to parse reload result value: %s", value
);
2538 else if (f
!= SERVICE_SUCCESS
)
2539 s
->reload_result
= f
;
2541 } else if (streq(key
, "control-pid")) {
2544 if (parse_pid(value
, &pid
) < 0)
2545 log_unit_debug(u
, "Failed to parse control-pid value: %s", value
);
2547 s
->control_pid
= pid
;
2548 } else if (streq(key
, "main-pid")) {
2551 if (parse_pid(value
, &pid
) < 0)
2552 log_unit_debug(u
, "Failed to parse main-pid value: %s", value
);
2554 service_set_main_pid(s
, pid
);
2555 unit_watch_pid(UNIT(s
), pid
);
2557 } else if (streq(key
, "main-pid-known")) {
2560 b
= parse_boolean(value
);
2562 log_unit_debug(u
, "Failed to parse main-pid-known value: %s", value
);
2564 s
->main_pid_known
= b
;
2565 } else if (streq(key
, "bus-name-good")) {
2568 b
= parse_boolean(value
);
2570 log_unit_debug(u
, "Failed to parse bus-name-good value: %s", value
);
2572 s
->bus_name_good
= b
;
2573 } else if (streq(key
, "bus-name-owner")) {
2574 r
= free_and_strdup(&s
->bus_name_owner
, value
);
2576 log_unit_error_errno(u
, r
, "Unable to deserialize current bus owner %s: %m", value
);
2577 } else if (streq(key
, "status-text")) {
2580 r
= cunescape(value
, 0, &t
);
2582 log_unit_debug_errno(u
, r
, "Failed to unescape status text: %s", value
);
2584 free(s
->status_text
);
2588 } else if (streq(key
, "accept-socket")) {
2591 r
= manager_load_unit(u
->manager
, value
, NULL
, NULL
, &socket
);
2593 log_unit_debug_errno(u
, r
, "Failed to load accept-socket unit: %s", value
);
2595 unit_ref_set(&s
->accept_socket
, socket
);
2596 SOCKET(socket
)->n_connections
++;
2599 } else if (streq(key
, "socket-fd")) {
2602 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2603 log_unit_debug(u
, "Failed to parse socket-fd value: %s", value
);
2605 asynchronous_close(s
->socket_fd
);
2606 s
->socket_fd
= fdset_remove(fds
, fd
);
2608 } else if (streq(key
, "fd-store-fd")) {
2613 pf
= strcspn(value
, WHITESPACE
);
2614 fdv
= strndupa(value
, pf
);
2616 if (safe_atoi(fdv
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2617 log_unit_debug(u
, "Failed to parse fd-store-fd value: %s", value
);
2619 _cleanup_free_
char *t
= NULL
;
2623 fdn
+= strspn(fdn
, WHITESPACE
);
2624 (void) cunescape(fdn
, 0, &t
);
2626 r
= service_add_fd_store(s
, fd
, t
);
2628 log_unit_error_errno(u
, r
, "Failed to add fd to store: %m");
2630 fdset_remove(fds
, fd
);
2633 } else if (streq(key
, "main-exec-status-pid")) {
2636 if (parse_pid(value
, &pid
) < 0)
2637 log_unit_debug(u
, "Failed to parse main-exec-status-pid value: %s", value
);
2639 s
->main_exec_status
.pid
= pid
;
2640 } else if (streq(key
, "main-exec-status-code")) {
2643 if (safe_atoi(value
, &i
) < 0)
2644 log_unit_debug(u
, "Failed to parse main-exec-status-code value: %s", value
);
2646 s
->main_exec_status
.code
= i
;
2647 } else if (streq(key
, "main-exec-status-status")) {
2650 if (safe_atoi(value
, &i
) < 0)
2651 log_unit_debug(u
, "Failed to parse main-exec-status-status value: %s", value
);
2653 s
->main_exec_status
.status
= i
;
2654 } else if (streq(key
, "main-exec-status-start"))
2655 dual_timestamp_deserialize(value
, &s
->main_exec_status
.start_timestamp
);
2656 else if (streq(key
, "main-exec-status-exit"))
2657 dual_timestamp_deserialize(value
, &s
->main_exec_status
.exit_timestamp
);
2658 else if (streq(key
, "watchdog-timestamp"))
2659 dual_timestamp_deserialize(value
, &s
->watchdog_timestamp
);
2660 else if (streq(key
, "forbid-restart")) {
2663 b
= parse_boolean(value
);
2665 log_unit_debug(u
, "Failed to parse forbid-restart value: %s", value
);
2667 s
->forbid_restart
= b
;
2668 } else if (streq(key
, "stdin-fd")) {
2671 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2672 log_unit_debug(u
, "Failed to parse stdin-fd value: %s", value
);
2674 asynchronous_close(s
->stdin_fd
);
2675 s
->stdin_fd
= fdset_remove(fds
, fd
);
2676 s
->exec_context
.stdio_as_fds
= true;
2678 } else if (streq(key
, "stdout-fd")) {
2681 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2682 log_unit_debug(u
, "Failed to parse stdout-fd value: %s", value
);
2684 asynchronous_close(s
->stdout_fd
);
2685 s
->stdout_fd
= fdset_remove(fds
, fd
);
2686 s
->exec_context
.stdio_as_fds
= true;
2688 } else if (streq(key
, "stderr-fd")) {
2691 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2692 log_unit_debug(u
, "Failed to parse stderr-fd value: %s", value
);
2694 asynchronous_close(s
->stderr_fd
);
2695 s
->stderr_fd
= fdset_remove(fds
, fd
);
2696 s
->exec_context
.stdio_as_fds
= true;
2698 } else if (streq(key
, "watchdog-override-usec")) {
2699 usec_t watchdog_override_usec
;
2700 if (timestamp_deserialize(value
, &watchdog_override_usec
) < 0)
2701 log_unit_debug(u
, "Failed to parse watchdog_override_usec value: %s", value
);
2703 s
->watchdog_override_enable
= true;
2704 s
->watchdog_override_usec
= watchdog_override_usec
;
2706 } else if (STR_IN_SET(key
, "main-command", "control-command")) {
2707 r
= service_deserialize_exec_command(u
, key
, value
);
2709 log_unit_debug_errno(u
, r
, "Failed to parse serialized command \"%s\": %m", value
);
2711 } else if (streq(key
, "n-restarts")) {
2712 r
= safe_atou(value
, &s
->n_restarts
);
2714 log_unit_debug_errno(u
, r
, "Failed to parse serialized restart counter '%s': %m", value
);
2716 } else if (streq(key
, "flush-n-restarts")) {
2717 r
= parse_boolean(value
);
2719 log_unit_debug_errno(u
, r
, "Failed to parse serialized flush restart counter setting '%s': %m", value
);
2721 s
->flush_n_restarts
= r
;
2723 log_unit_debug(u
, "Unknown serialization key: %s", key
);
2728 _pure_
static UnitActiveState
service_active_state(Unit
*u
) {
2729 const UnitActiveState
*table
;
2733 table
= SERVICE(u
)->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
2735 return table
[SERVICE(u
)->state
];
2738 static const char *service_sub_state_to_string(Unit
*u
) {
2741 return service_state_to_string(SERVICE(u
)->state
);
2744 static bool service_check_gc(Unit
*u
) {
2745 Service
*s
= SERVICE(u
);
2749 /* Never clean up services that still have a process around,
2750 * even if the service is formally dead. */
2751 if (cgroup_good(s
) > 0 ||
2752 main_pid_good(s
) > 0 ||
2753 control_pid_good(s
) > 0)
2759 static int service_retry_pid_file(Service
*s
) {
2762 assert(s
->pid_file
);
2763 assert(IN_SET(s
->state
, SERVICE_START
, SERVICE_START_POST
));
2765 r
= service_load_pid_file(s
, false);
2769 service_unwatch_pid_file(s
);
2771 service_enter_running(s
, SERVICE_SUCCESS
);
2775 static int service_watch_pid_file(Service
*s
) {
2778 log_unit_debug(UNIT(s
), "Setting watch for PID file %s", s
->pid_file_pathspec
->path
);
2780 r
= path_spec_watch(s
->pid_file_pathspec
, service_dispatch_io
);
2784 /* the pidfile might have appeared just before we set the watch */
2785 log_unit_debug(UNIT(s
), "Trying to read PID file %s in case it changed", s
->pid_file_pathspec
->path
);
2786 service_retry_pid_file(s
);
2790 log_unit_error_errno(UNIT(s
), r
, "Failed to set a watch for PID file %s: %m", s
->pid_file_pathspec
->path
);
2791 service_unwatch_pid_file(s
);
2795 static int service_demand_pid_file(Service
*s
) {
2798 assert(s
->pid_file
);
2799 assert(!s
->pid_file_pathspec
);
2801 ps
= new0(PathSpec
, 1);
2806 ps
->path
= strdup(s
->pid_file
);
2812 path_kill_slashes(ps
->path
);
2814 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2815 * keep their PID file open all the time. */
2816 ps
->type
= PATH_MODIFIED
;
2817 ps
->inotify_fd
= -1;
2819 s
->pid_file_pathspec
= ps
;
2821 return service_watch_pid_file(s
);
2824 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
) {
2825 PathSpec
*p
= userdata
;
2830 s
= SERVICE(p
->unit
);
2834 assert(IN_SET(s
->state
, SERVICE_START
, SERVICE_START_POST
));
2835 assert(s
->pid_file_pathspec
);
2836 assert(path_spec_owns_inotify_fd(s
->pid_file_pathspec
, fd
));
2838 log_unit_debug(UNIT(s
), "inotify event");
2840 if (path_spec_fd_event(p
, events
) < 0)
2843 if (service_retry_pid_file(s
) == 0)
2846 if (service_watch_pid_file(s
) < 0)
2852 service_unwatch_pid_file(s
);
2853 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2857 static void service_notify_cgroup_empty_event(Unit
*u
) {
2858 Service
*s
= SERVICE(u
);
2862 log_unit_debug(u
, "cgroup is empty");
2866 /* Waiting for SIGCHLD is usually more interesting,
2867 * because it includes return codes/signals. Which is
2868 * why we ignore the cgroup events for most cases,
2869 * except when we don't know pid which to expect the
2873 if (s
->type
== SERVICE_NOTIFY
&&
2874 main_pid_good(s
) == 0 &&
2875 control_pid_good(s
) == 0) {
2876 /* No chance of getting a ready notification anymore */
2877 service_enter_stop_post(s
, SERVICE_FAILURE_PROTOCOL
);
2882 case SERVICE_START_POST
:
2883 if (s
->pid_file_pathspec
&&
2884 main_pid_good(s
) == 0 &&
2885 control_pid_good(s
) == 0) {
2887 /* Give up hoping for the daemon to write its PID file */
2888 log_unit_warning(u
, "Daemon never wrote its PID file. Failing.");
2890 service_unwatch_pid_file(s
);
2891 if (s
->state
== SERVICE_START
)
2892 service_enter_stop_post(s
, SERVICE_FAILURE_PROTOCOL
);
2894 service_enter_stop(s
, SERVICE_FAILURE_PROTOCOL
);
2898 case SERVICE_RUNNING
:
2899 /* service_enter_running() will figure out what to do */
2900 service_enter_running(s
, SERVICE_SUCCESS
);
2903 case SERVICE_STOP_SIGABRT
:
2904 case SERVICE_STOP_SIGTERM
:
2905 case SERVICE_STOP_SIGKILL
:
2907 if (main_pid_good(s
) <= 0 && control_pid_good(s
) <= 0)
2908 service_enter_stop_post(s
, SERVICE_SUCCESS
);
2912 case SERVICE_STOP_POST
:
2913 case SERVICE_FINAL_SIGTERM
:
2914 case SERVICE_FINAL_SIGKILL
:
2915 if (main_pid_good(s
) <= 0 && control_pid_good(s
) <= 0)
2916 service_enter_dead(s
, SERVICE_SUCCESS
, true);
2925 static void service_sigchld_event(Unit
*u
, pid_t pid
, int code
, int status
) {
2926 Service
*s
= SERVICE(u
);
2932 if (is_clean_exit(code
, status
, s
->type
== SERVICE_ONESHOT
? EXIT_CLEAN_COMMAND
: EXIT_CLEAN_DAEMON
, &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
->flags
& EXEC_COMMAND_IGNORE_FAILURE
)
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
]->flags
& EXEC_COMMAND_IGNORE_FAILURE
)
2971 f
= SERVICE_SUCCESS
;
2974 /* When this is a successful exit, let's log about the exit code on DEBUG level. If this is a failure
2975 * and the process exited on its own via exit(), then let's make this a NOTICE, under the assumption
2976 * that the service already logged the reason at a higher log level on its own. However, if the service
2977 * died due to a signal, then it most likely didn't say anything about any reason, hence let's raise
2978 * our log level to WARNING then. */
2980 log_struct(f
== SERVICE_SUCCESS
? LOG_DEBUG
:
2981 (code
== CLD_EXITED
? LOG_NOTICE
: LOG_WARNING
),
2982 LOG_UNIT_MESSAGE(u
, "Main process exited, code=%s, status=%i/%s",
2983 sigchld_code_to_string(code
), status
,
2984 strna(code
== CLD_EXITED
2985 ? exit_status_to_string(status
, EXIT_STATUS_FULL
)
2986 : signal_to_string(status
))),
2987 "EXIT_CODE=%s", sigchld_code_to_string(code
),
2988 "EXIT_STATUS=%i", status
,
2990 LOG_UNIT_INVOCATION_ID(u
),
2993 if (s
->result
== SERVICE_SUCCESS
)
2996 if (s
->main_command
&&
2997 s
->main_command
->command_next
&&
2998 s
->type
== SERVICE_ONESHOT
&&
2999 f
== SERVICE_SUCCESS
) {
3001 /* There is another command to *
3002 * execute, so let's do that. */
3004 log_unit_debug(u
, "Running next main command for state %s.", service_state_to_string(s
->state
));
3005 service_run_next_main(s
);
3009 /* The service exited, so the service is officially
3011 s
->main_command
= NULL
;
3015 case SERVICE_START_POST
:
3016 case SERVICE_RELOAD
:
3018 /* Need to wait until the operation is
3023 if (s
->type
== SERVICE_ONESHOT
) {
3024 /* This was our main goal, so let's go on */
3025 if (f
== SERVICE_SUCCESS
)
3026 service_enter_start_post(s
);
3028 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3030 } else if (s
->type
== SERVICE_NOTIFY
) {
3031 /* Only enter running through a notification, so that the
3032 * SERVICE_START state signifies that no ready notification
3033 * has been received */
3034 if (f
!= SERVICE_SUCCESS
)
3035 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3036 else if (!s
->remain_after_exit
|| s
->notify_access
== NOTIFY_MAIN
)
3037 /* The service has never been and will never be active */
3038 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_PROTOCOL
);
3043 case SERVICE_RUNNING
:
3044 service_enter_running(s
, f
);
3047 case SERVICE_STOP_SIGABRT
:
3048 case SERVICE_STOP_SIGTERM
:
3049 case SERVICE_STOP_SIGKILL
:
3051 if (control_pid_good(s
) <= 0)
3052 service_enter_stop_post(s
, f
);
3054 /* If there is still a control process, wait for that first */
3057 case SERVICE_STOP_POST
:
3058 case SERVICE_FINAL_SIGTERM
:
3059 case SERVICE_FINAL_SIGKILL
:
3061 if (control_pid_good(s
) <= 0)
3062 service_enter_dead(s
, f
, true);
3066 assert_not_reached("Uh, main process died at wrong time.");
3070 } else if (s
->control_pid
== pid
) {
3073 if (s
->control_command
) {
3074 exec_status_exit(&s
->control_command
->exec_status
, &s
->exec_context
, pid
, code
, status
);
3076 if (s
->control_command
->flags
& EXEC_COMMAND_IGNORE_FAILURE
)
3077 f
= SERVICE_SUCCESS
;
3080 log_unit_full(u
, f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
, 0,
3081 "Control process exited, code=%s status=%i",
3082 sigchld_code_to_string(code
), status
);
3084 if (s
->result
== SERVICE_SUCCESS
)
3087 /* Immediately get rid of the cgroup, so that the
3088 * kernel doesn't delay the cgroup empty messages for
3089 * the service cgroup any longer than necessary */
3090 service_kill_control_processes(s
);
3092 if (s
->control_command
&&
3093 s
->control_command
->command_next
&&
3094 f
== SERVICE_SUCCESS
) {
3096 /* There is another command to *
3097 * execute, so let's do that. */
3099 log_unit_debug(u
, "Running next control command for state %s.", service_state_to_string(s
->state
));
3100 service_run_next_control(s
);
3103 /* No further commands for this step, so let's
3104 * figure out what to do next */
3106 s
->control_command
= NULL
;
3107 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
3109 log_unit_debug(u
, "Got final SIGCHLD for state %s.", service_state_to_string(s
->state
));
3113 case SERVICE_START_PRE
:
3114 if (f
== SERVICE_SUCCESS
)
3115 service_enter_start(s
);
3117 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3121 if (s
->type
!= SERVICE_FORKING
)
3122 /* Maybe spurious event due to a reload that changed the type? */
3125 if (f
!= SERVICE_SUCCESS
) {
3126 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3131 bool has_start_post
;
3134 /* Let's try to load the pid file here if we can.
3135 * The PID file might actually be created by a START_POST
3136 * script. In that case don't worry if the loading fails. */
3138 has_start_post
= !!s
->exec_command
[SERVICE_EXEC_START_POST
];
3139 r
= service_load_pid_file(s
, !has_start_post
);
3140 if (!has_start_post
&& r
< 0) {
3141 r
= service_demand_pid_file(s
);
3142 if (r
< 0 || cgroup_good(s
) == 0)
3143 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_PROTOCOL
);
3147 service_search_main_pid(s
);
3149 service_enter_start_post(s
);
3152 case SERVICE_START_POST
:
3153 if (f
!= SERVICE_SUCCESS
) {
3154 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3161 r
= service_load_pid_file(s
, true);
3163 r
= service_demand_pid_file(s
);
3164 if (r
< 0 || cgroup_good(s
) == 0)
3165 service_enter_stop(s
, SERVICE_FAILURE_PROTOCOL
);
3169 service_search_main_pid(s
);
3171 service_enter_running(s
, SERVICE_SUCCESS
);
3174 case SERVICE_RELOAD
:
3175 if (f
== SERVICE_SUCCESS
)
3176 if (service_load_pid_file(s
, true) < 0)
3177 service_search_main_pid(s
);
3179 s
->reload_result
= f
;
3180 service_enter_running(s
, SERVICE_SUCCESS
);
3184 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3187 case SERVICE_STOP_SIGABRT
:
3188 case SERVICE_STOP_SIGTERM
:
3189 case SERVICE_STOP_SIGKILL
:
3190 if (main_pid_good(s
) <= 0)
3191 service_enter_stop_post(s
, f
);
3193 /* If there is still a service
3194 * process around, wait until
3195 * that one quit, too */
3198 case SERVICE_STOP_POST
:
3199 case SERVICE_FINAL_SIGTERM
:
3200 case SERVICE_FINAL_SIGKILL
:
3201 if (main_pid_good(s
) <= 0)
3202 service_enter_dead(s
, f
, true);
3206 assert_not_reached("Uh, control process died at wrong time.");
3211 /* Notify clients about changed exit status */
3212 unit_add_to_dbus_queue(u
);
3214 /* We got one SIGCHLD for the service, let's watch all
3215 * processes that are now running of the service, and watch
3216 * that. Among the PIDs we then watch will be children
3217 * reassigned to us, which hopefully allows us to identify
3218 * when all children are gone */
3219 unit_tidy_watch_pids(u
, s
->main_pid
, s
->control_pid
);
3220 unit_watch_all_pids(u
);
3222 /* If the PID set is empty now, then let's finish this off
3223 (On unified we use proper notifications) */
3224 if (cg_unified_controller(SYSTEMD_CGROUP_CONTROLLER
) == 0 && set_isempty(u
->pids
))
3225 unit_add_to_cgroup_empty_queue(u
);
3228 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
) {
3229 Service
*s
= SERVICE(userdata
);
3232 assert(source
== s
->timer_event_source
);
3236 case SERVICE_START_PRE
:
3238 log_unit_warning(UNIT(s
), "%s operation timed out. Terminating.", s
->state
== SERVICE_START
? "Start" : "Start-pre");
3239 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
3242 case SERVICE_START_POST
:
3243 log_unit_warning(UNIT(s
), "Start-post operation timed out. Stopping.");
3244 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
3247 case SERVICE_RUNNING
:
3248 log_unit_warning(UNIT(s
), "Service reached runtime time limit. Stopping.");
3249 service_enter_stop(s
, SERVICE_FAILURE_TIMEOUT
);
3252 case SERVICE_RELOAD
:
3253 log_unit_warning(UNIT(s
), "Reload operation timed out. Killing reload process.");
3254 service_kill_control_processes(s
);
3255 s
->reload_result
= SERVICE_FAILURE_TIMEOUT
;
3256 service_enter_running(s
, SERVICE_SUCCESS
);
3260 log_unit_warning(UNIT(s
), "Stopping timed out. Terminating.");
3261 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
3264 case SERVICE_STOP_SIGABRT
:
3265 log_unit_warning(UNIT(s
), "State 'stop-sigabrt' timed out. Terminating.");
3266 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
3269 case SERVICE_STOP_SIGTERM
:
3270 if (s
->kill_context
.send_sigkill
) {
3271 log_unit_warning(UNIT(s
), "State 'stop-sigterm' timed out. Killing.");
3272 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
3274 log_unit_warning(UNIT(s
), "State 'stop-sigterm' timed out. Skipping SIGKILL.");
3275 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
3280 case SERVICE_STOP_SIGKILL
:
3281 /* Uh, we sent a SIGKILL and it is still not gone?
3282 * Must be something we cannot kill, so let's just be
3283 * weirded out and continue */
3285 log_unit_warning(UNIT(s
), "Processes still around after SIGKILL. Ignoring.");
3286 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
3289 case SERVICE_STOP_POST
:
3290 log_unit_warning(UNIT(s
), "State 'stop-post' timed out. Terminating.");
3291 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
3294 case SERVICE_FINAL_SIGTERM
:
3295 if (s
->kill_context
.send_sigkill
) {
3296 log_unit_warning(UNIT(s
), "State 'stop-final-sigterm' timed out. Killing.");
3297 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
3299 log_unit_warning(UNIT(s
), "State 'stop-final-sigterm' timed out. Skipping SIGKILL. Entering failed mode.");
3300 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, false);
3305 case SERVICE_FINAL_SIGKILL
:
3306 log_unit_warning(UNIT(s
), "Processes still around after final SIGKILL. Entering failed mode.");
3307 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, true);
3310 case SERVICE_AUTO_RESTART
:
3311 log_unit_info(UNIT(s
),
3312 s
->restart_usec
> 0 ?
3313 "Service hold-off time over, scheduling restart." :
3314 "Service has no hold-off time, scheduling restart.");
3315 service_enter_restart(s
);
3319 assert_not_reached("Timeout at wrong time.");
3325 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
) {
3326 Service
*s
= SERVICE(userdata
);
3327 char t
[FORMAT_TIMESPAN_MAX
];
3328 usec_t watchdog_usec
;
3331 assert(source
== s
->watchdog_event_source
);
3333 watchdog_usec
= service_get_watchdog_usec(s
);
3335 log_unit_error(UNIT(s
), "Watchdog timeout (limit %s)!",
3336 format_timespan(t
, sizeof(t
), watchdog_usec
, 1));
3338 service_enter_signal(s
, SERVICE_STOP_SIGABRT
, SERVICE_FAILURE_WATCHDOG
);
3343 static void service_notify_message(Unit
*u
, pid_t pid
, char **tags
, FDSet
*fds
) {
3344 Service
*s
= SERVICE(u
);
3345 _cleanup_free_
char *cc
= NULL
;
3346 bool notify_dbus
= false;
3351 cc
= strv_join(tags
, ", ");
3353 if (s
->notify_access
== NOTIFY_NONE
) {
3354 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception is disabled.", pid
);
3356 } else if (s
->notify_access
== NOTIFY_MAIN
&& pid
!= s
->main_pid
) {
3357 if (s
->main_pid
!= 0)
3358 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for main PID "PID_FMT
, pid
, s
->main_pid
);
3360 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for main PID which is currently not known", pid
);
3362 } else if (s
->notify_access
== NOTIFY_EXEC
&& pid
!= s
->main_pid
&& pid
!= s
->control_pid
) {
3363 if (s
->main_pid
!= 0 && s
->control_pid
!= 0)
3364 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for main PID "PID_FMT
" and control PID "PID_FMT
,
3365 pid
, s
->main_pid
, s
->control_pid
);
3366 else if (s
->main_pid
!= 0)
3367 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for main PID "PID_FMT
, pid
, s
->main_pid
);
3368 else if (s
->control_pid
!= 0)
3369 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for control PID "PID_FMT
, pid
, s
->control_pid
);
3371 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for main PID and control PID which are currently not known", pid
);
3374 log_unit_debug(u
, "Got notification message from PID "PID_FMT
" (%s)", pid
, isempty(cc
) ? "n/a" : cc
);
3376 /* Interpret MAINPID= */
3377 e
= strv_find_startswith(tags
, "MAINPID=");
3378 if (e
&& IN_SET(s
->state
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
)) {
3379 if (parse_pid(e
, &pid
) < 0)
3380 log_unit_warning(u
, "Failed to parse MAINPID= field in notification message: %s", e
);
3381 else if (pid
== s
->control_pid
)
3382 log_unit_warning(u
, "A control process cannot also be the main process");
3383 else if (pid
== getpid_cached() || pid
== 1)
3384 log_unit_warning(u
, "Service manager can't be main process, ignoring sd_notify() MAINPID= field");
3386 service_set_main_pid(s
, pid
);
3387 unit_watch_pid(UNIT(s
), pid
);
3392 /* Interpret RELOADING= */
3393 if (strv_find(tags
, "RELOADING=1")) {
3395 s
->notify_state
= NOTIFY_RELOADING
;
3397 if (s
->state
== SERVICE_RUNNING
)
3398 service_enter_reload_by_notify(s
);
3403 /* Interpret READY= */
3404 if (strv_find(tags
, "READY=1")) {
3406 s
->notify_state
= NOTIFY_READY
;
3408 /* Type=notify services inform us about completed
3409 * initialization with READY=1 */
3410 if (s
->type
== SERVICE_NOTIFY
&& s
->state
== SERVICE_START
)
3411 service_enter_start_post(s
);
3413 /* Sending READY=1 while we are reloading informs us
3414 * that the reloading is complete */
3415 if (s
->state
== SERVICE_RELOAD
&& s
->control_pid
== 0)
3416 service_enter_running(s
, SERVICE_SUCCESS
);
3421 /* Interpret STOPPING= */
3422 if (strv_find(tags
, "STOPPING=1")) {
3424 s
->notify_state
= NOTIFY_STOPPING
;
3426 if (s
->state
== SERVICE_RUNNING
)
3427 service_enter_stop_by_notify(s
);
3432 /* Interpret STATUS= */
3433 e
= strv_find_startswith(tags
, "STATUS=");
3435 _cleanup_free_
char *t
= NULL
;
3438 if (!utf8_is_valid(e
))
3439 log_unit_warning(u
, "Status message in notification message is not UTF-8 clean.");
3447 if (!streq_ptr(s
->status_text
, t
)) {
3448 free_and_replace(s
->status_text
, t
);
3453 /* Interpret ERRNO= */
3454 e
= strv_find_startswith(tags
, "ERRNO=");
3458 if (safe_atoi(e
, &status_errno
) < 0 || status_errno
< 0)
3459 log_unit_warning(u
, "Failed to parse ERRNO= field in notification message: %s", e
);
3461 if (s
->status_errno
!= status_errno
) {
3462 s
->status_errno
= status_errno
;
3468 /* Interpret WATCHDOG= */
3469 if (strv_find(tags
, "WATCHDOG=1"))
3470 service_reset_watchdog(s
);
3472 if (strv_find(tags
, "FDSTORE=1")) {
3475 name
= strv_find_startswith(tags
, "FDNAME=");
3476 if (name
&& !fdname_is_valid(name
)) {
3477 log_unit_warning(u
, "Passed FDNAME= name is invalid, ignoring.");
3481 service_add_fd_store_set(s
, fds
, name
);
3484 e
= strv_find_startswith(tags
, "WATCHDOG_USEC=");
3486 usec_t watchdog_override_usec
;
3487 if (safe_atou64(e
, &watchdog_override_usec
) < 0)
3488 log_unit_warning(u
, "Failed to parse WATCHDOG_USEC=%s", e
);
3490 service_reset_watchdog_timeout(s
, watchdog_override_usec
);
3493 /* Notify clients about changed status or main pid */
3495 unit_add_to_dbus_queue(u
);
3498 static int service_get_timeout(Unit
*u
, usec_t
*timeout
) {
3499 Service
*s
= SERVICE(u
);
3503 if (!s
->timer_event_source
)
3506 r
= sd_event_source_get_time(s
->timer_event_source
, &t
);
3509 if (t
== USEC_INFINITY
)
3516 static void service_bus_name_owner_change(
3519 const char *old_owner
,
3520 const char *new_owner
) {
3522 Service
*s
= SERVICE(u
);
3528 assert(streq(s
->bus_name
, name
));
3529 assert(old_owner
|| new_owner
);
3531 if (old_owner
&& new_owner
)
3532 log_unit_debug(u
, "D-Bus name %s changed owner from %s to %s", name
, old_owner
, new_owner
);
3534 log_unit_debug(u
, "D-Bus name %s no longer registered by %s", name
, old_owner
);
3536 log_unit_debug(u
, "D-Bus name %s now registered by %s", name
, new_owner
);
3538 s
->bus_name_good
= !!new_owner
;
3540 /* Track the current owner, so we can reconstruct changes after a daemon reload */
3541 r
= free_and_strdup(&s
->bus_name_owner
, new_owner
);
3543 log_unit_error_errno(u
, r
, "Unable to set new bus name owner %s: %m", new_owner
);
3547 if (s
->type
== SERVICE_DBUS
) {
3549 /* service_enter_running() will figure out what to
3551 if (s
->state
== SERVICE_RUNNING
)
3552 service_enter_running(s
, SERVICE_SUCCESS
);
3553 else if (s
->state
== SERVICE_START
&& new_owner
)
3554 service_enter_start_post(s
);
3556 } else if (new_owner
&&
3564 _cleanup_(sd_bus_creds_unrefp
) sd_bus_creds
*creds
= NULL
;
3567 /* Try to acquire PID from bus service */
3569 r
= sd_bus_get_name_creds(u
->manager
->api_bus
, name
, SD_BUS_CREDS_PID
, &creds
);
3571 r
= sd_bus_creds_get_pid(creds
, &pid
);
3573 log_unit_debug(u
, "D-Bus name %s is now owned by process " PID_FMT
, name
, pid
);
3575 service_set_main_pid(s
, pid
);
3576 unit_watch_pid(UNIT(s
), pid
);
3581 int service_set_socket_fd(Service
*s
, int fd
, Socket
*sock
, bool selinux_context_net
) {
3582 _cleanup_free_
char *peer
= NULL
;
3588 /* This is called by the socket code when instantiating a new service for a stream socket and the socket needs
3589 * to be configured. We take ownership of the passed fd on success. */
3591 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
3594 if (s
->socket_fd
>= 0)
3597 if (s
->state
!= SERVICE_DEAD
)
3600 if (getpeername_pretty(fd
, true, &peer
) >= 0) {
3602 if (UNIT(s
)->description
) {
3603 _cleanup_free_
char *a
;
3605 a
= strjoin(UNIT(s
)->description
, " (", peer
, ")");
3609 r
= unit_set_description(UNIT(s
), a
);
3611 r
= unit_set_description(UNIT(s
), peer
);
3617 r
= unit_add_two_dependencies(UNIT(sock
), UNIT_BEFORE
, UNIT_TRIGGERS
, UNIT(s
), false, UNIT_DEPENDENCY_IMPLICIT
);
3622 s
->socket_fd_selinux_context_net
= selinux_context_net
;
3624 unit_ref_set(&s
->accept_socket
, UNIT(sock
));
3628 static void service_reset_failed(Unit
*u
) {
3629 Service
*s
= SERVICE(u
);
3633 if (s
->state
== SERVICE_FAILED
)
3634 service_set_state(s
, SERVICE_DEAD
);
3636 s
->result
= SERVICE_SUCCESS
;
3637 s
->reload_result
= SERVICE_SUCCESS
;
3639 s
->flush_n_restarts
= false;
3642 static int service_kill(Unit
*u
, KillWho who
, int signo
, sd_bus_error
*error
) {
3643 Service
*s
= SERVICE(u
);
3647 return unit_kill_common(u
, who
, signo
, s
->main_pid
, s
->control_pid
, error
);
3650 static int service_main_pid(Unit
*u
) {
3651 Service
*s
= SERVICE(u
);
3658 static int service_control_pid(Unit
*u
) {
3659 Service
*s
= SERVICE(u
);
3663 return s
->control_pid
;
3666 static const char* const service_restart_table
[_SERVICE_RESTART_MAX
] = {
3667 [SERVICE_RESTART_NO
] = "no",
3668 [SERVICE_RESTART_ON_SUCCESS
] = "on-success",
3669 [SERVICE_RESTART_ON_FAILURE
] = "on-failure",
3670 [SERVICE_RESTART_ON_ABNORMAL
] = "on-abnormal",
3671 [SERVICE_RESTART_ON_WATCHDOG
] = "on-watchdog",
3672 [SERVICE_RESTART_ON_ABORT
] = "on-abort",
3673 [SERVICE_RESTART_ALWAYS
] = "always",
3676 DEFINE_STRING_TABLE_LOOKUP(service_restart
, ServiceRestart
);
3678 static const char* const service_type_table
[_SERVICE_TYPE_MAX
] = {
3679 [SERVICE_SIMPLE
] = "simple",
3680 [SERVICE_FORKING
] = "forking",
3681 [SERVICE_ONESHOT
] = "oneshot",
3682 [SERVICE_DBUS
] = "dbus",
3683 [SERVICE_NOTIFY
] = "notify",
3684 [SERVICE_IDLE
] = "idle"
3687 DEFINE_STRING_TABLE_LOOKUP(service_type
, ServiceType
);
3689 static const char* const service_exec_command_table
[_SERVICE_EXEC_COMMAND_MAX
] = {
3690 [SERVICE_EXEC_START_PRE
] = "ExecStartPre",
3691 [SERVICE_EXEC_START
] = "ExecStart",
3692 [SERVICE_EXEC_START_POST
] = "ExecStartPost",
3693 [SERVICE_EXEC_RELOAD
] = "ExecReload",
3694 [SERVICE_EXEC_STOP
] = "ExecStop",
3695 [SERVICE_EXEC_STOP_POST
] = "ExecStopPost",
3698 DEFINE_STRING_TABLE_LOOKUP(service_exec_command
, ServiceExecCommand
);
3700 static const char* const notify_state_table
[_NOTIFY_STATE_MAX
] = {
3701 [NOTIFY_UNKNOWN
] = "unknown",
3702 [NOTIFY_READY
] = "ready",
3703 [NOTIFY_RELOADING
] = "reloading",
3704 [NOTIFY_STOPPING
] = "stopping",
3707 DEFINE_STRING_TABLE_LOOKUP(notify_state
, NotifyState
);
3709 static const char* const service_result_table
[_SERVICE_RESULT_MAX
] = {
3710 [SERVICE_SUCCESS
] = "success",
3711 [SERVICE_FAILURE_RESOURCES
] = "resources",
3712 [SERVICE_FAILURE_PROTOCOL
] = "protocol",
3713 [SERVICE_FAILURE_TIMEOUT
] = "timeout",
3714 [SERVICE_FAILURE_EXIT_CODE
] = "exit-code",
3715 [SERVICE_FAILURE_SIGNAL
] = "signal",
3716 [SERVICE_FAILURE_CORE_DUMP
] = "core-dump",
3717 [SERVICE_FAILURE_WATCHDOG
] = "watchdog",
3718 [SERVICE_FAILURE_START_LIMIT_HIT
] = "start-limit-hit",
3721 DEFINE_STRING_TABLE_LOOKUP(service_result
, ServiceResult
);
3723 const UnitVTable service_vtable
= {
3724 .object_size
= sizeof(Service
),
3725 .exec_context_offset
= offsetof(Service
, exec_context
),
3726 .cgroup_context_offset
= offsetof(Service
, cgroup_context
),
3727 .kill_context_offset
= offsetof(Service
, kill_context
),
3728 .exec_runtime_offset
= offsetof(Service
, exec_runtime
),
3729 .dynamic_creds_offset
= offsetof(Service
, dynamic_creds
),
3735 .private_section
= "Service",
3737 .init
= service_init
,
3738 .done
= service_done
,
3739 .load
= service_load
,
3740 .release_resources
= service_release_resources
,
3742 .coldplug
= service_coldplug
,
3744 .dump
= service_dump
,
3746 .start
= service_start
,
3747 .stop
= service_stop
,
3748 .reload
= service_reload
,
3750 .can_reload
= service_can_reload
,
3752 .kill
= service_kill
,
3754 .serialize
= service_serialize
,
3755 .deserialize_item
= service_deserialize_item
,
3757 .active_state
= service_active_state
,
3758 .sub_state_to_string
= service_sub_state_to_string
,
3760 .check_gc
= service_check_gc
,
3762 .sigchld_event
= service_sigchld_event
,
3764 .reset_failed
= service_reset_failed
,
3766 .notify_cgroup_empty
= service_notify_cgroup_empty_event
,
3767 .notify_message
= service_notify_message
,
3769 .main_pid
= service_main_pid
,
3770 .control_pid
= service_control_pid
,
3772 .bus_name_owner_change
= service_bus_name_owner_change
,
3774 .bus_vtable
= bus_service_vtable
,
3775 .bus_set_property
= bus_service_set_property
,
3776 .bus_commit_properties
= bus_service_commit_properties
,
3778 .get_timeout
= service_get_timeout
,
3779 .can_transient
= true,
3781 .status_message_formats
= {
3782 .starting_stopping
= {
3783 [0] = "Starting %s...",
3784 [1] = "Stopping %s...",
3786 .finished_start_job
= {
3787 [JOB_DONE
] = "Started %s.",
3788 [JOB_FAILED
] = "Failed to start %s.",
3790 .finished_stop_job
= {
3791 [JOB_DONE
] = "Stopped %s.",
3792 [JOB_FAILED
] = "Stopped (with error) %s.",