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
;
124 s
->exec_context
.keyring_mode
= MANAGER_IS_SYSTEM(u
->manager
) ?
125 EXEC_KEYRING_PRIVATE
: EXEC_KEYRING_INHERIT
;
128 static void service_unwatch_control_pid(Service
*s
) {
131 if (s
->control_pid
<= 0)
134 unit_unwatch_pid(UNIT(s
), s
->control_pid
);
138 static void service_unwatch_main_pid(Service
*s
) {
141 if (s
->main_pid
<= 0)
144 unit_unwatch_pid(UNIT(s
), s
->main_pid
);
148 static void service_unwatch_pid_file(Service
*s
) {
149 if (!s
->pid_file_pathspec
)
152 log_unit_debug(UNIT(s
), "Stopping watch for PID file %s", s
->pid_file_pathspec
->path
);
153 path_spec_unwatch(s
->pid_file_pathspec
);
154 path_spec_done(s
->pid_file_pathspec
);
155 s
->pid_file_pathspec
= mfree(s
->pid_file_pathspec
);
158 static int service_set_main_pid(Service
*s
, pid_t pid
) {
166 if (pid
== getpid_cached())
169 if (s
->main_pid
== pid
&& s
->main_pid_known
)
172 if (s
->main_pid
!= pid
) {
173 service_unwatch_main_pid(s
);
174 exec_status_start(&s
->main_exec_status
, pid
);
178 s
->main_pid_known
= true;
180 if (get_process_ppid(pid
, &ppid
) >= 0 && ppid
!= getpid_cached()) {
181 log_unit_warning(UNIT(s
), "Supervising process "PID_FMT
" which is not our child. We'll most likely not notice when it exits.", pid
);
182 s
->main_pid_alien
= true;
184 s
->main_pid_alien
= false;
189 void service_close_socket_fd(Service
*s
) {
192 /* Undo the effect of service_set_socket_fd(). */
194 s
->socket_fd
= asynchronous_close(s
->socket_fd
);
196 if (UNIT_ISSET(s
->accept_socket
)) {
197 socket_connection_unref(SOCKET(UNIT_DEREF(s
->accept_socket
)));
198 unit_ref_unset(&s
->accept_socket
);
202 static void service_stop_watchdog(Service
*s
) {
205 s
->watchdog_event_source
= sd_event_source_unref(s
->watchdog_event_source
);
206 s
->watchdog_timestamp
= DUAL_TIMESTAMP_NULL
;
209 static usec_t
service_get_watchdog_usec(Service
*s
) {
212 if (s
->watchdog_override_enable
)
213 return s
->watchdog_override_usec
;
215 return s
->watchdog_usec
;
218 static void service_start_watchdog(Service
*s
) {
220 usec_t watchdog_usec
;
224 watchdog_usec
= service_get_watchdog_usec(s
);
225 if (IN_SET(watchdog_usec
, 0, USEC_INFINITY
))
228 if (s
->watchdog_event_source
) {
229 r
= sd_event_source_set_time(s
->watchdog_event_source
, usec_add(s
->watchdog_timestamp
.monotonic
, watchdog_usec
));
231 log_unit_warning_errno(UNIT(s
), r
, "Failed to reset watchdog timer: %m");
235 r
= sd_event_source_set_enabled(s
->watchdog_event_source
, SD_EVENT_ONESHOT
);
237 r
= sd_event_add_time(
238 UNIT(s
)->manager
->event
,
239 &s
->watchdog_event_source
,
241 usec_add(s
->watchdog_timestamp
.monotonic
, watchdog_usec
), 0,
242 service_dispatch_watchdog
, s
);
244 log_unit_warning_errno(UNIT(s
), r
, "Failed to add watchdog timer: %m");
248 (void) sd_event_source_set_description(s
->watchdog_event_source
, "service-watchdog");
250 /* Let's process everything else which might be a sign
251 * of living before we consider a service died. */
252 r
= sd_event_source_set_priority(s
->watchdog_event_source
, SD_EVENT_PRIORITY_IDLE
);
256 log_unit_warning_errno(UNIT(s
), r
, "Failed to install watchdog timer: %m");
259 static void service_extend_timeout(Service
*s
, usec_t extend_timeout_usec
) {
262 if (s
->timer_event_source
) {
263 uint64_t current
= 0, extended
= 0;
266 if (IN_SET(extend_timeout_usec
, 0, USEC_INFINITY
))
269 extended
= usec_add(now(CLOCK_MONOTONIC
), extend_timeout_usec
);
271 r
= sd_event_source_get_time(s
->timer_event_source
, ¤t
);
273 log_unit_error_errno(UNIT(s
), r
, "Failed to retrieve timeout timer: %m");
274 else if (extended
> current
) {
275 r
= sd_event_source_set_time(s
->timer_event_source
, extended
);
277 log_unit_warning_errno(UNIT(s
), r
, "Failed to set timeout timer: %m");
280 if (s
->watchdog_event_source
) {
281 /* extend watchdog if necessary. We've asked for an extended timeout so we
282 * shouldn't expect a watchdog timeout in the interval in between */
283 r
= sd_event_source_get_time(s
->watchdog_event_source
, ¤t
);
285 log_unit_error_errno(UNIT(s
), r
, "Failed to retrieve watchdog timer: %m");
289 if (extended
> current
) {
290 r
= sd_event_source_set_time(s
->watchdog_event_source
, extended
);
292 log_unit_warning_errno(UNIT(s
), r
, "Failed to set watchdog timer: %m");
298 static void service_reset_watchdog(Service
*s
) {
301 dual_timestamp_get(&s
->watchdog_timestamp
);
302 service_start_watchdog(s
);
305 static void service_reset_watchdog_timeout(Service
*s
, usec_t watchdog_override_usec
) {
308 s
->watchdog_override_enable
= true;
309 s
->watchdog_override_usec
= watchdog_override_usec
;
310 service_reset_watchdog(s
);
312 log_unit_debug(UNIT(s
), "watchdog_usec="USEC_FMT
, s
->watchdog_usec
);
313 log_unit_debug(UNIT(s
), "watchdog_override_usec="USEC_FMT
, s
->watchdog_override_usec
);
316 static void service_fd_store_unlink(ServiceFDStore
*fs
) {
322 assert(fs
->service
->n_fd_store
> 0);
323 LIST_REMOVE(fd_store
, fs
->service
->fd_store
, fs
);
324 fs
->service
->n_fd_store
--;
327 if (fs
->event_source
) {
328 sd_event_source_set_enabled(fs
->event_source
, SD_EVENT_OFF
);
329 sd_event_source_unref(fs
->event_source
);
337 static void service_release_fd_store(Service
*s
) {
340 if (s
->n_keep_fd_store
> 0)
343 log_unit_debug(UNIT(s
), "Releasing all stored fds");
345 service_fd_store_unlink(s
->fd_store
);
347 assert(s
->n_fd_store
== 0);
350 static void service_release_resources(Unit
*u
) {
351 Service
*s
= SERVICE(u
);
355 if (!s
->fd_store
&& s
->stdin_fd
< 0 && s
->stdout_fd
< 0 && s
->stderr_fd
< 0)
358 log_unit_debug(u
, "Releasing resources.");
360 s
->stdin_fd
= safe_close(s
->stdin_fd
);
361 s
->stdout_fd
= safe_close(s
->stdout_fd
);
362 s
->stderr_fd
= safe_close(s
->stderr_fd
);
364 service_release_fd_store(s
);
367 static void service_done(Unit
*u
) {
368 Service
*s
= SERVICE(u
);
372 s
->pid_file
= mfree(s
->pid_file
);
373 s
->status_text
= mfree(s
->status_text
);
375 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
, false);
376 exec_command_free_array(s
->exec_command
, _SERVICE_EXEC_COMMAND_MAX
);
377 s
->control_command
= NULL
;
378 s
->main_command
= NULL
;
380 dynamic_creds_unref(&s
->dynamic_creds
);
382 exit_status_set_free(&s
->restart_prevent_status
);
383 exit_status_set_free(&s
->restart_force_status
);
384 exit_status_set_free(&s
->success_status
);
386 /* This will leak a process, but at least no memory or any of
388 service_unwatch_main_pid(s
);
389 service_unwatch_control_pid(s
);
390 service_unwatch_pid_file(s
);
393 unit_unwatch_bus_name(u
, s
->bus_name
);
394 s
->bus_name
= mfree(s
->bus_name
);
397 s
->bus_name_owner
= mfree(s
->bus_name_owner
);
399 s
->usb_function_descriptors
= mfree(s
->usb_function_descriptors
);
400 s
->usb_function_strings
= mfree(s
->usb_function_strings
);
402 service_close_socket_fd(s
);
403 s
->peer
= socket_peer_unref(s
->peer
);
405 unit_ref_unset(&s
->accept_socket
);
407 service_stop_watchdog(s
);
409 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
411 service_release_resources(u
);
414 static int on_fd_store_io(sd_event_source
*e
, int fd
, uint32_t revents
, void *userdata
) {
415 ServiceFDStore
*fs
= userdata
;
420 /* If we get either EPOLLHUP or EPOLLERR, it's time to remove this entry from the fd store */
421 log_unit_debug(UNIT(fs
->service
),
422 "Received %s on stored fd %d (%s), closing.",
423 revents
& EPOLLERR
? "EPOLLERR" : "EPOLLHUP",
424 fs
->fd
, strna(fs
->fdname
));
425 service_fd_store_unlink(fs
);
429 static int service_add_fd_store(Service
*s
, int fd
, const char *name
) {
433 /* fd is always consumed if we return >= 0 */
438 if (s
->n_fd_store
>= s
->n_fd_store_max
)
439 return -EXFULL
; /* Our store is full.
440 * Use this errno rather than E[NM]FILE to distinguish from
441 * the case where systemd itself hits the file limit. */
443 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
444 r
= same_fd(fs
->fd
, fd
);
449 return 0; /* fd already included */
453 fs
= new0(ServiceFDStore
, 1);
459 fs
->fdname
= strdup(name
?: "stored");
465 r
= sd_event_add_io(UNIT(s
)->manager
->event
, &fs
->event_source
, fd
, 0, on_fd_store_io
, fs
);
466 if (r
< 0 && r
!= -EPERM
) { /* EPERM indicates fds that aren't pollable, which is OK */
471 (void) sd_event_source_set_description(fs
->event_source
, "service-fd-store");
473 LIST_PREPEND(fd_store
, s
->fd_store
, fs
);
476 return 1; /* fd newly stored */
479 static int service_add_fd_store_set(Service
*s
, FDSet
*fds
, const char *name
) {
484 while (fdset_size(fds
) > 0) {
485 _cleanup_close_
int fd
= -1;
487 fd
= fdset_steal_first(fds
);
491 r
= service_add_fd_store(s
, fd
, name
);
493 return log_unit_warning_errno(UNIT(s
), r
,
494 "Cannot store more fds than FileDescriptorStoreMax=%u, closing remaining.",
497 return log_unit_error_errno(UNIT(s
), r
, "Failed to add fd to store: %m");
499 log_unit_debug(UNIT(s
), "Added fd %u (%s) to fd store.", fd
, strna(name
));
506 static void service_remove_fd_store(Service
*s
, const char *name
) {
507 ServiceFDStore
*fs
, *n
;
512 LIST_FOREACH_SAFE(fd_store
, fs
, n
, s
->fd_store
) {
513 if (!streq(fs
->fdname
, name
))
516 log_unit_debug(UNIT(s
), "Got explicit request to remove fd %i (%s), closing.", fs
->fd
, name
);
517 service_fd_store_unlink(fs
);
521 static int service_arm_timer(Service
*s
, usec_t usec
) {
526 if (s
->timer_event_source
) {
527 r
= sd_event_source_set_time(s
->timer_event_source
, usec
);
531 return sd_event_source_set_enabled(s
->timer_event_source
, SD_EVENT_ONESHOT
);
534 if (usec
== USEC_INFINITY
)
537 r
= sd_event_add_time(
538 UNIT(s
)->manager
->event
,
539 &s
->timer_event_source
,
542 service_dispatch_timer
, s
);
546 (void) sd_event_source_set_description(s
->timer_event_source
, "service-timer");
551 static int service_verify(Service
*s
) {
554 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
557 if (!s
->exec_command
[SERVICE_EXEC_START
] && !s
->exec_command
[SERVICE_EXEC_STOP
]) {
558 log_unit_error(UNIT(s
), "Service lacks both ExecStart= and ExecStop= setting. Refusing.");
562 if (s
->type
!= SERVICE_ONESHOT
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
563 log_unit_error(UNIT(s
), "Service has no ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
567 if (!s
->remain_after_exit
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
568 log_unit_error(UNIT(s
), "Service has no ExecStart= setting, which is only allowed for RemainAfterExit=yes services. Refusing.");
572 if (s
->type
!= SERVICE_ONESHOT
&& s
->exec_command
[SERVICE_EXEC_START
]->command_next
) {
573 log_unit_error(UNIT(s
), "Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
577 if (s
->type
== SERVICE_ONESHOT
&& s
->restart
!= SERVICE_RESTART_NO
) {
578 log_unit_error(UNIT(s
), "Service has Restart= setting other than no, which isn't allowed for Type=oneshot services. Refusing.");
582 if (s
->type
== SERVICE_ONESHOT
&& !exit_status_set_is_empty(&s
->restart_force_status
)) {
583 log_unit_error(UNIT(s
), "Service has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.");
587 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name
) {
588 log_unit_error(UNIT(s
), "Service is of type D-Bus but no D-Bus service name has been specified. Refusing.");
592 if (s
->bus_name
&& s
->type
!= SERVICE_DBUS
)
593 log_unit_warning(UNIT(s
), "Service has a D-Bus service name specified, but is not of type dbus. Ignoring.");
595 if (s
->exec_context
.pam_name
&& !IN_SET(s
->kill_context
.kill_mode
, KILL_CONTROL_GROUP
, KILL_MIXED
)) {
596 log_unit_error(UNIT(s
), "Service has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.");
600 if (s
->usb_function_descriptors
&& !s
->usb_function_strings
)
601 log_unit_warning(UNIT(s
), "Service has USBFunctionDescriptors= setting, but no USBFunctionStrings=. Ignoring.");
603 if (!s
->usb_function_descriptors
&& s
->usb_function_strings
)
604 log_unit_warning(UNIT(s
), "Service has USBFunctionStrings= setting, but no USBFunctionDescriptors=. Ignoring.");
606 if (s
->runtime_max_usec
!= USEC_INFINITY
&& s
->type
== SERVICE_ONESHOT
)
607 log_unit_warning(UNIT(s
), "MaxRuntimeSec= has no effect in combination with Type=oneshot. Ignoring.");
612 static int service_add_default_dependencies(Service
*s
) {
617 if (!UNIT(s
)->default_dependencies
)
620 /* Add a number of automatic dependencies useful for the
621 * majority of services. */
623 if (MANAGER_IS_SYSTEM(UNIT(s
)->manager
)) {
624 /* First, pull in the really early boot stuff, and
625 * require it, so that we fail if we can't acquire
628 r
= unit_add_two_dependencies_by_name(UNIT(s
), UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_SYSINIT_TARGET
, NULL
, true, UNIT_DEPENDENCY_DEFAULT
);
633 /* In the --user instance there's no sysinit.target,
634 * in that case require basic.target instead. */
636 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_REQUIRES
, SPECIAL_BASIC_TARGET
, NULL
, true, UNIT_DEPENDENCY_DEFAULT
);
641 /* Second, if the rest of the base system is in the same
642 * transaction, order us after it, but do not pull it in or
643 * even require it. */
644 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_AFTER
, SPECIAL_BASIC_TARGET
, NULL
, true, UNIT_DEPENDENCY_DEFAULT
);
648 /* Third, add us in for normal shutdown. */
649 return unit_add_two_dependencies_by_name(UNIT(s
), UNIT_BEFORE
, UNIT_CONFLICTS
, SPECIAL_SHUTDOWN_TARGET
, NULL
, true, UNIT_DEPENDENCY_DEFAULT
);
652 static void service_fix_output(Service
*s
) {
655 /* If nothing has been explicitly configured, patch default output in. If input is socket/tty we avoid this
656 * however, since in that case we want output to default to the same place as we read input from. */
658 if (s
->exec_context
.std_error
== EXEC_OUTPUT_INHERIT
&&
659 s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
660 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
661 s
->exec_context
.std_error
= UNIT(s
)->manager
->default_std_error
;
663 if (s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
664 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
665 s
->exec_context
.std_output
= UNIT(s
)->manager
->default_std_output
;
667 if (s
->exec_context
.std_input
== EXEC_INPUT_NULL
&&
668 s
->exec_context
.stdin_data_size
> 0)
669 s
->exec_context
.std_input
= EXEC_INPUT_DATA
;
672 static int service_setup_bus_name(Service
*s
) {
680 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_REQUIRES
, SPECIAL_DBUS_SOCKET
, NULL
, true, UNIT_DEPENDENCY_FILE
);
682 return log_unit_error_errno(UNIT(s
), r
, "Failed to add dependency on " SPECIAL_DBUS_SOCKET
": %m");
684 /* We always want to be ordered against dbus.socket if both are in the transaction. */
685 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_AFTER
, SPECIAL_DBUS_SOCKET
, NULL
, true, UNIT_DEPENDENCY_FILE
);
687 return log_unit_error_errno(UNIT(s
), r
, "Failed to add dependency on " SPECIAL_DBUS_SOCKET
": %m");
689 r
= unit_watch_bus_name(UNIT(s
), s
->bus_name
);
691 return log_unit_error_errno(UNIT(s
), r
, "Two services allocated for the same bus name %s, refusing operation.", s
->bus_name
);
693 return log_unit_error_errno(UNIT(s
), r
, "Cannot watch bus name %s: %m", s
->bus_name
);
698 static int service_add_extras(Service
*s
) {
703 if (s
->type
== _SERVICE_TYPE_INVALID
) {
704 /* Figure out a type automatically */
706 s
->type
= SERVICE_DBUS
;
707 else if (s
->exec_command
[SERVICE_EXEC_START
])
708 s
->type
= SERVICE_SIMPLE
;
710 s
->type
= SERVICE_ONESHOT
;
713 /* Oneshot services have disabled start timeout by default */
714 if (s
->type
== SERVICE_ONESHOT
&& !s
->start_timeout_defined
)
715 s
->timeout_start_usec
= USEC_INFINITY
;
717 service_fix_output(s
);
719 r
= unit_patch_contexts(UNIT(s
));
723 r
= unit_add_exec_dependencies(UNIT(s
), &s
->exec_context
);
727 r
= unit_set_default_slice(UNIT(s
));
731 if (s
->type
== SERVICE_NOTIFY
&& s
->notify_access
== NOTIFY_NONE
)
732 s
->notify_access
= NOTIFY_MAIN
;
734 if (s
->watchdog_usec
> 0 && s
->notify_access
== NOTIFY_NONE
)
735 s
->notify_access
= NOTIFY_MAIN
;
737 r
= service_add_default_dependencies(s
);
741 r
= service_setup_bus_name(s
);
748 static int service_load(Unit
*u
) {
749 Service
*s
= SERVICE(u
);
754 /* Load a .service file */
755 r
= unit_load_fragment(u
);
759 /* Still nothing found? Then let's give up */
760 if (u
->load_state
== UNIT_STUB
)
763 /* This is a new unit? Then let's add in some extras */
764 if (u
->load_state
== UNIT_LOADED
) {
766 /* We were able to load something, then let's add in
767 * the dropin directories. */
768 r
= unit_load_dropin(u
);
772 /* This is a new unit? Then let's add in some
774 r
= service_add_extras(s
);
779 return service_verify(s
);
782 static void service_dump(Unit
*u
, FILE *f
, const char *prefix
) {
783 char buf_restart
[FORMAT_TIMESPAN_MAX
], buf_start
[FORMAT_TIMESPAN_MAX
], buf_stop
[FORMAT_TIMESPAN_MAX
];
784 char buf_runtime
[FORMAT_TIMESPAN_MAX
], buf_watchdog
[FORMAT_TIMESPAN_MAX
];
785 ServiceExecCommand c
;
786 Service
*s
= SERVICE(u
);
791 prefix
= strempty(prefix
);
792 prefix2
= strjoina(prefix
, "\t");
795 "%sService State: %s\n"
797 "%sReload Result: %s\n"
798 "%sPermissionsStartOnly: %s\n"
799 "%sRootDirectoryStartOnly: %s\n"
800 "%sRemainAfterExit: %s\n"
801 "%sGuessMainPID: %s\n"
804 "%sNotifyAccess: %s\n"
805 "%sNotifyState: %s\n",
806 prefix
, service_state_to_string(s
->state
),
807 prefix
, service_result_to_string(s
->result
),
808 prefix
, service_result_to_string(s
->reload_result
),
809 prefix
, yes_no(s
->permissions_start_only
),
810 prefix
, yes_no(s
->root_directory_start_only
),
811 prefix
, yes_no(s
->remain_after_exit
),
812 prefix
, yes_no(s
->guess_main_pid
),
813 prefix
, service_type_to_string(s
->type
),
814 prefix
, service_restart_to_string(s
->restart
),
815 prefix
, notify_access_to_string(s
->notify_access
),
816 prefix
, notify_state_to_string(s
->notify_state
));
818 if (s
->control_pid
> 0)
820 "%sControl PID: "PID_FMT
"\n",
821 prefix
, s
->control_pid
);
825 "%sMain PID: "PID_FMT
"\n"
826 "%sMain PID Known: %s\n"
827 "%sMain PID Alien: %s\n",
829 prefix
, yes_no(s
->main_pid_known
),
830 prefix
, yes_no(s
->main_pid_alien
));
835 prefix
, s
->pid_file
);
840 "%sBus Name Good: %s\n",
842 prefix
, yes_no(s
->bus_name_good
));
844 if (UNIT_ISSET(s
->accept_socket
))
846 "%sAccept Socket: %s\n",
847 prefix
, UNIT_DEREF(s
->accept_socket
)->id
);
851 "%sTimeoutStartSec: %s\n"
852 "%sTimeoutStopSec: %s\n"
853 "%sRuntimeMaxSec: %s\n"
854 "%sWatchdogSec: %s\n",
855 prefix
, format_timespan(buf_restart
, sizeof(buf_restart
), s
->restart_usec
, USEC_PER_SEC
),
856 prefix
, format_timespan(buf_start
, sizeof(buf_start
), s
->timeout_start_usec
, USEC_PER_SEC
),
857 prefix
, format_timespan(buf_stop
, sizeof(buf_stop
), s
->timeout_stop_usec
, USEC_PER_SEC
),
858 prefix
, format_timespan(buf_runtime
, sizeof(buf_runtime
), s
->runtime_max_usec
, USEC_PER_SEC
),
859 prefix
, format_timespan(buf_watchdog
, sizeof(buf_watchdog
), s
->watchdog_usec
, USEC_PER_SEC
));
861 kill_context_dump(&s
->kill_context
, f
, prefix
);
862 exec_context_dump(&s
->exec_context
, f
, prefix
);
864 for (c
= 0; c
< _SERVICE_EXEC_COMMAND_MAX
; c
++) {
866 if (!s
->exec_command
[c
])
869 fprintf(f
, "%s-> %s:\n",
870 prefix
, service_exec_command_to_string(c
));
872 exec_command_dump_list(s
->exec_command
[c
], f
, prefix2
);
876 fprintf(f
, "%sStatus Text: %s\n",
877 prefix
, s
->status_text
);
879 if (s
->n_fd_store_max
> 0)
881 "%sFile Descriptor Store Max: %u\n"
882 "%sFile Descriptor Store Current: %u\n",
883 prefix
, s
->n_fd_store_max
,
884 prefix
, s
->n_fd_store
);
886 cgroup_context_dump(&s
->cgroup_context
, f
, prefix
);
889 static int service_is_suitable_main_pid(Service
*s
, pid_t pid
, int prio
) {
893 assert(pid_is_valid(pid
));
895 /* Checks whether the specified PID is suitable as main PID for this service. returns negative if not, 0 if the
896 * PID is questionnable but should be accepted if the source of configuration is trusted. > 0 if the PID is
899 if (pid
== getpid_cached() || pid
== 1) {
900 log_unit_full(UNIT(s
), prio
, 0, "New main PID "PID_FMT
" is the manager, refusing.", pid
);
904 if (pid
== s
->control_pid
) {
905 log_unit_full(UNIT(s
), prio
, 0, "New main PID "PID_FMT
" is the control process, refusing.", pid
);
909 if (!pid_is_alive(pid
)) {
910 log_unit_full(UNIT(s
), prio
, 0, "New main PID "PID_FMT
" does not exist or is a zombie.", pid
);
914 owner
= manager_get_unit_by_pid(UNIT(s
)->manager
, pid
);
915 if (owner
== UNIT(s
)) {
916 log_unit_debug(UNIT(s
), "New main PID "PID_FMT
" belongs to service, we are happy.", pid
);
917 return 1; /* Yay, it's definitely a good PID */
920 return 0; /* Hmm it's a suspicious PID, let's accept it if configuration source is trusted */
923 static int service_load_pid_file(Service
*s
, bool may_warn
) {
924 char procfs
[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
925 bool questionable_pid_file
= false;
926 _cleanup_free_
char *k
= NULL
;
927 _cleanup_close_
int fd
= -1;
936 prio
= may_warn
? LOG_INFO
: LOG_DEBUG
;
938 fd
= chase_symlinks(s
->pid_file
, NULL
, CHASE_OPEN
|CHASE_SAFE
, NULL
);
940 log_unit_full(UNIT(s
), LOG_DEBUG
, fd
, "Permission denied while opening PID file or potentially unsafe symlink chain, will now retry with relaxed checks: %s", s
->pid_file
);
942 questionable_pid_file
= true;
944 fd
= chase_symlinks(s
->pid_file
, NULL
, CHASE_OPEN
, NULL
);
947 return log_unit_full(UNIT(s
), prio
, fd
, "Can't open PID file %s (yet?) after %s: %m", s
->pid_file
, service_state_to_string(s
->state
));
949 /* Let's read the PID file now that we chased it down. But we need to convert the O_PATH fd chase_symlinks() returned us into a proper fd first. */
950 xsprintf(procfs
, "/proc/self/fd/%i", fd
);
951 r
= read_one_line_file(procfs
, &k
);
953 return log_unit_error_errno(UNIT(s
), r
, "Can't convert PID files %s O_PATH file descriptor to proper file descriptor: %m", s
->pid_file
);
955 r
= parse_pid(k
, &pid
);
957 return log_unit_full(UNIT(s
), prio
, r
, "Failed to parse PID from file %s: %m", s
->pid_file
);
959 if (s
->main_pid_known
&& pid
== s
->main_pid
)
962 r
= service_is_suitable_main_pid(s
, pid
, prio
);
968 if (questionable_pid_file
) {
969 log_unit_error(UNIT(s
), "Refusing to accept PID outside of service control group, acquired through unsafe symlink chain: %s", s
->pid_file
);
973 /* Hmm, it's not clear if the new main PID is safe. Let's allow this if the PID file is owned by root */
975 if (fstat(fd
, &st
) < 0)
976 return log_unit_error_errno(UNIT(s
), errno
, "Failed to fstat() PID file O_PATH fd: %m");
978 if (st
.st_uid
!= 0) {
979 log_unit_error(UNIT(s
), "New main PID "PID_FMT
" does not belong to service, and PID file is not owned by root. Refusing.", pid
);
983 log_unit_debug(UNIT(s
), "New main PID "PID_FMT
" does not belong to service, but we'll accept it since PID file is owned by root.", pid
);
986 if (s
->main_pid_known
) {
987 log_unit_debug(UNIT(s
), "Main PID changing: "PID_FMT
" -> "PID_FMT
, s
->main_pid
, pid
);
989 service_unwatch_main_pid(s
);
990 s
->main_pid_known
= false;
992 log_unit_debug(UNIT(s
), "Main PID loaded: "PID_FMT
, pid
);
994 r
= service_set_main_pid(s
, pid
);
998 r
= unit_watch_pid(UNIT(s
), pid
);
999 if (r
< 0) /* FIXME: we need to do something here */
1000 return log_unit_warning_errno(UNIT(s
), r
, "Failed to watch PID "PID_FMT
" for service: %m", pid
);
1005 static void service_search_main_pid(Service
*s
) {
1011 /* If we know it anyway, don't ever fallback to unreliable
1013 if (s
->main_pid_known
)
1016 if (!s
->guess_main_pid
)
1019 assert(s
->main_pid
<= 0);
1021 if (unit_search_main_pid(UNIT(s
), &pid
) < 0)
1024 log_unit_debug(UNIT(s
), "Main PID guessed: "PID_FMT
, pid
);
1025 if (service_set_main_pid(s
, pid
) < 0)
1028 r
= unit_watch_pid(UNIT(s
), pid
);
1030 /* FIXME: we need to do something here */
1031 log_unit_warning_errno(UNIT(s
), r
, "Failed to watch PID "PID_FMT
" from: %m", pid
);
1034 static void service_set_state(Service
*s
, ServiceState state
) {
1035 ServiceState old_state
;
1036 const UnitActiveState
*table
;
1040 table
= s
->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
1042 old_state
= s
->state
;
1045 service_unwatch_pid_file(s
);
1048 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
1051 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1052 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
,
1053 SERVICE_AUTO_RESTART
))
1054 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
1057 SERVICE_START
, SERVICE_START_POST
,
1058 SERVICE_RUNNING
, SERVICE_RELOAD
,
1059 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1060 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
1061 service_unwatch_main_pid(s
);
1062 s
->main_command
= NULL
;
1066 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
1068 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1069 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
1070 service_unwatch_control_pid(s
);
1071 s
->control_command
= NULL
;
1072 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
1075 if (IN_SET(state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
1076 unit_unwatch_all_pids(UNIT(s
));
1079 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
1080 SERVICE_RUNNING
, SERVICE_RELOAD
,
1081 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1082 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
) &&
1083 !(state
== SERVICE_DEAD
&& UNIT(s
)->job
))
1084 service_close_socket_fd(s
);
1086 if (!IN_SET(state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
1087 service_stop_watchdog(s
);
1089 /* For the inactive states unit_notify() will trim the cgroup,
1090 * but for exit we have to do that ourselves... */
1091 if (state
== SERVICE_EXITED
&& !MANAGER_IS_RELOADING(UNIT(s
)->manager
))
1092 unit_prune_cgroup(UNIT(s
));
1094 if (old_state
!= state
)
1095 log_unit_debug(UNIT(s
), "Changed %s -> %s", service_state_to_string(old_state
), service_state_to_string(state
));
1097 unit_notify(UNIT(s
), table
[old_state
], table
[state
], s
->reload_result
== SERVICE_SUCCESS
);
1100 static usec_t
service_coldplug_timeout(Service
*s
) {
1103 switch (s
->deserialized_state
) {
1105 case SERVICE_START_PRE
:
1107 case SERVICE_START_POST
:
1108 case SERVICE_RELOAD
:
1109 return usec_add(UNIT(s
)->state_change_timestamp
.monotonic
, s
->timeout_start_usec
);
1111 case SERVICE_RUNNING
:
1112 return usec_add(UNIT(s
)->active_enter_timestamp
.monotonic
, s
->runtime_max_usec
);
1115 case SERVICE_STOP_SIGABRT
:
1116 case SERVICE_STOP_SIGTERM
:
1117 case SERVICE_STOP_SIGKILL
:
1118 case SERVICE_STOP_POST
:
1119 case SERVICE_FINAL_SIGTERM
:
1120 case SERVICE_FINAL_SIGKILL
:
1121 return usec_add(UNIT(s
)->state_change_timestamp
.monotonic
, s
->timeout_stop_usec
);
1123 case SERVICE_AUTO_RESTART
:
1124 return usec_add(UNIT(s
)->inactive_enter_timestamp
.monotonic
, s
->restart_usec
);
1127 return USEC_INFINITY
;
1131 static int service_coldplug(Unit
*u
) {
1132 Service
*s
= SERVICE(u
);
1136 assert(s
->state
== SERVICE_DEAD
);
1138 if (s
->deserialized_state
== s
->state
)
1141 r
= service_arm_timer(s
, service_coldplug_timeout(s
));
1145 if (s
->main_pid
> 0 &&
1146 pid_is_unwaited(s
->main_pid
) &&
1147 (IN_SET(s
->deserialized_state
,
1148 SERVICE_START
, SERVICE_START_POST
,
1149 SERVICE_RUNNING
, SERVICE_RELOAD
,
1150 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1151 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))) {
1152 r
= unit_watch_pid(UNIT(s
), s
->main_pid
);
1157 if (s
->control_pid
> 0 &&
1158 pid_is_unwaited(s
->control_pid
) &&
1159 IN_SET(s
->deserialized_state
,
1160 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
1162 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1163 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
1164 r
= unit_watch_pid(UNIT(s
), s
->control_pid
);
1169 if (!IN_SET(s
->deserialized_state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
1170 unit_watch_all_pids(UNIT(s
));
1172 if (IN_SET(s
->deserialized_state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
1173 service_start_watchdog(s
);
1175 if (!IN_SET(s
->deserialized_state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
)) {
1176 (void) unit_setup_dynamic_creds(u
);
1177 (void) unit_setup_exec_runtime(u
);
1180 if (UNIT_ISSET(s
->accept_socket
)) {
1181 Socket
* socket
= SOCKET(UNIT_DEREF(s
->accept_socket
));
1183 if (socket
->max_connections_per_source
> 0) {
1186 /* Make a best-effort attempt at bumping the connection count */
1187 if (socket_acquire_peer(socket
, s
->socket_fd
, &peer
) > 0) {
1188 socket_peer_unref(s
->peer
);
1194 service_set_state(s
, s
->deserialized_state
);
1198 static int service_collect_fds(Service
*s
,
1201 unsigned *n_storage_fds
,
1202 unsigned *n_socket_fds
) {
1204 _cleanup_strv_free_
char **rfd_names
= NULL
;
1205 _cleanup_free_
int *rfds
= NULL
;
1206 unsigned rn_socket_fds
= 0, rn_storage_fds
= 0;
1212 assert(n_socket_fds
);
1214 if (s
->socket_fd
>= 0) {
1216 /* Pass the per-connection socket */
1221 rfds
[0] = s
->socket_fd
;
1223 rfd_names
= strv_new("connection", NULL
);
1233 /* Pass all our configured sockets for singleton services */
1235 HASHMAP_FOREACH_KEY(v
, u
, UNIT(s
)->dependencies
[UNIT_TRIGGERED_BY
], i
) {
1236 _cleanup_free_
int *cfds
= NULL
;
1240 if (u
->type
!= UNIT_SOCKET
)
1245 cn_fds
= socket_collect_fds(sock
, &cfds
);
1253 rfds
= TAKE_PTR(cfds
);
1254 rn_socket_fds
= cn_fds
;
1258 t
= reallocarray(rfds
, rn_socket_fds
+ cn_fds
, sizeof(int));
1262 memcpy(t
+ rn_socket_fds
, cfds
, cn_fds
* sizeof(int));
1265 rn_socket_fds
+= cn_fds
;
1268 r
= strv_extend_n(&rfd_names
, socket_fdname(sock
), cn_fds
);
1274 if (s
->n_fd_store
> 0) {
1280 t
= reallocarray(rfds
, rn_socket_fds
+ s
->n_fd_store
, sizeof(int));
1286 nl
= reallocarray(rfd_names
, rn_socket_fds
+ s
->n_fd_store
+ 1, sizeof(char *));
1291 n_fds
= rn_socket_fds
;
1293 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
1294 rfds
[n_fds
] = fs
->fd
;
1295 rfd_names
[n_fds
] = strdup(strempty(fs
->fdname
));
1296 if (!rfd_names
[n_fds
])
1303 rfd_names
[n_fds
] = NULL
;
1306 *fds
= TAKE_PTR(rfds
);
1307 *fd_names
= TAKE_PTR(rfd_names
);
1308 *n_socket_fds
= rn_socket_fds
;
1309 *n_storage_fds
= rn_storage_fds
;
1314 static bool service_exec_needs_notify_socket(Service
*s
, ExecFlags flags
) {
1317 /* Notifications are accepted depending on the process and
1318 * the access setting of the service:
1319 * process: \ access: NONE MAIN EXEC ALL
1320 * main no yes yes yes
1321 * control no no yes yes
1322 * other (forked) no no no yes */
1324 if (flags
& EXEC_IS_CONTROL
)
1325 /* A control process */
1326 return IN_SET(s
->notify_access
, NOTIFY_EXEC
, NOTIFY_ALL
);
1328 /* We only spawn main processes and control processes, so any
1329 * process that is not a control process is a main process */
1330 return s
->notify_access
!= NOTIFY_NONE
;
1333 static int service_spawn(
1340 ExecParameters exec_params
= {
1346 _cleanup_strv_free_
char **final_env
= NULL
, **our_env
= NULL
, **fd_names
= NULL
;
1347 unsigned n_storage_fds
= 0, n_socket_fds
= 0, n_env
= 0;
1348 _cleanup_free_
int *fds
= NULL
;
1356 r
= unit_prepare_exec(UNIT(s
));
1360 if (flags
& EXEC_IS_CONTROL
) {
1361 /* If this is a control process, mask the permissions/chroot application if this is requested. */
1362 if (s
->permissions_start_only
)
1363 exec_params
.flags
&= ~EXEC_APPLY_SANDBOXING
;
1364 if (s
->root_directory_start_only
)
1365 exec_params
.flags
&= ~EXEC_APPLY_CHROOT
;
1368 if ((flags
& EXEC_PASS_FDS
) ||
1369 s
->exec_context
.std_input
== EXEC_INPUT_SOCKET
||
1370 s
->exec_context
.std_output
== EXEC_OUTPUT_SOCKET
||
1371 s
->exec_context
.std_error
== EXEC_OUTPUT_SOCKET
) {
1373 r
= service_collect_fds(s
, &fds
, &fd_names
, &n_storage_fds
, &n_socket_fds
);
1377 log_unit_debug(UNIT(s
), "Passing %i fds to service", n_storage_fds
+ n_socket_fds
);
1380 r
= service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), timeout
));
1384 our_env
= new0(char*, 9);
1388 if (service_exec_needs_notify_socket(s
, flags
))
1389 if (asprintf(our_env
+ n_env
++, "NOTIFY_SOCKET=%s", UNIT(s
)->manager
->notify_socket
) < 0)
1392 if (s
->main_pid
> 0)
1393 if (asprintf(our_env
+ n_env
++, "MAINPID="PID_FMT
, s
->main_pid
) < 0)
1396 if (MANAGER_IS_USER(UNIT(s
)->manager
))
1397 if (asprintf(our_env
+ n_env
++, "MANAGERPID="PID_FMT
, getpid_cached()) < 0)
1400 if (s
->socket_fd
>= 0) {
1401 union sockaddr_union sa
;
1402 socklen_t salen
= sizeof(sa
);
1404 /* If this is a per-connection service instance, let's set $REMOTE_ADDR and $REMOTE_PORT to something
1405 * useful. Note that we do this only when we are still connected at this point in time, which we might
1406 * very well not be. Hence we ignore all errors when retrieving peer information (as that might result
1407 * in ENOTCONN), and just use whate we can use. */
1409 if (getpeername(s
->socket_fd
, &sa
.sa
, &salen
) >= 0 &&
1410 IN_SET(sa
.sa
.sa_family
, AF_INET
, AF_INET6
, AF_VSOCK
)) {
1412 _cleanup_free_
char *addr
= NULL
;
1416 r
= sockaddr_pretty(&sa
.sa
, salen
, true, false, &addr
);
1420 t
= strappend("REMOTE_ADDR=", addr
);
1423 our_env
[n_env
++] = t
;
1425 r
= sockaddr_port(&sa
.sa
, &port
);
1429 if (asprintf(&t
, "REMOTE_PORT=%u", port
) < 0)
1431 our_env
[n_env
++] = t
;
1435 if (flags
& EXEC_SETENV_RESULT
) {
1436 if (asprintf(our_env
+ n_env
++, "SERVICE_RESULT=%s", service_result_to_string(s
->result
)) < 0)
1439 if (s
->main_exec_status
.pid
> 0 &&
1440 dual_timestamp_is_set(&s
->main_exec_status
.exit_timestamp
)) {
1441 if (asprintf(our_env
+ n_env
++, "EXIT_CODE=%s", sigchld_code_to_string(s
->main_exec_status
.code
)) < 0)
1444 if (s
->main_exec_status
.code
== CLD_EXITED
)
1445 r
= asprintf(our_env
+ n_env
++, "EXIT_STATUS=%i", s
->main_exec_status
.status
);
1447 r
= asprintf(our_env
+ n_env
++, "EXIT_STATUS=%s", signal_to_string(s
->main_exec_status
.status
));
1453 unit_set_exec_params(UNIT(s
), &exec_params
);
1455 final_env
= strv_env_merge(2, exec_params
.environment
, our_env
, NULL
);
1459 /* System services should get a new keyring by default. */
1460 SET_FLAG(exec_params
.flags
, EXEC_NEW_KEYRING
, MANAGER_IS_SYSTEM(UNIT(s
)->manager
));
1462 /* System D-Bus needs nss-systemd disabled, so that we don't deadlock */
1463 SET_FLAG(exec_params
.flags
, EXEC_NSS_BYPASS_BUS
,
1464 MANAGER_IS_SYSTEM(UNIT(s
)->manager
) && unit_has_name(UNIT(s
), SPECIAL_DBUS_SERVICE
));
1466 exec_params
.argv
= c
->argv
;
1467 exec_params
.environment
= final_env
;
1468 exec_params
.fds
= fds
;
1469 exec_params
.fd_names
= fd_names
;
1470 exec_params
.n_storage_fds
= n_storage_fds
;
1471 exec_params
.n_socket_fds
= n_socket_fds
;
1472 exec_params
.watchdog_usec
= s
->watchdog_usec
;
1473 exec_params
.selinux_context_net
= s
->socket_fd_selinux_context_net
;
1474 if (s
->type
== SERVICE_IDLE
)
1475 exec_params
.idle_pipe
= UNIT(s
)->manager
->idle_pipe
;
1476 exec_params
.stdin_fd
= s
->stdin_fd
;
1477 exec_params
.stdout_fd
= s
->stdout_fd
;
1478 exec_params
.stderr_fd
= s
->stderr_fd
;
1480 r
= exec_spawn(UNIT(s
),
1490 r
= unit_watch_pid(UNIT(s
), pid
);
1491 if (r
< 0) /* FIXME: we need to do something here */
1499 static int main_pid_good(Service
*s
) {
1502 /* Returns 0 if the pid is dead, > 0 if it is good, < 0 if we don't know */
1504 /* If we know the pid file, then let's just check if it is
1506 if (s
->main_pid_known
) {
1508 /* If it's an alien child let's check if it is still
1510 if (s
->main_pid_alien
&& s
->main_pid
> 0)
1511 return pid_is_alive(s
->main_pid
);
1513 /* .. otherwise assume we'll get a SIGCHLD for it,
1514 * which we really should wait for to collect exit
1515 * status and code */
1516 return s
->main_pid
> 0;
1519 /* We don't know the pid */
1523 static int control_pid_good(Service
*s
) {
1526 /* Returns 0 if the control PID is dead, > 0 if it is good. We never actually return < 0 here, but in order to
1527 * make this function as similar as possible to main_pid_good() and cgroup_good(), we pretend that < 0 also
1528 * means: we can't figure it out. */
1530 return s
->control_pid
> 0;
1533 static int cgroup_good(Service
*s
) {
1538 /* Returns 0 if the cgroup is empty or doesn't exist, > 0 if it is exists and is populated, < 0 if we can't
1541 if (!UNIT(s
)->cgroup_path
)
1544 r
= cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER
, UNIT(s
)->cgroup_path
);
1551 static bool service_shall_restart(Service
*s
) {
1554 /* Don't restart after manual stops */
1555 if (s
->forbid_restart
)
1558 /* Never restart if this is configured as special exception */
1559 if (exit_status_set_test(&s
->restart_prevent_status
, s
->main_exec_status
.code
, s
->main_exec_status
.status
))
1562 /* Restart if the exit code/status are configured as restart triggers */
1563 if (exit_status_set_test(&s
->restart_force_status
, s
->main_exec_status
.code
, s
->main_exec_status
.status
))
1566 switch (s
->restart
) {
1568 case SERVICE_RESTART_NO
:
1571 case SERVICE_RESTART_ALWAYS
:
1574 case SERVICE_RESTART_ON_SUCCESS
:
1575 return s
->result
== SERVICE_SUCCESS
;
1577 case SERVICE_RESTART_ON_FAILURE
:
1578 return s
->result
!= SERVICE_SUCCESS
;
1580 case SERVICE_RESTART_ON_ABNORMAL
:
1581 return !IN_SET(s
->result
, SERVICE_SUCCESS
, SERVICE_FAILURE_EXIT_CODE
);
1583 case SERVICE_RESTART_ON_WATCHDOG
:
1584 return s
->result
== SERVICE_FAILURE_WATCHDOG
;
1586 case SERVICE_RESTART_ON_ABORT
:
1587 return IN_SET(s
->result
, SERVICE_FAILURE_SIGNAL
, SERVICE_FAILURE_CORE_DUMP
);
1590 assert_not_reached("unknown restart setting");
1594 static bool service_will_restart(Unit
*u
) {
1595 Service
*s
= SERVICE(u
);
1599 if (s
->will_auto_restart
)
1601 if (s
->state
== SERVICE_AUTO_RESTART
)
1605 if (UNIT(s
)->job
->type
== JOB_START
)
1610 static void service_enter_dead(Service
*s
, ServiceResult f
, bool allow_restart
) {
1615 /* If there's a stop job queued before we enter the DEAD state, we shouldn't act on Restart=, in order to not
1616 * undo what has already been enqueued. */
1617 if (unit_stop_pending(UNIT(s
)))
1618 allow_restart
= false;
1620 if (s
->result
== SERVICE_SUCCESS
)
1623 if (s
->result
!= SERVICE_SUCCESS
)
1624 log_unit_warning(UNIT(s
), "Failed with result '%s'.", service_result_to_string(s
->result
));
1626 if (allow_restart
&& service_shall_restart(s
))
1627 s
->will_auto_restart
= true;
1629 /* Make sure service_release_resources() doesn't destroy our FD store, while we are changing through
1630 * SERVICE_FAILED/SERVICE_DEAD before entering into SERVICE_AUTO_RESTART. */
1631 s
->n_keep_fd_store
++;
1633 service_set_state(s
, s
->result
!= SERVICE_SUCCESS
? SERVICE_FAILED
: SERVICE_DEAD
);
1635 if (s
->will_auto_restart
) {
1636 s
->will_auto_restart
= false;
1638 r
= service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), s
->restart_usec
));
1640 s
->n_keep_fd_store
--;
1644 service_set_state(s
, SERVICE_AUTO_RESTART
);
1646 /* If we shan't restart, then flush out the restart counter. But don't do that immediately, so that the
1647 * user can still introspect the counter. Do so on the next start. */
1648 s
->flush_n_restarts
= true;
1650 /* The new state is in effect, let's decrease the fd store ref counter again. Let's also readd us to the GC
1651 * queue, so that the fd store is possibly gc'ed again */
1652 s
->n_keep_fd_store
--;
1653 unit_add_to_gc_queue(UNIT(s
));
1655 /* The next restart might not be a manual stop, hence reset the flag indicating manual stops */
1656 s
->forbid_restart
= false;
1658 /* We want fresh tmpdirs in case service is started again immediately */
1659 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
, true);
1661 if (s
->exec_context
.runtime_directory_preserve_mode
== EXEC_PRESERVE_NO
||
1662 (s
->exec_context
.runtime_directory_preserve_mode
== EXEC_PRESERVE_RESTART
&& !service_will_restart(UNIT(s
))))
1663 /* Also, remove the runtime directory */
1664 exec_context_destroy_runtime_directory(&s
->exec_context
, UNIT(s
)->manager
->prefix
[EXEC_DIRECTORY_RUNTIME
]);
1666 /* Get rid of the IPC bits of the user */
1667 unit_unref_uid_gid(UNIT(s
), true);
1669 /* Release the user, and destroy it if we are the only remaining owner */
1670 dynamic_creds_destroy(&s
->dynamic_creds
);
1672 /* Try to delete the pid file. At this point it will be
1673 * out-of-date, and some software might be confused by it, so
1674 * let's remove it. */
1676 (void) unlink(s
->pid_file
);
1681 log_unit_warning_errno(UNIT(s
), r
, "Failed to run install restart timer: %m");
1682 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1685 static void service_enter_stop_post(Service
*s
, ServiceResult f
) {
1689 if (s
->result
== SERVICE_SUCCESS
)
1692 service_unwatch_control_pid(s
);
1693 unit_watch_all_pids(UNIT(s
));
1695 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP_POST
];
1696 if (s
->control_command
) {
1697 s
->control_command_id
= SERVICE_EXEC_STOP_POST
;
1699 r
= service_spawn(s
,
1701 s
->timeout_stop_usec
,
1702 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_APPLY_TTY_STDIN
|EXEC_IS_CONTROL
|EXEC_SETENV_RESULT
,
1707 service_set_state(s
, SERVICE_STOP_POST
);
1709 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_SUCCESS
);
1714 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'stop-post' task: %m");
1715 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1718 static int state_to_kill_operation(ServiceState state
) {
1721 case SERVICE_STOP_SIGABRT
:
1724 case SERVICE_STOP_SIGTERM
:
1725 case SERVICE_FINAL_SIGTERM
:
1726 return KILL_TERMINATE
;
1728 case SERVICE_STOP_SIGKILL
:
1729 case SERVICE_FINAL_SIGKILL
:
1733 return _KILL_OPERATION_INVALID
;
1737 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
) {
1742 if (s
->result
== SERVICE_SUCCESS
)
1745 unit_watch_all_pids(UNIT(s
));
1747 r
= unit_kill_context(
1750 state_to_kill_operation(state
),
1758 r
= service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), s
->timeout_stop_usec
));
1762 service_set_state(s
, state
);
1763 } else if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
) && s
->kill_context
.send_sigkill
)
1764 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_SUCCESS
);
1765 else if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
))
1766 service_enter_stop_post(s
, SERVICE_SUCCESS
);
1767 else if (state
== SERVICE_FINAL_SIGTERM
&& s
->kill_context
.send_sigkill
)
1768 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_SUCCESS
);
1770 service_enter_dead(s
, SERVICE_SUCCESS
, true);
1775 log_unit_warning_errno(UNIT(s
), r
, "Failed to kill processes: %m");
1777 if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
))
1778 service_enter_stop_post(s
, SERVICE_FAILURE_RESOURCES
);
1780 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1783 static void service_enter_stop_by_notify(Service
*s
) {
1786 unit_watch_all_pids(UNIT(s
));
1788 service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), s
->timeout_stop_usec
));
1790 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1791 service_set_state(s
, SERVICE_STOP_SIGTERM
);
1794 static void service_enter_stop(Service
*s
, ServiceResult f
) {
1799 if (s
->result
== SERVICE_SUCCESS
)
1802 service_unwatch_control_pid(s
);
1803 unit_watch_all_pids(UNIT(s
));
1805 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP
];
1806 if (s
->control_command
) {
1807 s
->control_command_id
= SERVICE_EXEC_STOP
;
1809 r
= service_spawn(s
,
1811 s
->timeout_stop_usec
,
1812 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_IS_CONTROL
|EXEC_SETENV_RESULT
,
1817 service_set_state(s
, SERVICE_STOP
);
1819 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
1824 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'stop' task: %m");
1825 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1828 static bool service_good(Service
*s
) {
1832 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name_good
)
1835 main_pid_ok
= main_pid_good(s
);
1836 if (main_pid_ok
> 0) /* It's alive */
1838 if (main_pid_ok
== 0) /* It's dead */
1841 /* OK, we don't know anything about the main PID, maybe
1842 * because there is none. Let's check the control group
1845 return cgroup_good(s
) != 0;
1848 static void service_enter_running(Service
*s
, ServiceResult f
) {
1851 if (s
->result
== SERVICE_SUCCESS
)
1854 service_unwatch_control_pid(s
);
1856 if (service_good(s
)) {
1858 /* If there are any queued up sd_notify()
1859 * notifications, process them now */
1860 if (s
->notify_state
== NOTIFY_RELOADING
)
1861 service_enter_reload_by_notify(s
);
1862 else if (s
->notify_state
== NOTIFY_STOPPING
)
1863 service_enter_stop_by_notify(s
);
1865 service_set_state(s
, SERVICE_RUNNING
);
1866 service_arm_timer(s
, usec_add(UNIT(s
)->active_enter_timestamp
.monotonic
, s
->runtime_max_usec
));
1869 } else if (f
!= SERVICE_SUCCESS
)
1870 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
1871 else if (s
->remain_after_exit
)
1872 service_set_state(s
, SERVICE_EXITED
);
1874 service_enter_stop(s
, SERVICE_SUCCESS
);
1877 static void service_enter_start_post(Service
*s
) {
1881 service_unwatch_control_pid(s
);
1882 service_reset_watchdog(s
);
1884 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_POST
];
1885 if (s
->control_command
) {
1886 s
->control_command_id
= SERVICE_EXEC_START_POST
;
1888 r
= service_spawn(s
,
1890 s
->timeout_start_usec
,
1891 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_IS_CONTROL
,
1896 service_set_state(s
, SERVICE_START_POST
);
1898 service_enter_running(s
, SERVICE_SUCCESS
);
1903 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start-post' task: %m");
1904 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1907 static void service_kill_control_process(Service
*s
) {
1912 if (s
->control_pid
<= 0)
1915 r
= kill_and_sigcont(s
->control_pid
, SIGKILL
);
1917 _cleanup_free_
char *comm
= NULL
;
1919 (void) get_process_comm(s
->control_pid
, &comm
);
1921 log_unit_debug_errno(UNIT(s
), r
, "Failed to kill control process " PID_FMT
" (%s), ignoring: %m",
1922 s
->control_pid
, strna(comm
));
1926 static void service_enter_start(Service
*s
) {
1934 service_unwatch_control_pid(s
);
1935 service_unwatch_main_pid(s
);
1937 unit_warn_leftover_processes(UNIT(s
));
1939 if (s
->type
== SERVICE_FORKING
) {
1940 s
->control_command_id
= SERVICE_EXEC_START
;
1941 c
= s
->control_command
= s
->exec_command
[SERVICE_EXEC_START
];
1943 s
->main_command
= NULL
;
1945 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
1946 s
->control_command
= NULL
;
1948 c
= s
->main_command
= s
->exec_command
[SERVICE_EXEC_START
];
1952 if (s
->type
!= SERVICE_ONESHOT
) {
1953 /* There's no command line configured for the main command? Hmm, that is strange. This can only
1954 * happen if the configuration changes at runtime. In this case, let's enter a failure
1956 log_unit_error(UNIT(s
), "There's no 'start' task anymore we could start: %m");
1961 service_enter_start_post(s
);
1965 if (IN_SET(s
->type
, SERVICE_SIMPLE
, SERVICE_IDLE
))
1966 /* For simple + idle this is the main process. We don't apply any timeout here, but
1967 * service_enter_running() will later apply the .runtime_max_usec timeout. */
1968 timeout
= USEC_INFINITY
;
1970 timeout
= s
->timeout_start_usec
;
1972 r
= service_spawn(s
,
1975 EXEC_PASS_FDS
|EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_APPLY_TTY_STDIN
|EXEC_SET_WATCHDOG
,
1980 if (IN_SET(s
->type
, SERVICE_SIMPLE
, SERVICE_IDLE
)) {
1981 /* For simple services we immediately start
1982 * the START_POST binaries. */
1984 service_set_main_pid(s
, pid
);
1985 service_enter_start_post(s
);
1987 } else if (s
->type
== SERVICE_FORKING
) {
1989 /* For forking services we wait until the start
1990 * process exited. */
1992 s
->control_pid
= pid
;
1993 service_set_state(s
, SERVICE_START
);
1995 } else if (IN_SET(s
->type
, SERVICE_ONESHOT
, SERVICE_DBUS
, SERVICE_NOTIFY
)) {
1997 /* For oneshot services we wait until the start
1998 * process exited, too, but it is our main process. */
2000 /* For D-Bus services we know the main pid right away,
2001 * but wait for the bus name to appear on the
2002 * bus. Notify services are similar. */
2004 service_set_main_pid(s
, pid
);
2005 service_set_state(s
, SERVICE_START
);
2007 assert_not_reached("Unknown service type");
2012 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start' task: %m");
2013 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2016 static void service_enter_start_pre(Service
*s
) {
2021 service_unwatch_control_pid(s
);
2023 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_PRE
];
2024 if (s
->control_command
) {
2026 unit_warn_leftover_processes(UNIT(s
));
2028 s
->control_command_id
= SERVICE_EXEC_START_PRE
;
2030 r
= service_spawn(s
,
2032 s
->timeout_start_usec
,
2033 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_IS_CONTROL
|EXEC_APPLY_TTY_STDIN
,
2038 service_set_state(s
, SERVICE_START_PRE
);
2040 service_enter_start(s
);
2045 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start-pre' task: %m");
2046 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
2049 static void service_enter_restart(Service
*s
) {
2050 _cleanup_(sd_bus_error_free
) sd_bus_error error
= SD_BUS_ERROR_NULL
;
2055 if (UNIT(s
)->job
&& UNIT(s
)->job
->type
== JOB_STOP
) {
2056 /* Don't restart things if we are going down anyway */
2057 log_unit_info(UNIT(s
), "Stop job pending for unit, delaying automatic restart.");
2059 r
= service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), s
->restart_usec
));
2066 /* Any units that are bound to this service must also be
2067 * restarted. We use JOB_RESTART (instead of the more obvious
2068 * JOB_START) here so that those dependency jobs will be added
2070 r
= manager_add_job(UNIT(s
)->manager
, JOB_RESTART
, UNIT(s
), JOB_FAIL
, &error
, NULL
);
2074 /* Count the jobs we enqueue for restarting. This counter is maintained as long as the unit isn't fully
2075 * stopped, i.e. as long as it remains up or remains in auto-start states. The use can reset the counter
2076 * explicitly however via the usual "systemctl reset-failure" logic. */
2078 s
->flush_n_restarts
= false;
2080 log_struct(LOG_INFO
,
2081 "MESSAGE_ID=" SD_MESSAGE_UNIT_RESTART_SCHEDULED_STR
,
2082 LOG_UNIT_ID(UNIT(s
)),
2083 LOG_UNIT_INVOCATION_ID(UNIT(s
)),
2084 LOG_UNIT_MESSAGE(UNIT(s
), "Scheduled restart job, restart counter is at %u.", s
->n_restarts
),
2085 "N_RESTARTS=%u", s
->n_restarts
,
2088 /* Notify clients about changed restart counter */
2089 unit_add_to_dbus_queue(UNIT(s
));
2091 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
2092 * it will be canceled as part of the service_stop() call that
2093 * is executed as part of JOB_RESTART. */
2098 log_unit_warning(UNIT(s
), "Failed to schedule restart job: %s", bus_error_message(&error
, -r
));
2099 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
2102 static void service_enter_reload_by_notify(Service
*s
) {
2103 _cleanup_(sd_bus_error_free
) sd_bus_error error
= SD_BUS_ERROR_NULL
;
2108 service_arm_timer(s
, usec_add(now(CLOCK_MONOTONIC
), s
->timeout_start_usec
));
2109 service_set_state(s
, SERVICE_RELOAD
);
2111 /* service_enter_reload_by_notify is never called during a reload, thus no loops are possible. */
2112 r
= manager_propagate_reload(UNIT(s
)->manager
, UNIT(s
), JOB_FAIL
, &error
);
2114 log_unit_warning(UNIT(s
), "Failed to schedule propagation of reload: %s", bus_error_message(&error
, -r
));
2117 static void service_enter_reload(Service
*s
) {
2122 service_unwatch_control_pid(s
);
2123 s
->reload_result
= SERVICE_SUCCESS
;
2125 s
->control_command
= s
->exec_command
[SERVICE_EXEC_RELOAD
];
2126 if (s
->control_command
) {
2127 s
->control_command_id
= SERVICE_EXEC_RELOAD
;
2129 r
= service_spawn(s
,
2131 s
->timeout_start_usec
,
2132 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_IS_CONTROL
,
2137 service_set_state(s
, SERVICE_RELOAD
);
2139 service_enter_running(s
, SERVICE_SUCCESS
);
2144 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'reload' task: %m");
2145 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
2146 service_enter_running(s
, SERVICE_SUCCESS
);
2149 static void service_run_next_control(Service
*s
) {
2154 assert(s
->control_command
);
2155 assert(s
->control_command
->command_next
);
2157 assert(s
->control_command_id
!= SERVICE_EXEC_START
);
2159 s
->control_command
= s
->control_command
->command_next
;
2160 service_unwatch_control_pid(s
);
2162 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
2163 timeout
= s
->timeout_start_usec
;
2165 timeout
= s
->timeout_stop_usec
;
2167 r
= service_spawn(s
,
2170 EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_IS_CONTROL
|
2171 (IN_SET(s
->control_command_id
, SERVICE_EXEC_START_PRE
, SERVICE_EXEC_STOP_POST
) ? EXEC_APPLY_TTY_STDIN
: 0)|
2172 (IN_SET(s
->control_command_id
, SERVICE_EXEC_STOP
, SERVICE_EXEC_STOP_POST
) ? EXEC_SETENV_RESULT
: 0),
2180 log_unit_warning_errno(UNIT(s
), r
, "Failed to run next control task: %m");
2182 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START_POST
, SERVICE_STOP
))
2183 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2184 else if (s
->state
== SERVICE_STOP_POST
)
2185 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
2186 else if (s
->state
== SERVICE_RELOAD
) {
2187 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
2188 service_enter_running(s
, SERVICE_SUCCESS
);
2190 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2193 static void service_run_next_main(Service
*s
) {
2198 assert(s
->main_command
);
2199 assert(s
->main_command
->command_next
);
2200 assert(s
->type
== SERVICE_ONESHOT
);
2202 s
->main_command
= s
->main_command
->command_next
;
2203 service_unwatch_main_pid(s
);
2205 r
= service_spawn(s
,
2207 s
->timeout_start_usec
,
2208 EXEC_PASS_FDS
|EXEC_APPLY_SANDBOXING
|EXEC_APPLY_CHROOT
|EXEC_APPLY_TTY_STDIN
|EXEC_SET_WATCHDOG
,
2213 service_set_main_pid(s
, pid
);
2218 log_unit_warning_errno(UNIT(s
), r
, "Failed to run next main task: %m");
2219 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2222 static int service_start(Unit
*u
) {
2223 Service
*s
= SERVICE(u
);
2228 /* We cannot fulfill this request right now, try again later
2230 if (IN_SET(s
->state
,
2231 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
2232 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))
2235 /* Already on it! */
2236 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
))
2239 /* A service that will be restarted must be stopped first to
2240 * trigger BindsTo and/or OnFailure dependencies. If a user
2241 * does not want to wait for the holdoff time to elapse, the
2242 * service should be manually restarted, not started. We
2243 * simply return EAGAIN here, so that any start jobs stay
2244 * queued, and assume that the auto restart timer will
2245 * eventually trigger the restart. */
2246 if (s
->state
== SERVICE_AUTO_RESTART
)
2249 assert(IN_SET(s
->state
, SERVICE_DEAD
, SERVICE_FAILED
));
2251 /* Make sure we don't enter a busy loop of some kind. */
2252 r
= unit_start_limit_test(u
);
2254 service_enter_dead(s
, SERVICE_FAILURE_START_LIMIT_HIT
, false);
2258 r
= unit_acquire_invocation_id(u
);
2262 s
->result
= SERVICE_SUCCESS
;
2263 s
->reload_result
= SERVICE_SUCCESS
;
2264 s
->main_pid_known
= false;
2265 s
->main_pid_alien
= false;
2266 s
->forbid_restart
= false;
2268 u
->reset_accounting
= true;
2270 s
->status_text
= mfree(s
->status_text
);
2271 s
->status_errno
= 0;
2273 s
->notify_state
= NOTIFY_UNKNOWN
;
2275 s
->watchdog_override_enable
= false;
2276 s
->watchdog_override_usec
= 0;
2278 /* This is not an automatic restart? Flush the restart counter then */
2279 if (s
->flush_n_restarts
) {
2281 s
->flush_n_restarts
= false;
2284 service_enter_start_pre(s
);
2288 static int service_stop(Unit
*u
) {
2289 Service
*s
= SERVICE(u
);
2293 /* Don't create restart jobs from manual stops. */
2294 s
->forbid_restart
= true;
2297 if (IN_SET(s
->state
,
2298 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
2299 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))
2302 /* A restart will be scheduled or is in progress. */
2303 if (s
->state
== SERVICE_AUTO_RESTART
) {
2304 service_set_state(s
, SERVICE_DEAD
);
2308 /* If there's already something running we go directly into
2310 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RELOAD
)) {
2311 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
2315 assert(IN_SET(s
->state
, SERVICE_RUNNING
, SERVICE_EXITED
));
2317 service_enter_stop(s
, SERVICE_SUCCESS
);
2321 static int service_reload(Unit
*u
) {
2322 Service
*s
= SERVICE(u
);
2326 assert(IN_SET(s
->state
, SERVICE_RUNNING
, SERVICE_EXITED
));
2328 service_enter_reload(s
);
2332 _pure_
static bool service_can_reload(Unit
*u
) {
2333 Service
*s
= SERVICE(u
);
2337 return !!s
->exec_command
[SERVICE_EXEC_RELOAD
];
2340 static unsigned service_exec_command_index(Unit
*u
, ServiceExecCommand id
, ExecCommand
*current
) {
2341 Service
*s
= SERVICE(u
);
2343 ExecCommand
*first
, *c
;
2347 first
= s
->exec_command
[id
];
2349 /* Figure out where we are in the list by walking back to the beginning */
2350 for (c
= current
; c
!= first
; c
= c
->command_prev
)
2356 static int service_serialize_exec_command(Unit
*u
, FILE *f
, ExecCommand
*command
) {
2357 Service
*s
= SERVICE(u
);
2358 ServiceExecCommand id
;
2362 _cleanup_free_
char *args
= NULL
, *p
= NULL
;
2363 size_t allocated
= 0, length
= 0;
2371 if (command
== s
->control_command
) {
2373 id
= s
->control_command_id
;
2376 id
= SERVICE_EXEC_START
;
2379 idx
= service_exec_command_index(u
, id
, command
);
2381 STRV_FOREACH(arg
, command
->argv
) {
2383 _cleanup_free_
char *e
= NULL
;
2385 e
= xescape(*arg
, WHITESPACE
);
2390 if (!GREEDY_REALLOC(args
, allocated
, length
+ 1 + n
+ 1))
2394 args
[length
++] = ' ';
2396 memcpy(args
+ length
, e
, n
);
2400 if (!GREEDY_REALLOC(args
, allocated
, length
+ 1))
2404 p
= xescape(command
->path
, WHITESPACE
);
2408 fprintf(f
, "%s-command=%s %u %s %s\n", type
, service_exec_command_to_string(id
), idx
, p
, args
);
2413 static int service_serialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
2414 Service
*s
= SERVICE(u
);
2422 unit_serialize_item(u
, f
, "state", service_state_to_string(s
->state
));
2423 unit_serialize_item(u
, f
, "result", service_result_to_string(s
->result
));
2424 unit_serialize_item(u
, f
, "reload-result", service_result_to_string(s
->reload_result
));
2426 if (s
->control_pid
> 0)
2427 unit_serialize_item_format(u
, f
, "control-pid", PID_FMT
, s
->control_pid
);
2429 if (s
->main_pid_known
&& s
->main_pid
> 0)
2430 unit_serialize_item_format(u
, f
, "main-pid", PID_FMT
, s
->main_pid
);
2432 unit_serialize_item(u
, f
, "main-pid-known", yes_no(s
->main_pid_known
));
2433 unit_serialize_item(u
, f
, "bus-name-good", yes_no(s
->bus_name_good
));
2434 unit_serialize_item(u
, f
, "bus-name-owner", s
->bus_name_owner
);
2436 unit_serialize_item_format(u
, f
, "n-restarts", "%u", s
->n_restarts
);
2437 unit_serialize_item(u
, f
, "flush-n-restarts", yes_no(s
->flush_n_restarts
));
2439 r
= unit_serialize_item_escaped(u
, f
, "status-text", s
->status_text
);
2443 service_serialize_exec_command(u
, f
, s
->control_command
);
2444 service_serialize_exec_command(u
, f
, s
->main_command
);
2446 r
= unit_serialize_item_fd(u
, f
, fds
, "stdin-fd", s
->stdin_fd
);
2449 r
= unit_serialize_item_fd(u
, f
, fds
, "stdout-fd", s
->stdout_fd
);
2452 r
= unit_serialize_item_fd(u
, f
, fds
, "stderr-fd", s
->stderr_fd
);
2456 if (UNIT_ISSET(s
->accept_socket
)) {
2457 r
= unit_serialize_item(u
, f
, "accept-socket", UNIT_DEREF(s
->accept_socket
)->id
);
2462 r
= unit_serialize_item_fd(u
, f
, fds
, "socket-fd", s
->socket_fd
);
2466 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
2467 _cleanup_free_
char *c
= NULL
;
2470 copy
= fdset_put_dup(fds
, fs
->fd
);
2474 c
= cescape(fs
->fdname
);
2476 unit_serialize_item_format(u
, f
, "fd-store-fd", "%i %s", copy
, strempty(c
));
2479 if (s
->main_exec_status
.pid
> 0) {
2480 unit_serialize_item_format(u
, f
, "main-exec-status-pid", PID_FMT
, s
->main_exec_status
.pid
);
2481 dual_timestamp_serialize(f
, "main-exec-status-start", &s
->main_exec_status
.start_timestamp
);
2482 dual_timestamp_serialize(f
, "main-exec-status-exit", &s
->main_exec_status
.exit_timestamp
);
2484 if (dual_timestamp_is_set(&s
->main_exec_status
.exit_timestamp
)) {
2485 unit_serialize_item_format(u
, f
, "main-exec-status-code", "%i", s
->main_exec_status
.code
);
2486 unit_serialize_item_format(u
, f
, "main-exec-status-status", "%i", s
->main_exec_status
.status
);
2490 dual_timestamp_serialize(f
, "watchdog-timestamp", &s
->watchdog_timestamp
);
2492 unit_serialize_item(u
, f
, "forbid-restart", yes_no(s
->forbid_restart
));
2494 if (s
->watchdog_override_enable
)
2495 unit_serialize_item_format(u
, f
, "watchdog-override-usec", USEC_FMT
, s
->watchdog_override_usec
);
2500 static int service_deserialize_exec_command(Unit
*u
, const char *key
, const char *value
) {
2501 Service
*s
= SERVICE(u
);
2503 unsigned idx
= 0, i
;
2504 bool control
, found
= false;
2505 ServiceExecCommand id
= _SERVICE_EXEC_COMMAND_INVALID
;
2506 ExecCommand
*command
= NULL
;
2507 _cleanup_free_
char *path
= NULL
;
2508 _cleanup_strv_free_
char **argv
= NULL
;
2510 enum ExecCommandState
{
2511 STATE_EXEC_COMMAND_TYPE
,
2512 STATE_EXEC_COMMAND_INDEX
,
2513 STATE_EXEC_COMMAND_PATH
,
2514 STATE_EXEC_COMMAND_ARGS
,
2515 _STATE_EXEC_COMMAND_MAX
,
2516 _STATE_EXEC_COMMAND_INVALID
= -1,
2523 control
= streq(key
, "control-command");
2525 state
= STATE_EXEC_COMMAND_TYPE
;
2528 _cleanup_free_
char *arg
= NULL
;
2530 r
= extract_first_word(&value
, &arg
, NULL
, EXTRACT_CUNESCAPE
);
2537 case STATE_EXEC_COMMAND_TYPE
:
2538 id
= service_exec_command_from_string(arg
);
2542 state
= STATE_EXEC_COMMAND_INDEX
;
2544 case STATE_EXEC_COMMAND_INDEX
:
2545 r
= safe_atou(arg
, &idx
);
2549 state
= STATE_EXEC_COMMAND_PATH
;
2551 case STATE_EXEC_COMMAND_PATH
:
2552 path
= TAKE_PTR(arg
);
2553 state
= STATE_EXEC_COMMAND_ARGS
;
2555 if (!path_is_absolute(path
))
2558 case STATE_EXEC_COMMAND_ARGS
:
2559 r
= strv_extend(&argv
, arg
);
2564 assert_not_reached("Unknown error at deserialization of exec command");
2569 if (state
!= STATE_EXEC_COMMAND_ARGS
)
2572 /* Let's check whether exec command on given offset matches data that we just deserialized */
2573 for (command
= s
->exec_command
[id
], i
= 0; command
; command
= command
->command_next
, i
++) {
2577 found
= strv_equal(argv
, command
->argv
) && streq(command
->path
, path
);
2582 /* Command at the index we serialized is different, let's look for command that exactly
2583 * matches but is on different index. If there is no such command we will not resume execution. */
2584 for (command
= s
->exec_command
[id
]; command
; command
= command
->command_next
)
2585 if (strv_equal(command
->argv
, argv
) && streq(command
->path
, path
))
2589 if (command
&& control
)
2590 s
->control_command
= command
;
2592 s
->main_command
= command
;
2594 log_unit_warning(u
, "Current command vanished from the unit file, execution of the command list won't be resumed.");
2599 static int service_deserialize_item(Unit
*u
, const char *key
, const char *value
, FDSet
*fds
) {
2600 Service
*s
= SERVICE(u
);
2608 if (streq(key
, "state")) {
2611 state
= service_state_from_string(value
);
2613 log_unit_debug(u
, "Failed to parse state value: %s", value
);
2615 s
->deserialized_state
= state
;
2616 } else if (streq(key
, "result")) {
2619 f
= service_result_from_string(value
);
2621 log_unit_debug(u
, "Failed to parse result value: %s", value
);
2622 else if (f
!= SERVICE_SUCCESS
)
2625 } else if (streq(key
, "reload-result")) {
2628 f
= service_result_from_string(value
);
2630 log_unit_debug(u
, "Failed to parse reload result value: %s", value
);
2631 else if (f
!= SERVICE_SUCCESS
)
2632 s
->reload_result
= f
;
2634 } else if (streq(key
, "control-pid")) {
2637 if (parse_pid(value
, &pid
) < 0)
2638 log_unit_debug(u
, "Failed to parse control-pid value: %s", value
);
2640 s
->control_pid
= pid
;
2641 } else if (streq(key
, "main-pid")) {
2644 if (parse_pid(value
, &pid
) < 0)
2645 log_unit_debug(u
, "Failed to parse main-pid value: %s", value
);
2647 (void) service_set_main_pid(s
, pid
);
2648 } else if (streq(key
, "main-pid-known")) {
2651 b
= parse_boolean(value
);
2653 log_unit_debug(u
, "Failed to parse main-pid-known value: %s", value
);
2655 s
->main_pid_known
= b
;
2656 } else if (streq(key
, "bus-name-good")) {
2659 b
= parse_boolean(value
);
2661 log_unit_debug(u
, "Failed to parse bus-name-good value: %s", value
);
2663 s
->bus_name_good
= b
;
2664 } else if (streq(key
, "bus-name-owner")) {
2665 r
= free_and_strdup(&s
->bus_name_owner
, value
);
2667 log_unit_error_errno(u
, r
, "Unable to deserialize current bus owner %s: %m", value
);
2668 } else if (streq(key
, "status-text")) {
2671 r
= cunescape(value
, 0, &t
);
2673 log_unit_debug_errno(u
, r
, "Failed to unescape status text: %s", value
);
2675 free(s
->status_text
);
2679 } else if (streq(key
, "accept-socket")) {
2682 r
= manager_load_unit(u
->manager
, value
, NULL
, NULL
, &socket
);
2684 log_unit_debug_errno(u
, r
, "Failed to load accept-socket unit: %s", value
);
2686 unit_ref_set(&s
->accept_socket
, u
, socket
);
2687 SOCKET(socket
)->n_connections
++;
2690 } else if (streq(key
, "socket-fd")) {
2693 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2694 log_unit_debug(u
, "Failed to parse socket-fd value: %s", value
);
2696 asynchronous_close(s
->socket_fd
);
2697 s
->socket_fd
= fdset_remove(fds
, fd
);
2699 } else if (streq(key
, "fd-store-fd")) {
2704 pf
= strcspn(value
, WHITESPACE
);
2705 fdv
= strndupa(value
, pf
);
2707 if (safe_atoi(fdv
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2708 log_unit_debug(u
, "Failed to parse fd-store-fd value: %s", value
);
2710 _cleanup_free_
char *t
= NULL
;
2714 fdn
+= strspn(fdn
, WHITESPACE
);
2715 (void) cunescape(fdn
, 0, &t
);
2717 r
= service_add_fd_store(s
, fd
, t
);
2719 log_unit_error_errno(u
, r
, "Failed to add fd to store: %m");
2721 fdset_remove(fds
, fd
);
2724 } else if (streq(key
, "main-exec-status-pid")) {
2727 if (parse_pid(value
, &pid
) < 0)
2728 log_unit_debug(u
, "Failed to parse main-exec-status-pid value: %s", value
);
2730 s
->main_exec_status
.pid
= pid
;
2731 } else if (streq(key
, "main-exec-status-code")) {
2734 if (safe_atoi(value
, &i
) < 0)
2735 log_unit_debug(u
, "Failed to parse main-exec-status-code value: %s", value
);
2737 s
->main_exec_status
.code
= i
;
2738 } else if (streq(key
, "main-exec-status-status")) {
2741 if (safe_atoi(value
, &i
) < 0)
2742 log_unit_debug(u
, "Failed to parse main-exec-status-status value: %s", value
);
2744 s
->main_exec_status
.status
= i
;
2745 } else if (streq(key
, "main-exec-status-start"))
2746 dual_timestamp_deserialize(value
, &s
->main_exec_status
.start_timestamp
);
2747 else if (streq(key
, "main-exec-status-exit"))
2748 dual_timestamp_deserialize(value
, &s
->main_exec_status
.exit_timestamp
);
2749 else if (streq(key
, "watchdog-timestamp"))
2750 dual_timestamp_deserialize(value
, &s
->watchdog_timestamp
);
2751 else if (streq(key
, "forbid-restart")) {
2754 b
= parse_boolean(value
);
2756 log_unit_debug(u
, "Failed to parse forbid-restart value: %s", value
);
2758 s
->forbid_restart
= b
;
2759 } else if (streq(key
, "stdin-fd")) {
2762 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2763 log_unit_debug(u
, "Failed to parse stdin-fd value: %s", value
);
2765 asynchronous_close(s
->stdin_fd
);
2766 s
->stdin_fd
= fdset_remove(fds
, fd
);
2767 s
->exec_context
.stdio_as_fds
= true;
2769 } else if (streq(key
, "stdout-fd")) {
2772 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2773 log_unit_debug(u
, "Failed to parse stdout-fd value: %s", value
);
2775 asynchronous_close(s
->stdout_fd
);
2776 s
->stdout_fd
= fdset_remove(fds
, fd
);
2777 s
->exec_context
.stdio_as_fds
= true;
2779 } else if (streq(key
, "stderr-fd")) {
2782 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2783 log_unit_debug(u
, "Failed to parse stderr-fd value: %s", value
);
2785 asynchronous_close(s
->stderr_fd
);
2786 s
->stderr_fd
= fdset_remove(fds
, fd
);
2787 s
->exec_context
.stdio_as_fds
= true;
2789 } else if (streq(key
, "watchdog-override-usec")) {
2790 usec_t watchdog_override_usec
;
2791 if (timestamp_deserialize(value
, &watchdog_override_usec
) < 0)
2792 log_unit_debug(u
, "Failed to parse watchdog_override_usec value: %s", value
);
2794 s
->watchdog_override_enable
= true;
2795 s
->watchdog_override_usec
= watchdog_override_usec
;
2797 } else if (STR_IN_SET(key
, "main-command", "control-command")) {
2798 r
= service_deserialize_exec_command(u
, key
, value
);
2800 log_unit_debug_errno(u
, r
, "Failed to parse serialized command \"%s\": %m", value
);
2802 } else if (streq(key
, "n-restarts")) {
2803 r
= safe_atou(value
, &s
->n_restarts
);
2805 log_unit_debug_errno(u
, r
, "Failed to parse serialized restart counter '%s': %m", value
);
2807 } else if (streq(key
, "flush-n-restarts")) {
2808 r
= parse_boolean(value
);
2810 log_unit_debug_errno(u
, r
, "Failed to parse serialized flush restart counter setting '%s': %m", value
);
2812 s
->flush_n_restarts
= r
;
2814 log_unit_debug(u
, "Unknown serialization key: %s", key
);
2819 _pure_
static UnitActiveState
service_active_state(Unit
*u
) {
2820 const UnitActiveState
*table
;
2824 table
= SERVICE(u
)->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
2826 return table
[SERVICE(u
)->state
];
2829 static const char *service_sub_state_to_string(Unit
*u
) {
2832 return service_state_to_string(SERVICE(u
)->state
);
2835 static bool service_may_gc(Unit
*u
) {
2836 Service
*s
= SERVICE(u
);
2840 /* Never clean up services that still have a process around, even if the service is formally dead. Note that
2841 * unit_may_gc() already checked our cgroup for us, we just check our two additional PIDs, too, in case they
2842 * have moved outside of the cgroup. */
2844 if (main_pid_good(s
) > 0 ||
2845 control_pid_good(s
) > 0)
2851 static int service_retry_pid_file(Service
*s
) {
2854 assert(s
->pid_file
);
2855 assert(IN_SET(s
->state
, SERVICE_START
, SERVICE_START_POST
));
2857 r
= service_load_pid_file(s
, false);
2861 service_unwatch_pid_file(s
);
2863 service_enter_running(s
, SERVICE_SUCCESS
);
2867 static int service_watch_pid_file(Service
*s
) {
2870 log_unit_debug(UNIT(s
), "Setting watch for PID file %s", s
->pid_file_pathspec
->path
);
2872 r
= path_spec_watch(s
->pid_file_pathspec
, service_dispatch_io
);
2876 /* the pidfile might have appeared just before we set the watch */
2877 log_unit_debug(UNIT(s
), "Trying to read PID file %s in case it changed", s
->pid_file_pathspec
->path
);
2878 service_retry_pid_file(s
);
2882 log_unit_error_errno(UNIT(s
), r
, "Failed to set a watch for PID file %s: %m", s
->pid_file_pathspec
->path
);
2883 service_unwatch_pid_file(s
);
2887 static int service_demand_pid_file(Service
*s
) {
2890 assert(s
->pid_file
);
2891 assert(!s
->pid_file_pathspec
);
2893 ps
= new0(PathSpec
, 1);
2898 ps
->path
= strdup(s
->pid_file
);
2904 path_kill_slashes(ps
->path
);
2906 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2907 * keep their PID file open all the time. */
2908 ps
->type
= PATH_MODIFIED
;
2909 ps
->inotify_fd
= -1;
2911 s
->pid_file_pathspec
= ps
;
2913 return service_watch_pid_file(s
);
2916 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
) {
2917 PathSpec
*p
= userdata
;
2922 s
= SERVICE(p
->unit
);
2926 assert(IN_SET(s
->state
, SERVICE_START
, SERVICE_START_POST
));
2927 assert(s
->pid_file_pathspec
);
2928 assert(path_spec_owns_inotify_fd(s
->pid_file_pathspec
, fd
));
2930 log_unit_debug(UNIT(s
), "inotify event");
2932 if (path_spec_fd_event(p
, events
) < 0)
2935 if (service_retry_pid_file(s
) == 0)
2938 if (service_watch_pid_file(s
) < 0)
2944 service_unwatch_pid_file(s
);
2945 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2949 static void service_notify_cgroup_empty_event(Unit
*u
) {
2950 Service
*s
= SERVICE(u
);
2954 log_unit_debug(u
, "cgroup is empty");
2958 /* Waiting for SIGCHLD is usually more interesting,
2959 * because it includes return codes/signals. Which is
2960 * why we ignore the cgroup events for most cases,
2961 * except when we don't know pid which to expect the
2965 if (s
->type
== SERVICE_NOTIFY
&&
2966 main_pid_good(s
) == 0 &&
2967 control_pid_good(s
) == 0) {
2968 /* No chance of getting a ready notification anymore */
2969 service_enter_stop_post(s
, SERVICE_FAILURE_PROTOCOL
);
2974 case SERVICE_START_POST
:
2975 if (s
->pid_file_pathspec
&&
2976 main_pid_good(s
) == 0 &&
2977 control_pid_good(s
) == 0) {
2979 /* Give up hoping for the daemon to write its PID file */
2980 log_unit_warning(u
, "Daemon never wrote its PID file. Failing.");
2982 service_unwatch_pid_file(s
);
2983 if (s
->state
== SERVICE_START
)
2984 service_enter_stop_post(s
, SERVICE_FAILURE_PROTOCOL
);
2986 service_enter_stop(s
, SERVICE_FAILURE_PROTOCOL
);
2990 case SERVICE_RUNNING
:
2991 /* service_enter_running() will figure out what to do */
2992 service_enter_running(s
, SERVICE_SUCCESS
);
2995 case SERVICE_STOP_SIGABRT
:
2996 case SERVICE_STOP_SIGTERM
:
2997 case SERVICE_STOP_SIGKILL
:
2999 if (main_pid_good(s
) <= 0 && control_pid_good(s
) <= 0)
3000 service_enter_stop_post(s
, SERVICE_SUCCESS
);
3004 case SERVICE_STOP_POST
:
3005 case SERVICE_FINAL_SIGTERM
:
3006 case SERVICE_FINAL_SIGKILL
:
3007 if (main_pid_good(s
) <= 0 && control_pid_good(s
) <= 0)
3008 service_enter_dead(s
, SERVICE_SUCCESS
, true);
3017 static void service_sigchld_event(Unit
*u
, pid_t pid
, int code
, int status
) {
3018 bool notify_dbus
= true;
3019 Service
*s
= SERVICE(u
);
3025 if (is_clean_exit(code
, status
, s
->type
== SERVICE_ONESHOT
? EXIT_CLEAN_COMMAND
: EXIT_CLEAN_DAEMON
, &s
->success_status
))
3026 f
= SERVICE_SUCCESS
;
3027 else if (code
== CLD_EXITED
)
3028 f
= SERVICE_FAILURE_EXIT_CODE
;
3029 else if (code
== CLD_KILLED
)
3030 f
= SERVICE_FAILURE_SIGNAL
;
3031 else if (code
== CLD_DUMPED
)
3032 f
= SERVICE_FAILURE_CORE_DUMP
;
3034 assert_not_reached("Unknown code");
3036 if (s
->main_pid
== pid
) {
3037 /* Forking services may occasionally move to a new PID.
3038 * As long as they update the PID file before exiting the old
3039 * PID, they're fine. */
3040 if (service_load_pid_file(s
, false) > 0)
3044 exec_status_exit(&s
->main_exec_status
, &s
->exec_context
, pid
, code
, status
);
3046 if (s
->main_command
) {
3047 /* If this is not a forking service than the
3048 * main process got started and hence we copy
3049 * the exit status so that it is recorded both
3050 * as main and as control process exit
3053 s
->main_command
->exec_status
= s
->main_exec_status
;
3055 if (s
->main_command
->flags
& EXEC_COMMAND_IGNORE_FAILURE
)
3056 f
= SERVICE_SUCCESS
;
3057 } else if (s
->exec_command
[SERVICE_EXEC_START
]) {
3059 /* If this is a forked process, then we should
3060 * ignore the return value if this was
3061 * configured for the starter process */
3063 if (s
->exec_command
[SERVICE_EXEC_START
]->flags
& EXEC_COMMAND_IGNORE_FAILURE
)
3064 f
= SERVICE_SUCCESS
;
3067 /* When this is a successful exit, let's log about the exit code on DEBUG level. If this is a failure
3068 * and the process exited on its own via exit(), then let's make this a NOTICE, under the assumption
3069 * that the service already logged the reason at a higher log level on its own. However, if the service
3070 * died due to a signal, then it most likely didn't say anything about any reason, hence let's raise
3071 * our log level to WARNING then. */
3073 log_struct(f
== SERVICE_SUCCESS
? LOG_DEBUG
:
3074 (code
== CLD_EXITED
? LOG_NOTICE
: LOG_WARNING
),
3075 LOG_UNIT_MESSAGE(u
, "Main process exited, code=%s, status=%i/%s",
3076 sigchld_code_to_string(code
), status
,
3077 strna(code
== CLD_EXITED
3078 ? exit_status_to_string(status
, EXIT_STATUS_FULL
)
3079 : signal_to_string(status
))),
3080 "EXIT_CODE=%s", sigchld_code_to_string(code
),
3081 "EXIT_STATUS=%i", status
,
3083 LOG_UNIT_INVOCATION_ID(u
),
3086 if (s
->result
== SERVICE_SUCCESS
)
3089 if (s
->main_command
&&
3090 s
->main_command
->command_next
&&
3091 s
->type
== SERVICE_ONESHOT
&&
3092 f
== SERVICE_SUCCESS
) {
3094 /* There is another command to *
3095 * execute, so let's do that. */
3097 log_unit_debug(u
, "Running next main command for state %s.", service_state_to_string(s
->state
));
3098 service_run_next_main(s
);
3102 /* The service exited, so the service is officially
3104 s
->main_command
= NULL
;
3108 case SERVICE_START_POST
:
3109 case SERVICE_RELOAD
:
3111 /* Need to wait until the operation is
3116 if (s
->type
== SERVICE_ONESHOT
) {
3117 /* This was our main goal, so let's go on */
3118 if (f
== SERVICE_SUCCESS
)
3119 service_enter_start_post(s
);
3121 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3123 } else if (s
->type
== SERVICE_NOTIFY
) {
3124 /* Only enter running through a notification, so that the
3125 * SERVICE_START state signifies that no ready notification
3126 * has been received */
3127 if (f
!= SERVICE_SUCCESS
)
3128 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3129 else if (!s
->remain_after_exit
|| s
->notify_access
== NOTIFY_MAIN
)
3130 /* The service has never been and will never be active */
3131 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_PROTOCOL
);
3136 case SERVICE_RUNNING
:
3137 service_enter_running(s
, f
);
3140 case SERVICE_STOP_SIGABRT
:
3141 case SERVICE_STOP_SIGTERM
:
3142 case SERVICE_STOP_SIGKILL
:
3144 if (control_pid_good(s
) <= 0)
3145 service_enter_stop_post(s
, f
);
3147 /* If there is still a control process, wait for that first */
3150 case SERVICE_STOP_POST
:
3151 case SERVICE_FINAL_SIGTERM
:
3152 case SERVICE_FINAL_SIGKILL
:
3154 if (control_pid_good(s
) <= 0)
3155 service_enter_dead(s
, f
, true);
3159 assert_not_reached("Uh, main process died at wrong time.");
3163 } else if (s
->control_pid
== pid
) {
3166 if (s
->control_command
) {
3167 exec_status_exit(&s
->control_command
->exec_status
, &s
->exec_context
, pid
, code
, status
);
3169 if (s
->control_command
->flags
& EXEC_COMMAND_IGNORE_FAILURE
)
3170 f
= SERVICE_SUCCESS
;
3173 log_unit_full(u
, f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
, 0,
3174 "Control process exited, code=%s status=%i",
3175 sigchld_code_to_string(code
), status
);
3177 if (s
->result
== SERVICE_SUCCESS
)
3180 if (s
->control_command
&&
3181 s
->control_command
->command_next
&&
3182 f
== SERVICE_SUCCESS
) {
3184 /* There is another command to *
3185 * execute, so let's do that. */
3187 log_unit_debug(u
, "Running next control command for state %s.", service_state_to_string(s
->state
));
3188 service_run_next_control(s
);
3191 /* No further commands for this step, so let's
3192 * figure out what to do next */
3194 s
->control_command
= NULL
;
3195 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
3197 log_unit_debug(u
, "Got final SIGCHLD for state %s.", service_state_to_string(s
->state
));
3201 case SERVICE_START_PRE
:
3202 if (f
== SERVICE_SUCCESS
)
3203 service_enter_start(s
);
3205 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3209 if (s
->type
!= SERVICE_FORKING
)
3210 /* Maybe spurious event due to a reload that changed the type? */
3213 if (f
!= SERVICE_SUCCESS
) {
3214 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3219 bool has_start_post
;
3222 /* Let's try to load the pid file here if we can.
3223 * The PID file might actually be created by a START_POST
3224 * script. In that case don't worry if the loading fails. */
3226 has_start_post
= !!s
->exec_command
[SERVICE_EXEC_START_POST
];
3227 r
= service_load_pid_file(s
, !has_start_post
);
3228 if (!has_start_post
&& r
< 0) {
3229 r
= service_demand_pid_file(s
);
3230 if (r
< 0 || cgroup_good(s
) == 0)
3231 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_PROTOCOL
);
3235 service_search_main_pid(s
);
3237 service_enter_start_post(s
);
3240 case SERVICE_START_POST
:
3241 if (f
!= SERVICE_SUCCESS
) {
3242 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3249 r
= service_load_pid_file(s
, true);
3251 r
= service_demand_pid_file(s
);
3252 if (r
< 0 || cgroup_good(s
) == 0)
3253 service_enter_stop(s
, SERVICE_FAILURE_PROTOCOL
);
3257 service_search_main_pid(s
);
3259 service_enter_running(s
, SERVICE_SUCCESS
);
3262 case SERVICE_RELOAD
:
3263 if (f
== SERVICE_SUCCESS
)
3264 if (service_load_pid_file(s
, true) < 0)
3265 service_search_main_pid(s
);
3267 s
->reload_result
= f
;
3268 service_enter_running(s
, SERVICE_SUCCESS
);
3272 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
3275 case SERVICE_STOP_SIGABRT
:
3276 case SERVICE_STOP_SIGTERM
:
3277 case SERVICE_STOP_SIGKILL
:
3278 if (main_pid_good(s
) <= 0)
3279 service_enter_stop_post(s
, f
);
3281 /* If there is still a service
3282 * process around, wait until
3283 * that one quit, too */
3286 case SERVICE_STOP_POST
:
3287 case SERVICE_FINAL_SIGTERM
:
3288 case SERVICE_FINAL_SIGKILL
:
3289 if (main_pid_good(s
) <= 0)
3290 service_enter_dead(s
, f
, true);
3294 assert_not_reached("Uh, control process died at wrong time.");
3297 } else /* Neither control nor main PID? If so, don't notify about anything */
3298 notify_dbus
= false;
3300 /* Notify clients about changed exit status */
3302 unit_add_to_dbus_queue(u
);
3304 /* If we get a SIGCHLD event for one of the processes we were interested in, then we look for others to watch,
3305 * under the assumption that we'll sooner or later get a SIGCHLD for them, as the original process we watched
3306 * was probably the parent of them, and they are hence now our children. */
3307 unit_tidy_watch_pids(u
, s
->main_pid
, s
->control_pid
);
3308 unit_watch_all_pids(u
);
3310 /* If the PID set is empty now, then let's check if the cgroup is empty too and finish off the unit. */
3311 unit_synthesize_cgroup_empty_event(u
);
3314 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
) {
3315 Service
*s
= SERVICE(userdata
);
3318 assert(source
== s
->timer_event_source
);
3322 case SERVICE_START_PRE
:
3324 log_unit_warning(UNIT(s
), "%s operation timed out. Terminating.", s
->state
== SERVICE_START
? "Start" : "Start-pre");
3325 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
3328 case SERVICE_START_POST
:
3329 log_unit_warning(UNIT(s
), "Start-post operation timed out. Stopping.");
3330 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
3333 case SERVICE_RUNNING
:
3334 log_unit_warning(UNIT(s
), "Service reached runtime time limit. Stopping.");
3335 service_enter_stop(s
, SERVICE_FAILURE_TIMEOUT
);
3338 case SERVICE_RELOAD
:
3339 log_unit_warning(UNIT(s
), "Reload operation timed out. Killing reload process.");
3340 service_kill_control_process(s
);
3341 s
->reload_result
= SERVICE_FAILURE_TIMEOUT
;
3342 service_enter_running(s
, SERVICE_SUCCESS
);
3346 log_unit_warning(UNIT(s
), "Stopping timed out. Terminating.");
3347 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
3350 case SERVICE_STOP_SIGABRT
:
3351 log_unit_warning(UNIT(s
), "State 'stop-sigabrt' timed out. Terminating.");
3352 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
3355 case SERVICE_STOP_SIGTERM
:
3356 if (s
->kill_context
.send_sigkill
) {
3357 log_unit_warning(UNIT(s
), "State 'stop-sigterm' timed out. Killing.");
3358 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
3360 log_unit_warning(UNIT(s
), "State 'stop-sigterm' timed out. Skipping SIGKILL.");
3361 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
3366 case SERVICE_STOP_SIGKILL
:
3367 /* Uh, we sent a SIGKILL and it is still not gone?
3368 * Must be something we cannot kill, so let's just be
3369 * weirded out and continue */
3371 log_unit_warning(UNIT(s
), "Processes still around after SIGKILL. Ignoring.");
3372 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
3375 case SERVICE_STOP_POST
:
3376 log_unit_warning(UNIT(s
), "State 'stop-post' timed out. Terminating.");
3377 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
3380 case SERVICE_FINAL_SIGTERM
:
3381 if (s
->kill_context
.send_sigkill
) {
3382 log_unit_warning(UNIT(s
), "State 'stop-final-sigterm' timed out. Killing.");
3383 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
3385 log_unit_warning(UNIT(s
), "State 'stop-final-sigterm' timed out. Skipping SIGKILL. Entering failed mode.");
3386 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, false);
3391 case SERVICE_FINAL_SIGKILL
:
3392 log_unit_warning(UNIT(s
), "Processes still around after final SIGKILL. Entering failed mode.");
3393 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, true);
3396 case SERVICE_AUTO_RESTART
:
3397 if (s
->restart_usec
> 0) {
3398 char buf_restart
[FORMAT_TIMESPAN_MAX
];
3399 log_unit_info(UNIT(s
),
3400 "Service RestartSec=%s expired, scheduling restart.",
3401 format_timespan(buf_restart
, sizeof buf_restart
, s
->restart_usec
, USEC_PER_SEC
));
3403 log_unit_info(UNIT(s
),
3404 "Service has no hold-off time (RestartSec=0), scheduling restart.");
3406 service_enter_restart(s
);
3410 assert_not_reached("Timeout at wrong time.");
3416 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
) {
3417 Service
*s
= SERVICE(userdata
);
3418 char t
[FORMAT_TIMESPAN_MAX
];
3419 usec_t watchdog_usec
;
3422 assert(source
== s
->watchdog_event_source
);
3424 watchdog_usec
= service_get_watchdog_usec(s
);
3426 if (UNIT(s
)->manager
->service_watchdogs
) {
3427 log_unit_error(UNIT(s
), "Watchdog timeout (limit %s)!",
3428 format_timespan(t
, sizeof(t
), watchdog_usec
, 1));
3430 service_enter_signal(s
, SERVICE_STOP_SIGABRT
, SERVICE_FAILURE_WATCHDOG
);
3432 log_unit_warning(UNIT(s
), "Watchdog disabled! Ignoring watchdog timeout (limit %s)!",
3433 format_timespan(t
, sizeof(t
), watchdog_usec
, 1));
3438 static bool service_notify_message_authorized(Service
*s
, pid_t pid
, char **tags
, FDSet
*fds
) {
3441 if (s
->notify_access
== NOTIFY_NONE
) {
3442 log_unit_warning(UNIT(s
), "Got notification message from PID "PID_FMT
", but reception is disabled.", pid
);
3446 if (s
->notify_access
== NOTIFY_MAIN
&& pid
!= s
->main_pid
) {
3447 if (s
->main_pid
!= 0)
3448 log_unit_warning(UNIT(s
), "Got notification message from PID "PID_FMT
", but reception only permitted for main PID "PID_FMT
, pid
, s
->main_pid
);
3450 log_unit_warning(UNIT(s
), "Got notification message from PID "PID_FMT
", but reception only permitted for main PID which is currently not known", pid
);
3455 if (s
->notify_access
== NOTIFY_EXEC
&& pid
!= s
->main_pid
&& pid
!= s
->control_pid
) {
3456 if (s
->main_pid
!= 0 && s
->control_pid
!= 0)
3457 log_unit_warning(UNIT(s
), "Got notification message from PID "PID_FMT
", but reception only permitted for main PID "PID_FMT
" and control PID "PID_FMT
,
3458 pid
, s
->main_pid
, s
->control_pid
);
3459 else if (s
->main_pid
!= 0)
3460 log_unit_warning(UNIT(s
), "Got notification message from PID "PID_FMT
", but reception only permitted for main PID "PID_FMT
, pid
, s
->main_pid
);
3461 else if (s
->control_pid
!= 0)
3462 log_unit_warning(UNIT(s
), "Got notification message from PID "PID_FMT
", but reception only permitted for control PID "PID_FMT
, pid
, s
->control_pid
);
3464 log_unit_warning(UNIT(s
), "Got notification message from PID "PID_FMT
", but reception only permitted for main PID and control PID which are currently not known", pid
);
3472 static void service_notify_message(
3474 const struct ucred
*ucred
,
3478 Service
*s
= SERVICE(u
);
3479 bool notify_dbus
= false;
3487 if (!service_notify_message_authorized(SERVICE(u
), ucred
->pid
, tags
, fds
))
3490 if (DEBUG_LOGGING
) {
3491 _cleanup_free_
char *cc
= NULL
;
3493 cc
= strv_join(tags
, ", ");
3494 log_unit_debug(u
, "Got notification message from PID "PID_FMT
" (%s)", ucred
->pid
, isempty(cc
) ? "n/a" : cc
);
3497 /* Interpret MAINPID= */
3498 e
= strv_find_startswith(tags
, "MAINPID=");
3499 if (e
&& IN_SET(s
->state
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
)) {
3502 if (parse_pid(e
, &new_main_pid
) < 0)
3503 log_unit_warning(u
, "Failed to parse MAINPID= field in notification message, ignoring: %s", e
);
3504 else if (!s
->main_pid_known
|| new_main_pid
!= s
->main_pid
) {
3506 r
= service_is_suitable_main_pid(s
, new_main_pid
, LOG_WARNING
);
3508 /* The new main PID is a bit suspicous, which is OK if the sender is privileged. */
3510 if (ucred
->uid
== 0) {
3511 log_unit_debug(u
, "New main PID "PID_FMT
" does not belong to service, but we'll accept it as the request to change it came from a privileged process.", new_main_pid
);
3514 log_unit_debug(u
, "New main PID "PID_FMT
" does not belong to service, refusing.", new_main_pid
);
3517 service_set_main_pid(s
, new_main_pid
);
3518 unit_watch_pid(UNIT(s
), new_main_pid
);
3524 /* Interpret READY=/STOPPING=/RELOADING=. Last one wins. */
3525 STRV_FOREACH_BACKWARDS(i
, tags
) {
3527 if (streq(*i
, "READY=1")) {
3528 s
->notify_state
= NOTIFY_READY
;
3530 /* Type=notify services inform us about completed
3531 * initialization with READY=1 */
3532 if (s
->type
== SERVICE_NOTIFY
&& s
->state
== SERVICE_START
)
3533 service_enter_start_post(s
);
3535 /* Sending READY=1 while we are reloading informs us
3536 * that the reloading is complete */
3537 if (s
->state
== SERVICE_RELOAD
&& s
->control_pid
== 0)
3538 service_enter_running(s
, SERVICE_SUCCESS
);
3543 } else if (streq(*i
, "RELOADING=1")) {
3544 s
->notify_state
= NOTIFY_RELOADING
;
3546 if (s
->state
== SERVICE_RUNNING
)
3547 service_enter_reload_by_notify(s
);
3552 } else if (streq(*i
, "STOPPING=1")) {
3553 s
->notify_state
= NOTIFY_STOPPING
;
3555 if (s
->state
== SERVICE_RUNNING
)
3556 service_enter_stop_by_notify(s
);
3563 /* Interpret STATUS= */
3564 e
= strv_find_startswith(tags
, "STATUS=");
3566 _cleanup_free_
char *t
= NULL
;
3569 if (!utf8_is_valid(e
))
3570 log_unit_warning(u
, "Status message in notification message is not UTF-8 clean.");
3578 if (!streq_ptr(s
->status_text
, t
)) {
3579 free_and_replace(s
->status_text
, t
);
3584 /* Interpret ERRNO= */
3585 e
= strv_find_startswith(tags
, "ERRNO=");
3589 status_errno
= parse_errno(e
);
3590 if (status_errno
< 0)
3591 log_unit_warning_errno(u
, status_errno
,
3592 "Failed to parse ERRNO= field in notification message: %s", e
);
3593 else if (s
->status_errno
!= status_errno
) {
3594 s
->status_errno
= status_errno
;
3599 /* Interpret EXTEND_TIMEOUT= */
3600 e
= strv_find_startswith(tags
, "EXTEND_TIMEOUT_USEC=");
3602 usec_t extend_timeout_usec
;
3603 if (safe_atou64(e
, &extend_timeout_usec
) < 0)
3604 log_unit_warning(u
, "Failed to parse EXTEND_TIMEOUT_USEC=%s", e
);
3606 service_extend_timeout(s
, extend_timeout_usec
);
3609 /* Interpret WATCHDOG= */
3610 if (strv_find(tags
, "WATCHDOG=1"))
3611 service_reset_watchdog(s
);
3613 e
= strv_find_startswith(tags
, "WATCHDOG_USEC=");
3615 usec_t watchdog_override_usec
;
3616 if (safe_atou64(e
, &watchdog_override_usec
) < 0)
3617 log_unit_warning(u
, "Failed to parse WATCHDOG_USEC=%s", e
);
3619 service_reset_watchdog_timeout(s
, watchdog_override_usec
);
3622 /* Process FD store messages. Either FDSTOREREMOVE=1 for removal, or FDSTORE=1 for addition. In both cases,
3623 * process FDNAME= for picking the file descriptor name to use. Note that FDNAME= is required when removing
3624 * fds, but optional when pushing in new fds, for compatibility reasons. */
3625 if (strv_find(tags
, "FDSTOREREMOVE=1")) {
3628 name
= strv_find_startswith(tags
, "FDNAME=");
3629 if (!name
|| !fdname_is_valid(name
))
3630 log_unit_warning(u
, "FDSTOREREMOVE=1 requested, but no valid file descriptor name passed, ignoring.");
3632 service_remove_fd_store(s
, name
);
3634 } else if (strv_find(tags
, "FDSTORE=1")) {
3637 name
= strv_find_startswith(tags
, "FDNAME=");
3638 if (name
&& !fdname_is_valid(name
)) {
3639 log_unit_warning(u
, "Passed FDNAME= name is invalid, ignoring.");
3643 (void) service_add_fd_store_set(s
, fds
, name
);
3646 /* Notify clients about changed status or main pid */
3648 unit_add_to_dbus_queue(u
);
3651 static int service_get_timeout(Unit
*u
, usec_t
*timeout
) {
3652 Service
*s
= SERVICE(u
);
3656 if (!s
->timer_event_source
)
3659 r
= sd_event_source_get_time(s
->timer_event_source
, &t
);
3662 if (t
== USEC_INFINITY
)
3669 static void service_bus_name_owner_change(
3672 const char *old_owner
,
3673 const char *new_owner
) {
3675 Service
*s
= SERVICE(u
);
3681 assert(streq(s
->bus_name
, name
));
3682 assert(old_owner
|| new_owner
);
3684 if (old_owner
&& new_owner
)
3685 log_unit_debug(u
, "D-Bus name %s changed owner from %s to %s", name
, old_owner
, new_owner
);
3687 log_unit_debug(u
, "D-Bus name %s no longer registered by %s", name
, old_owner
);
3689 log_unit_debug(u
, "D-Bus name %s now registered by %s", name
, new_owner
);
3691 s
->bus_name_good
= !!new_owner
;
3693 /* Track the current owner, so we can reconstruct changes after a daemon reload */
3694 r
= free_and_strdup(&s
->bus_name_owner
, new_owner
);
3696 log_unit_error_errno(u
, r
, "Unable to set new bus name owner %s: %m", new_owner
);
3700 if (s
->type
== SERVICE_DBUS
) {
3702 /* service_enter_running() will figure out what to
3704 if (s
->state
== SERVICE_RUNNING
)
3705 service_enter_running(s
, SERVICE_SUCCESS
);
3706 else if (s
->state
== SERVICE_START
&& new_owner
)
3707 service_enter_start_post(s
);
3709 } else if (new_owner
&&
3717 _cleanup_(sd_bus_creds_unrefp
) sd_bus_creds
*creds
= NULL
;
3720 /* Try to acquire PID from bus service */
3722 r
= sd_bus_get_name_creds(u
->manager
->api_bus
, name
, SD_BUS_CREDS_PID
, &creds
);
3724 r
= sd_bus_creds_get_pid(creds
, &pid
);
3726 log_unit_debug(u
, "D-Bus name %s is now owned by process " PID_FMT
, name
, pid
);
3728 service_set_main_pid(s
, pid
);
3729 unit_watch_pid(UNIT(s
), pid
);
3734 int service_set_socket_fd(Service
*s
, int fd
, Socket
*sock
, bool selinux_context_net
) {
3735 _cleanup_free_
char *peer
= NULL
;
3741 /* This is called by the socket code when instantiating a new service for a stream socket and the socket needs
3742 * to be configured. We take ownership of the passed fd on success. */
3744 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
3747 if (s
->socket_fd
>= 0)
3750 if (s
->state
!= SERVICE_DEAD
)
3753 if (getpeername_pretty(fd
, true, &peer
) >= 0) {
3755 if (UNIT(s
)->description
) {
3756 _cleanup_free_
char *a
;
3758 a
= strjoin(UNIT(s
)->description
, " (", peer
, ")");
3762 r
= unit_set_description(UNIT(s
), a
);
3764 r
= unit_set_description(UNIT(s
), peer
);
3770 r
= unit_add_two_dependencies(UNIT(sock
), UNIT_BEFORE
, UNIT_TRIGGERS
, UNIT(s
), false, UNIT_DEPENDENCY_IMPLICIT
);
3775 s
->socket_fd_selinux_context_net
= selinux_context_net
;
3777 unit_ref_set(&s
->accept_socket
, UNIT(s
), UNIT(sock
));
3781 static void service_reset_failed(Unit
*u
) {
3782 Service
*s
= SERVICE(u
);
3786 if (s
->state
== SERVICE_FAILED
)
3787 service_set_state(s
, SERVICE_DEAD
);
3789 s
->result
= SERVICE_SUCCESS
;
3790 s
->reload_result
= SERVICE_SUCCESS
;
3792 s
->flush_n_restarts
= false;
3795 static int service_kill(Unit
*u
, KillWho who
, int signo
, sd_bus_error
*error
) {
3796 Service
*s
= SERVICE(u
);
3800 return unit_kill_common(u
, who
, signo
, s
->main_pid
, s
->control_pid
, error
);
3803 static int service_main_pid(Unit
*u
) {
3804 Service
*s
= SERVICE(u
);
3811 static int service_control_pid(Unit
*u
) {
3812 Service
*s
= SERVICE(u
);
3816 return s
->control_pid
;
3819 static bool service_needs_console(Unit
*u
) {
3820 Service
*s
= SERVICE(u
);
3824 /* We provide our own implementation of this here, instead of relying of the generic implementation
3825 * unit_needs_console() provides, since we want to return false if we are in SERVICE_EXITED state. */
3827 if (!exec_context_may_touch_console(&s
->exec_context
))
3830 return IN_SET(s
->state
,
3837 SERVICE_STOP_SIGABRT
,
3838 SERVICE_STOP_SIGTERM
,
3839 SERVICE_STOP_SIGKILL
,
3841 SERVICE_FINAL_SIGTERM
,
3842 SERVICE_FINAL_SIGKILL
);
3845 static const char* const service_restart_table
[_SERVICE_RESTART_MAX
] = {
3846 [SERVICE_RESTART_NO
] = "no",
3847 [SERVICE_RESTART_ON_SUCCESS
] = "on-success",
3848 [SERVICE_RESTART_ON_FAILURE
] = "on-failure",
3849 [SERVICE_RESTART_ON_ABNORMAL
] = "on-abnormal",
3850 [SERVICE_RESTART_ON_WATCHDOG
] = "on-watchdog",
3851 [SERVICE_RESTART_ON_ABORT
] = "on-abort",
3852 [SERVICE_RESTART_ALWAYS
] = "always",
3855 DEFINE_STRING_TABLE_LOOKUP(service_restart
, ServiceRestart
);
3857 static const char* const service_type_table
[_SERVICE_TYPE_MAX
] = {
3858 [SERVICE_SIMPLE
] = "simple",
3859 [SERVICE_FORKING
] = "forking",
3860 [SERVICE_ONESHOT
] = "oneshot",
3861 [SERVICE_DBUS
] = "dbus",
3862 [SERVICE_NOTIFY
] = "notify",
3863 [SERVICE_IDLE
] = "idle"
3866 DEFINE_STRING_TABLE_LOOKUP(service_type
, ServiceType
);
3868 static const char* const service_exec_command_table
[_SERVICE_EXEC_COMMAND_MAX
] = {
3869 [SERVICE_EXEC_START_PRE
] = "ExecStartPre",
3870 [SERVICE_EXEC_START
] = "ExecStart",
3871 [SERVICE_EXEC_START_POST
] = "ExecStartPost",
3872 [SERVICE_EXEC_RELOAD
] = "ExecReload",
3873 [SERVICE_EXEC_STOP
] = "ExecStop",
3874 [SERVICE_EXEC_STOP_POST
] = "ExecStopPost",
3877 DEFINE_STRING_TABLE_LOOKUP(service_exec_command
, ServiceExecCommand
);
3879 static const char* const notify_state_table
[_NOTIFY_STATE_MAX
] = {
3880 [NOTIFY_UNKNOWN
] = "unknown",
3881 [NOTIFY_READY
] = "ready",
3882 [NOTIFY_RELOADING
] = "reloading",
3883 [NOTIFY_STOPPING
] = "stopping",
3886 DEFINE_STRING_TABLE_LOOKUP(notify_state
, NotifyState
);
3888 static const char* const service_result_table
[_SERVICE_RESULT_MAX
] = {
3889 [SERVICE_SUCCESS
] = "success",
3890 [SERVICE_FAILURE_RESOURCES
] = "resources",
3891 [SERVICE_FAILURE_PROTOCOL
] = "protocol",
3892 [SERVICE_FAILURE_TIMEOUT
] = "timeout",
3893 [SERVICE_FAILURE_EXIT_CODE
] = "exit-code",
3894 [SERVICE_FAILURE_SIGNAL
] = "signal",
3895 [SERVICE_FAILURE_CORE_DUMP
] = "core-dump",
3896 [SERVICE_FAILURE_WATCHDOG
] = "watchdog",
3897 [SERVICE_FAILURE_START_LIMIT_HIT
] = "start-limit-hit",
3900 DEFINE_STRING_TABLE_LOOKUP(service_result
, ServiceResult
);
3902 const UnitVTable service_vtable
= {
3903 .object_size
= sizeof(Service
),
3904 .exec_context_offset
= offsetof(Service
, exec_context
),
3905 .cgroup_context_offset
= offsetof(Service
, cgroup_context
),
3906 .kill_context_offset
= offsetof(Service
, kill_context
),
3907 .exec_runtime_offset
= offsetof(Service
, exec_runtime
),
3908 .dynamic_creds_offset
= offsetof(Service
, dynamic_creds
),
3914 .private_section
= "Service",
3916 .can_transient
= true,
3917 .can_delegate
= true,
3919 .init
= service_init
,
3920 .done
= service_done
,
3921 .load
= service_load
,
3922 .release_resources
= service_release_resources
,
3924 .coldplug
= service_coldplug
,
3926 .dump
= service_dump
,
3928 .start
= service_start
,
3929 .stop
= service_stop
,
3930 .reload
= service_reload
,
3932 .can_reload
= service_can_reload
,
3934 .kill
= service_kill
,
3936 .serialize
= service_serialize
,
3937 .deserialize_item
= service_deserialize_item
,
3939 .active_state
= service_active_state
,
3940 .sub_state_to_string
= service_sub_state_to_string
,
3942 .will_restart
= service_will_restart
,
3944 .may_gc
= service_may_gc
,
3946 .sigchld_event
= service_sigchld_event
,
3948 .reset_failed
= service_reset_failed
,
3950 .notify_cgroup_empty
= service_notify_cgroup_empty_event
,
3951 .notify_message
= service_notify_message
,
3953 .main_pid
= service_main_pid
,
3954 .control_pid
= service_control_pid
,
3956 .bus_name_owner_change
= service_bus_name_owner_change
,
3958 .bus_vtable
= bus_service_vtable
,
3959 .bus_set_property
= bus_service_set_property
,
3960 .bus_commit_properties
= bus_service_commit_properties
,
3962 .get_timeout
= service_get_timeout
,
3963 .needs_console
= service_needs_console
,
3965 .status_message_formats
= {
3966 .starting_stopping
= {
3967 [0] = "Starting %s...",
3968 [1] = "Stopping %s...",
3970 .finished_start_job
= {
3971 [JOB_DONE
] = "Started %s.",
3972 [JOB_FAILED
] = "Failed to start %s.",
3974 .finished_stop_job
= {
3975 [JOB_DONE
] = "Stopped %s.",
3976 [JOB_FAILED
] = "Stopped (with error) %s.",