1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4 This file is part of systemd.
6 Copyright 2010 Lennart Poettering
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
27 #include "bus-error.h"
28 #include "bus-kernel.h"
30 #include "dbus-service.h"
34 #include "exit-status.h"
37 #include "formats-util.h"
38 #include "load-dropin.h"
39 #include "load-fragment.h"
42 #include "path-util.h"
43 #include "process-util.h"
45 #include "signal-util.h"
47 #include "string-util.h"
49 #include "unit-name.h"
50 #include "unit-printf.h"
55 static const UnitActiveState state_translation_table
[_SERVICE_STATE_MAX
] = {
56 [SERVICE_DEAD
] = UNIT_INACTIVE
,
57 [SERVICE_START_PRE
] = UNIT_ACTIVATING
,
58 [SERVICE_START
] = UNIT_ACTIVATING
,
59 [SERVICE_START_POST
] = UNIT_ACTIVATING
,
60 [SERVICE_RUNNING
] = UNIT_ACTIVE
,
61 [SERVICE_EXITED
] = UNIT_ACTIVE
,
62 [SERVICE_RELOAD
] = UNIT_RELOADING
,
63 [SERVICE_STOP
] = UNIT_DEACTIVATING
,
64 [SERVICE_STOP_SIGABRT
] = UNIT_DEACTIVATING
,
65 [SERVICE_STOP_SIGTERM
] = UNIT_DEACTIVATING
,
66 [SERVICE_STOP_SIGKILL
] = UNIT_DEACTIVATING
,
67 [SERVICE_STOP_POST
] = UNIT_DEACTIVATING
,
68 [SERVICE_FINAL_SIGTERM
] = UNIT_DEACTIVATING
,
69 [SERVICE_FINAL_SIGKILL
] = UNIT_DEACTIVATING
,
70 [SERVICE_FAILED
] = UNIT_FAILED
,
71 [SERVICE_AUTO_RESTART
] = UNIT_ACTIVATING
74 /* For Type=idle we never want to delay any other jobs, hence we
75 * consider idle jobs active as soon as we start working on them */
76 static const UnitActiveState state_translation_table_idle
[_SERVICE_STATE_MAX
] = {
77 [SERVICE_DEAD
] = UNIT_INACTIVE
,
78 [SERVICE_START_PRE
] = UNIT_ACTIVE
,
79 [SERVICE_START
] = UNIT_ACTIVE
,
80 [SERVICE_START_POST
] = UNIT_ACTIVE
,
81 [SERVICE_RUNNING
] = UNIT_ACTIVE
,
82 [SERVICE_EXITED
] = UNIT_ACTIVE
,
83 [SERVICE_RELOAD
] = UNIT_RELOADING
,
84 [SERVICE_STOP
] = UNIT_DEACTIVATING
,
85 [SERVICE_STOP_SIGABRT
] = UNIT_DEACTIVATING
,
86 [SERVICE_STOP_SIGTERM
] = UNIT_DEACTIVATING
,
87 [SERVICE_STOP_SIGKILL
] = UNIT_DEACTIVATING
,
88 [SERVICE_STOP_POST
] = UNIT_DEACTIVATING
,
89 [SERVICE_FINAL_SIGTERM
] = UNIT_DEACTIVATING
,
90 [SERVICE_FINAL_SIGKILL
] = UNIT_DEACTIVATING
,
91 [SERVICE_FAILED
] = UNIT_FAILED
,
92 [SERVICE_AUTO_RESTART
] = UNIT_ACTIVATING
95 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
);
96 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
);
97 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
);
99 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
);
100 static void service_enter_reload_by_notify(Service
*s
);
102 static void service_init(Unit
*u
) {
103 Service
*s
= SERVICE(u
);
106 assert(u
->load_state
== UNIT_STUB
);
108 s
->timeout_start_usec
= u
->manager
->default_timeout_start_usec
;
109 s
->timeout_stop_usec
= u
->manager
->default_timeout_stop_usec
;
110 s
->restart_usec
= u
->manager
->default_restart_usec
;
111 s
->type
= _SERVICE_TYPE_INVALID
;
113 s
->bus_endpoint_fd
= -1;
114 s
->stdin_fd
= s
->stdout_fd
= s
->stderr_fd
= -1;
115 s
->guess_main_pid
= true;
117 RATELIMIT_INIT(s
->start_limit
, u
->manager
->default_start_limit_interval
, u
->manager
->default_start_limit_burst
);
119 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
122 static void service_unwatch_control_pid(Service
*s
) {
125 if (s
->control_pid
<= 0)
128 unit_unwatch_pid(UNIT(s
), s
->control_pid
);
132 static void service_unwatch_main_pid(Service
*s
) {
135 if (s
->main_pid
<= 0)
138 unit_unwatch_pid(UNIT(s
), s
->main_pid
);
142 static void service_unwatch_pid_file(Service
*s
) {
143 if (!s
->pid_file_pathspec
)
146 log_unit_debug(UNIT(s
), "Stopping watch for PID file %s", s
->pid_file_pathspec
->path
);
147 path_spec_unwatch(s
->pid_file_pathspec
);
148 path_spec_done(s
->pid_file_pathspec
);
149 s
->pid_file_pathspec
= mfree(s
->pid_file_pathspec
);
152 static int service_set_main_pid(Service
*s
, pid_t pid
) {
163 if (s
->main_pid
== pid
&& s
->main_pid_known
)
166 if (s
->main_pid
!= pid
) {
167 service_unwatch_main_pid(s
);
168 exec_status_start(&s
->main_exec_status
, pid
);
172 s
->main_pid_known
= true;
174 if (get_parent_of_pid(pid
, &ppid
) >= 0 && ppid
!= getpid()) {
175 log_unit_warning(UNIT(s
), "Supervising process "PID_FMT
" which is not our child. We'll most likely not notice when it exits.", pid
);
176 s
->main_pid_alien
= true;
178 s
->main_pid_alien
= false;
183 static void service_close_socket_fd(Service
*s
) {
186 s
->socket_fd
= asynchronous_close(s
->socket_fd
);
189 static void service_connection_unref(Service
*s
) {
192 if (!UNIT_ISSET(s
->accept_socket
))
195 socket_connection_unref(SOCKET(UNIT_DEREF(s
->accept_socket
)));
196 unit_ref_unset(&s
->accept_socket
);
199 static void service_stop_watchdog(Service
*s
) {
202 s
->watchdog_event_source
= sd_event_source_unref(s
->watchdog_event_source
);
203 s
->watchdog_timestamp
= DUAL_TIMESTAMP_NULL
;
206 static void service_start_watchdog(Service
*s
) {
211 if (s
->watchdog_usec
<= 0)
214 if (s
->watchdog_event_source
) {
215 r
= sd_event_source_set_time(s
->watchdog_event_source
, s
->watchdog_timestamp
.monotonic
+ s
->watchdog_usec
);
217 log_unit_warning_errno(UNIT(s
), r
, "Failed to reset watchdog timer: %m");
221 r
= sd_event_source_set_enabled(s
->watchdog_event_source
, SD_EVENT_ONESHOT
);
223 r
= sd_event_add_time(
224 UNIT(s
)->manager
->event
,
225 &s
->watchdog_event_source
,
227 s
->watchdog_timestamp
.monotonic
+ s
->watchdog_usec
, 0,
228 service_dispatch_watchdog
, s
);
230 log_unit_warning_errno(UNIT(s
), r
, "Failed to add watchdog timer: %m");
234 (void) sd_event_source_set_description(s
->watchdog_event_source
, "service-watchdog");
236 /* Let's process everything else which might be a sign
237 * of living before we consider a service died. */
238 r
= sd_event_source_set_priority(s
->watchdog_event_source
, SD_EVENT_PRIORITY_IDLE
);
242 log_unit_warning_errno(UNIT(s
), r
, "Failed to install watchdog timer: %m");
245 static void service_reset_watchdog(Service
*s
) {
248 dual_timestamp_get(&s
->watchdog_timestamp
);
249 service_start_watchdog(s
);
252 static void service_fd_store_unlink(ServiceFDStore
*fs
) {
258 assert(fs
->service
->n_fd_store
> 0);
259 LIST_REMOVE(fd_store
, fs
->service
->fd_store
, fs
);
260 fs
->service
->n_fd_store
--;
263 if (fs
->event_source
) {
264 sd_event_source_set_enabled(fs
->event_source
, SD_EVENT_OFF
);
265 sd_event_source_unref(fs
->event_source
);
273 static void service_release_resources(Unit
*u
) {
274 Service
*s
= SERVICE(u
);
278 if (!s
->fd_store
&& s
->stdin_fd
< 0 && s
->stdout_fd
< 0 && s
->stderr_fd
< 0)
281 log_unit_debug(u
, "Releasing all resources.");
283 s
->stdin_fd
= safe_close(s
->stdin_fd
);
284 s
->stdout_fd
= safe_close(s
->stdout_fd
);
285 s
->stderr_fd
= safe_close(s
->stderr_fd
);
288 service_fd_store_unlink(s
->fd_store
);
290 assert(s
->n_fd_store
== 0);
293 static void service_done(Unit
*u
) {
294 Service
*s
= SERVICE(u
);
298 s
->pid_file
= mfree(s
->pid_file
);
299 s
->status_text
= mfree(s
->status_text
);
300 s
->reboot_arg
= mfree(s
->reboot_arg
);
302 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
303 exec_command_free_array(s
->exec_command
, _SERVICE_EXEC_COMMAND_MAX
);
304 s
->control_command
= NULL
;
305 s
->main_command
= NULL
;
307 exit_status_set_free(&s
->restart_prevent_status
);
308 exit_status_set_free(&s
->restart_force_status
);
309 exit_status_set_free(&s
->success_status
);
311 /* This will leak a process, but at least no memory or any of
313 service_unwatch_main_pid(s
);
314 service_unwatch_control_pid(s
);
315 service_unwatch_pid_file(s
);
318 unit_unwatch_bus_name(u
, s
->bus_name
);
319 s
->bus_name
= mfree(s
->bus_name
);
322 s
->bus_endpoint_fd
= safe_close(s
->bus_endpoint_fd
);
323 service_close_socket_fd(s
);
324 service_connection_unref(s
);
326 unit_ref_unset(&s
->accept_socket
);
328 service_stop_watchdog(s
);
330 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
332 service_release_resources(u
);
335 static int on_fd_store_io(sd_event_source
*e
, int fd
, uint32_t revents
, void *userdata
) {
336 ServiceFDStore
*fs
= userdata
;
341 /* If we get either EPOLLHUP or EPOLLERR, it's time to remove this entry from the fd store */
342 service_fd_store_unlink(fs
);
346 static int service_add_fd_store(Service
*s
, int fd
, const char *name
) {
353 if (s
->n_fd_store
>= s
->n_fd_store_max
)
356 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
357 r
= same_fd(fs
->fd
, fd
);
361 /* Already included */
367 fs
= new0(ServiceFDStore
, 1);
373 fs
->fdname
= strdup(name
?: "stored");
379 r
= sd_event_add_io(UNIT(s
)->manager
->event
, &fs
->event_source
, fd
, 0, on_fd_store_io
, fs
);
386 (void) sd_event_source_set_description(fs
->event_source
, "service-fd-store");
388 LIST_PREPEND(fd_store
, s
->fd_store
, fs
);
394 static int service_add_fd_store_set(Service
*s
, FDSet
*fds
, const char *name
) {
399 if (fdset_size(fds
) <= 0)
402 while (s
->n_fd_store
< s
->n_fd_store_max
) {
403 _cleanup_close_
int fd
= -1;
405 fd
= fdset_steal_first(fds
);
409 r
= service_add_fd_store(s
, fd
, name
);
411 return log_unit_error_errno(UNIT(s
), r
, "Couldn't add fd to fd store: %m");
413 log_unit_debug(UNIT(s
), "Added fd to fd store.");
418 if (fdset_size(fds
) > 0)
419 log_unit_warning(UNIT(s
), "Tried to store more fds than FDStoreMax=%u allows, closing remaining.", s
->n_fd_store_max
);
424 static int service_arm_timer(Service
*s
, usec_t usec
) {
429 if (s
->timer_event_source
) {
430 r
= sd_event_source_set_time(s
->timer_event_source
, now(CLOCK_MONOTONIC
) + usec
);
434 return sd_event_source_set_enabled(s
->timer_event_source
, SD_EVENT_ONESHOT
);
437 r
= sd_event_add_time(
438 UNIT(s
)->manager
->event
,
439 &s
->timer_event_source
,
441 now(CLOCK_MONOTONIC
) + usec
, 0,
442 service_dispatch_timer
, s
);
446 (void) sd_event_source_set_description(s
->timer_event_source
, "service-timer");
451 static int service_verify(Service
*s
) {
454 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
457 if (!s
->exec_command
[SERVICE_EXEC_START
] && !s
->exec_command
[SERVICE_EXEC_STOP
]) {
458 log_unit_error(UNIT(s
), "Service lacks both ExecStart= and ExecStop= setting. Refusing.");
462 if (s
->type
!= SERVICE_ONESHOT
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
463 log_unit_error(UNIT(s
), "Service has no ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
467 if (!s
->remain_after_exit
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
468 log_unit_error(UNIT(s
), "Service has no ExecStart= setting, which is only allowed for RemainAfterExit=yes services. Refusing.");
472 if (s
->type
!= SERVICE_ONESHOT
&& s
->exec_command
[SERVICE_EXEC_START
]->command_next
) {
473 log_unit_error(UNIT(s
), "Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
477 if (s
->type
== SERVICE_ONESHOT
&& s
->restart
!= SERVICE_RESTART_NO
) {
478 log_unit_error(UNIT(s
), "Service has Restart= setting other than no, which isn't allowed for Type=oneshot services. Refusing.");
482 if (s
->type
== SERVICE_ONESHOT
&& !exit_status_set_is_empty(&s
->restart_force_status
)) {
483 log_unit_error(UNIT(s
), "Service has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.");
487 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name
) {
488 log_unit_error(UNIT(s
), "Service is of type D-Bus but no D-Bus service name has been specified. Refusing.");
492 if (s
->bus_name
&& s
->type
!= SERVICE_DBUS
)
493 log_unit_warning(UNIT(s
), "Service has a D-Bus service name specified, but is not of type dbus. Ignoring.");
495 if (s
->exec_context
.pam_name
&& !(s
->kill_context
.kill_mode
== KILL_CONTROL_GROUP
|| s
->kill_context
.kill_mode
== KILL_MIXED
)) {
496 log_unit_error(UNIT(s
), "Service has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.");
500 if (s
->usb_function_descriptors
&& !s
->usb_function_strings
)
501 log_unit_warning(UNIT(s
), "Service has USBFunctionDescriptors= setting, but no USBFunctionStrings=. Ignoring.");
503 if (!s
->usb_function_descriptors
&& s
->usb_function_strings
)
504 log_unit_warning(UNIT(s
), "Service has USBFunctionStrings= setting, but no USBFunctionDescriptors=. Ignoring.");
509 static int service_add_default_dependencies(Service
*s
) {
514 /* Add a number of automatic dependencies useful for the
515 * majority of services. */
517 /* First, pull in base system */
518 r
= unit_add_two_dependencies_by_name(UNIT(s
), UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_BASIC_TARGET
, NULL
, true);
522 /* Second, activate normal shutdown */
523 return unit_add_two_dependencies_by_name(UNIT(s
), UNIT_BEFORE
, UNIT_CONFLICTS
, SPECIAL_SHUTDOWN_TARGET
, NULL
, true);
526 static void service_fix_output(Service
*s
) {
529 /* If nothing has been explicitly configured, patch default
530 * output in. If input is socket/tty we avoid this however,
531 * since in that case we want output to default to the same
532 * place as we read input from. */
534 if (s
->exec_context
.std_error
== EXEC_OUTPUT_INHERIT
&&
535 s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
536 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
537 s
->exec_context
.std_error
= UNIT(s
)->manager
->default_std_error
;
539 if (s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
540 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
541 s
->exec_context
.std_output
= UNIT(s
)->manager
->default_std_output
;
544 static int service_add_extras(Service
*s
) {
549 if (s
->type
== _SERVICE_TYPE_INVALID
) {
550 /* Figure out a type automatically */
552 s
->type
= SERVICE_DBUS
;
553 else if (s
->exec_command
[SERVICE_EXEC_START
])
554 s
->type
= SERVICE_SIMPLE
;
556 s
->type
= SERVICE_ONESHOT
;
559 /* Oneshot services have disabled start timeout by default */
560 if (s
->type
== SERVICE_ONESHOT
&& !s
->start_timeout_defined
)
561 s
->timeout_start_usec
= 0;
563 service_fix_output(s
);
565 r
= unit_patch_contexts(UNIT(s
));
569 r
= unit_add_exec_dependencies(UNIT(s
), &s
->exec_context
);
573 r
= unit_set_default_slice(UNIT(s
));
577 if (s
->type
== SERVICE_NOTIFY
&& s
->notify_access
== NOTIFY_NONE
)
578 s
->notify_access
= NOTIFY_MAIN
;
580 if (s
->watchdog_usec
> 0 && s
->notify_access
== NOTIFY_NONE
)
581 s
->notify_access
= NOTIFY_MAIN
;
586 n
= strjoina(s
->bus_name
, ".busname");
587 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_AFTER
, n
, NULL
, true);
591 r
= unit_watch_bus_name(UNIT(s
), s
->bus_name
);
593 return log_unit_error_errno(UNIT(s
), r
, "Two services allocated for the same bus name %s, refusing operation.", s
->bus_name
);
595 return log_unit_error_errno(UNIT(s
), r
, "Cannot watch bus name %s: %m", s
->bus_name
);
598 if (UNIT(s
)->default_dependencies
) {
599 r
= service_add_default_dependencies(s
);
607 static int service_load(Unit
*u
) {
608 Service
*s
= SERVICE(u
);
613 /* Load a .service file */
614 r
= unit_load_fragment(u
);
618 /* Still nothing found? Then let's give up */
619 if (u
->load_state
== UNIT_STUB
)
622 /* This is a new unit? Then let's add in some extras */
623 if (u
->load_state
== UNIT_LOADED
) {
625 /* We were able to load something, then let's add in
626 * the dropin directories. */
627 r
= unit_load_dropin(u
);
631 /* This is a new unit? Then let's add in some
633 r
= service_add_extras(s
);
638 return service_verify(s
);
641 static void service_dump(Unit
*u
, FILE *f
, const char *prefix
) {
642 ServiceExecCommand c
;
643 Service
*s
= SERVICE(u
);
648 prefix
= strempty(prefix
);
649 prefix2
= strjoina(prefix
, "\t");
652 "%sService State: %s\n"
654 "%sReload Result: %s\n"
655 "%sPermissionsStartOnly: %s\n"
656 "%sRootDirectoryStartOnly: %s\n"
657 "%sRemainAfterExit: %s\n"
658 "%sGuessMainPID: %s\n"
661 "%sNotifyAccess: %s\n"
662 "%sNotifyState: %s\n",
663 prefix
, service_state_to_string(s
->state
),
664 prefix
, service_result_to_string(s
->result
),
665 prefix
, service_result_to_string(s
->reload_result
),
666 prefix
, yes_no(s
->permissions_start_only
),
667 prefix
, yes_no(s
->root_directory_start_only
),
668 prefix
, yes_no(s
->remain_after_exit
),
669 prefix
, yes_no(s
->guess_main_pid
),
670 prefix
, service_type_to_string(s
->type
),
671 prefix
, service_restart_to_string(s
->restart
),
672 prefix
, notify_access_to_string(s
->notify_access
),
673 prefix
, notify_state_to_string(s
->notify_state
));
675 if (s
->control_pid
> 0)
677 "%sControl PID: "PID_FMT
"\n",
678 prefix
, s
->control_pid
);
682 "%sMain PID: "PID_FMT
"\n"
683 "%sMain PID Known: %s\n"
684 "%sMain PID Alien: %s\n",
686 prefix
, yes_no(s
->main_pid_known
),
687 prefix
, yes_no(s
->main_pid_alien
));
692 prefix
, s
->pid_file
);
697 "%sBus Name Good: %s\n",
699 prefix
, yes_no(s
->bus_name_good
));
701 kill_context_dump(&s
->kill_context
, f
, prefix
);
702 exec_context_dump(&s
->exec_context
, f
, prefix
);
704 for (c
= 0; c
< _SERVICE_EXEC_COMMAND_MAX
; c
++) {
706 if (!s
->exec_command
[c
])
709 fprintf(f
, "%s-> %s:\n",
710 prefix
, service_exec_command_to_string(c
));
712 exec_command_dump_list(s
->exec_command
[c
], f
, prefix2
);
716 fprintf(f
, "%sStatus Text: %s\n",
717 prefix
, s
->status_text
);
719 if (s
->n_fd_store_max
> 0)
721 "%sFile Descriptor Store Max: %u\n"
722 "%sFile Descriptor Store Current: %u\n",
723 prefix
, s
->n_fd_store_max
,
724 prefix
, s
->n_fd_store
);
727 static int service_load_pid_file(Service
*s
, bool may_warn
) {
728 _cleanup_free_
char *k
= NULL
;
737 r
= read_one_line_file(s
->pid_file
, &k
);
740 log_unit_info_errno(UNIT(s
), r
, "PID file %s not readable (yet?) after %s: %m", s
->pid_file
, service_state_to_string(s
->state
));
744 r
= parse_pid(k
, &pid
);
747 log_unit_info_errno(UNIT(s
), r
, "Failed to read PID from file %s: %m", s
->pid_file
);
751 if (!pid_is_alive(pid
)) {
753 log_unit_info(UNIT(s
), "PID "PID_FMT
" read from file %s does not exist or is a zombie.", pid
, s
->pid_file
);
757 if (s
->main_pid_known
) {
758 if (pid
== s
->main_pid
)
761 log_unit_debug(UNIT(s
), "Main PID changing: "PID_FMT
" -> "PID_FMT
, s
->main_pid
, pid
);
763 service_unwatch_main_pid(s
);
764 s
->main_pid_known
= false;
766 log_unit_debug(UNIT(s
), "Main PID loaded: "PID_FMT
, pid
);
768 r
= service_set_main_pid(s
, pid
);
772 r
= unit_watch_pid(UNIT(s
), pid
);
774 /* FIXME: we need to do something here */
775 log_unit_warning_errno(UNIT(s
), r
, "Failed to watch PID "PID_FMT
" for service: %m", pid
);
782 static int service_search_main_pid(Service
*s
) {
788 /* If we know it anyway, don't ever fallback to unreliable
790 if (s
->main_pid_known
)
793 if (!s
->guess_main_pid
)
796 assert(s
->main_pid
<= 0);
798 r
= unit_search_main_pid(UNIT(s
), &pid
);
802 log_unit_debug(UNIT(s
), "Main PID guessed: "PID_FMT
, pid
);
803 r
= service_set_main_pid(s
, pid
);
807 r
= unit_watch_pid(UNIT(s
), pid
);
809 /* FIXME: we need to do something here */
810 log_unit_warning_errno(UNIT(s
), r
, "Failed to watch PID "PID_FMT
" from: %m", pid
);
817 static void service_set_state(Service
*s
, ServiceState state
) {
818 ServiceState old_state
;
819 const UnitActiveState
*table
;
823 table
= s
->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
825 old_state
= s
->state
;
828 service_unwatch_pid_file(s
);
831 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
833 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
834 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
,
835 SERVICE_AUTO_RESTART
))
836 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
839 SERVICE_START
, SERVICE_START_POST
,
840 SERVICE_RUNNING
, SERVICE_RELOAD
,
841 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
842 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
843 service_unwatch_main_pid(s
);
844 s
->main_command
= NULL
;
848 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
850 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
851 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
852 service_unwatch_control_pid(s
);
853 s
->control_command
= NULL
;
854 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
857 if (IN_SET(state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
858 unit_unwatch_all_pids(UNIT(s
));
861 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
862 SERVICE_RUNNING
, SERVICE_RELOAD
,
863 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
864 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
) &&
865 !(state
== SERVICE_DEAD
&& UNIT(s
)->job
)) {
866 service_close_socket_fd(s
);
867 service_connection_unref(s
);
870 if (!IN_SET(state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
871 service_stop_watchdog(s
);
873 /* For the inactive states unit_notify() will trim the cgroup,
874 * but for exit we have to do that ourselves... */
875 if (state
== SERVICE_EXITED
&& UNIT(s
)->manager
->n_reloading
<= 0)
876 unit_prune_cgroup(UNIT(s
));
878 /* For remain_after_exit services, let's see if we can "release" the
879 * hold on the console, since unit_notify() only does that in case of
881 if (state
== SERVICE_EXITED
&&
882 s
->remain_after_exit
&&
883 UNIT(s
)->manager
->n_on_console
> 0) {
887 ec
= unit_get_exec_context(UNIT(s
));
888 if (ec
&& exec_context_may_touch_console(ec
)) {
889 Manager
*m
= UNIT(s
)->manager
;
892 if (m
->n_on_console
== 0)
893 /* unset no_console_output flag, since the console is free */
894 m
->no_console_output
= false;
898 if (old_state
!= state
)
899 log_unit_debug(UNIT(s
), "Changed %s -> %s", service_state_to_string(old_state
), service_state_to_string(state
));
901 unit_notify(UNIT(s
), table
[old_state
], table
[state
], s
->reload_result
== SERVICE_SUCCESS
);
904 static int service_coldplug(Unit
*u
) {
905 Service
*s
= SERVICE(u
);
909 assert(s
->state
== SERVICE_DEAD
);
911 if (s
->deserialized_state
!= s
->state
) {
913 if (IN_SET(s
->deserialized_state
,
914 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
916 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
917 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
921 k
= IN_SET(s
->deserialized_state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RELOAD
) ? s
->timeout_start_usec
: s
->timeout_stop_usec
;
923 /* For the start/stop timeouts 0 means off */
925 r
= service_arm_timer(s
, k
);
931 if (s
->deserialized_state
== SERVICE_AUTO_RESTART
) {
933 /* The restart timeouts 0 means immediately */
934 r
= service_arm_timer(s
, s
->restart_usec
);
939 if (pid_is_unwaited(s
->main_pid
) &&
940 ((s
->deserialized_state
== SERVICE_START
&& IN_SET(s
->type
, SERVICE_FORKING
, SERVICE_DBUS
, SERVICE_ONESHOT
, SERVICE_NOTIFY
)) ||
941 IN_SET(s
->deserialized_state
,
942 SERVICE_START
, SERVICE_START_POST
,
943 SERVICE_RUNNING
, SERVICE_RELOAD
,
944 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
945 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))) {
946 r
= unit_watch_pid(UNIT(s
), s
->main_pid
);
951 if (pid_is_unwaited(s
->control_pid
) &&
952 IN_SET(s
->deserialized_state
,
953 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
955 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
956 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
957 r
= unit_watch_pid(UNIT(s
), s
->control_pid
);
962 if (!IN_SET(s
->deserialized_state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
963 unit_watch_all_pids(UNIT(s
));
965 if (IN_SET(s
->deserialized_state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
966 service_start_watchdog(s
);
968 service_set_state(s
, s
->deserialized_state
);
974 static int service_collect_fds(Service
*s
, int **fds
, char ***fd_names
) {
975 _cleanup_strv_free_
char **rfd_names
= NULL
;
976 _cleanup_free_
int *rfds
= NULL
;
983 if (s
->socket_fd
>= 0) {
985 /* Pass the per-connection socket */
990 rfds
[0] = s
->socket_fd
;
992 rfd_names
= strv_new("connection", NULL
);
1001 /* Pass all our configured sockets for singleton services */
1003 SET_FOREACH(u
, UNIT(s
)->dependencies
[UNIT_TRIGGERED_BY
], i
) {
1004 _cleanup_free_
int *cfds
= NULL
;
1008 if (u
->type
!= UNIT_SOCKET
)
1013 cn_fds
= socket_collect_fds(sock
, &cfds
);
1028 t
= realloc(rfds
, (rn_fds
+ cn_fds
) * sizeof(int));
1032 memcpy(t
+ rn_fds
, cfds
, cn_fds
* sizeof(int));
1038 r
= strv_extend_n(&rfd_names
, socket_fdname(sock
), cn_fds
);
1044 if (s
->n_fd_store
> 0) {
1049 t
= realloc(rfds
, (rn_fds
+ s
->n_fd_store
) * sizeof(int));
1055 nl
= realloc(rfd_names
, (rn_fds
+ s
->n_fd_store
+ 1) * sizeof(char*));
1061 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
1062 rfds
[rn_fds
] = fs
->fd
;
1063 rfd_names
[rn_fds
] = strdup(strempty(fs
->fdname
));
1064 if (!rfd_names
[rn_fds
])
1070 rfd_names
[rn_fds
] = NULL
;
1074 *fd_names
= rfd_names
;
1082 static int service_spawn(
1087 bool apply_permissions
,
1089 bool apply_tty_stdin
,
1093 _cleanup_strv_free_
char **argv
= NULL
, **final_env
= NULL
, **our_env
= NULL
, **fd_names
= NULL
;
1094 _cleanup_free_
char *bus_endpoint_path
= NULL
;
1095 _cleanup_free_
int *fds
= NULL
;
1096 unsigned n_fds
= 0, n_env
= 0;
1100 ExecParameters exec_params
= {
1101 .apply_permissions
= apply_permissions
,
1102 .apply_chroot
= apply_chroot
,
1103 .apply_tty_stdin
= apply_tty_stdin
,
1104 .bus_endpoint_fd
= -1,
1116 (void) unit_realize_cgroup(UNIT(s
));
1117 if (s
->reset_cpu_usage
) {
1118 (void) unit_reset_cpu_usage(UNIT(s
));
1119 s
->reset_cpu_usage
= false;
1122 r
= unit_setup_exec_runtime(UNIT(s
));
1127 s
->exec_context
.std_input
== EXEC_INPUT_SOCKET
||
1128 s
->exec_context
.std_output
== EXEC_OUTPUT_SOCKET
||
1129 s
->exec_context
.std_error
== EXEC_OUTPUT_SOCKET
) {
1131 r
= service_collect_fds(s
, &fds
, &fd_names
);
1139 r
= service_arm_timer(s
, timeout
);
1143 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
1145 r
= unit_full_printf_strv(UNIT(s
), c
->argv
, &argv
);
1149 our_env
= new0(char*, 6);
1155 if (is_control
? s
->notify_access
== NOTIFY_ALL
: s
->notify_access
!= NOTIFY_NONE
)
1156 if (asprintf(our_env
+ n_env
++, "NOTIFY_SOCKET=%s", UNIT(s
)->manager
->notify_socket
) < 0) {
1161 if (s
->main_pid
> 0)
1162 if (asprintf(our_env
+ n_env
++, "MAINPID="PID_FMT
, s
->main_pid
) < 0) {
1167 if (UNIT(s
)->manager
->running_as
!= MANAGER_SYSTEM
)
1168 if (asprintf(our_env
+ n_env
++, "MANAGERPID="PID_FMT
, getpid()) < 0) {
1173 if (s
->socket_fd
>= 0) {
1174 union sockaddr_union sa
;
1175 socklen_t salen
= sizeof(sa
);
1177 r
= getpeername(s
->socket_fd
, &sa
.sa
, &salen
);
1183 if (IN_SET(sa
.sa
.sa_family
, AF_INET
, AF_INET6
)) {
1184 _cleanup_free_
char *addr
= NULL
;
1188 r
= sockaddr_pretty(&sa
.sa
, salen
, true, false, &addr
);
1192 t
= strappend("REMOTE_ADDR=", addr
);
1197 our_env
[n_env
++] = t
;
1199 port
= sockaddr_port(&sa
.sa
);
1205 if (asprintf(&t
, "REMOTE_PORT=%u", port
) < 0) {
1209 our_env
[n_env
++] = t
;
1213 final_env
= strv_env_merge(2, UNIT(s
)->manager
->environment
, our_env
, NULL
);
1219 if (is_control
&& UNIT(s
)->cgroup_path
) {
1220 path
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1221 (void) cg_create(SYSTEMD_CGROUP_CONTROLLER
, path
);
1223 path
= UNIT(s
)->cgroup_path
;
1225 if (s
->exec_context
.bus_endpoint
) {
1226 r
= bus_kernel_create_endpoint(UNIT(s
)->manager
->running_as
== MANAGER_SYSTEM
? "system" : "user",
1227 UNIT(s
)->id
, &bus_endpoint_path
);
1231 /* Pass the fd to the exec_params so that the child process can upload the policy.
1232 * Keep a reference to the fd in the service, so the endpoint is kept alive as long
1233 * as the service is running. */
1234 exec_params
.bus_endpoint_fd
= s
->bus_endpoint_fd
= r
;
1237 exec_params
.argv
= argv
;
1238 exec_params
.fds
= fds
;
1239 exec_params
.fd_names
= fd_names
;
1240 exec_params
.n_fds
= n_fds
;
1241 exec_params
.environment
= final_env
;
1242 exec_params
.confirm_spawn
= UNIT(s
)->manager
->confirm_spawn
;
1243 exec_params
.cgroup_supported
= UNIT(s
)->manager
->cgroup_supported
;
1244 exec_params
.cgroup_path
= path
;
1245 exec_params
.cgroup_delegate
= s
->cgroup_context
.delegate
;
1246 exec_params
.runtime_prefix
= manager_get_runtime_prefix(UNIT(s
)->manager
);
1247 exec_params
.watchdog_usec
= s
->watchdog_usec
;
1248 exec_params
.bus_endpoint_path
= bus_endpoint_path
;
1249 exec_params
.selinux_context_net
= s
->socket_fd_selinux_context_net
;
1250 if (s
->type
== SERVICE_IDLE
)
1251 exec_params
.idle_pipe
= UNIT(s
)->manager
->idle_pipe
;
1252 exec_params
.stdin_fd
= s
->stdin_fd
;
1253 exec_params
.stdout_fd
= s
->stdout_fd
;
1254 exec_params
.stderr_fd
= s
->stderr_fd
;
1256 r
= exec_spawn(UNIT(s
),
1265 r
= unit_watch_pid(UNIT(s
), pid
);
1267 /* FIXME: we need to do something here */
1276 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
1281 static int main_pid_good(Service
*s
) {
1284 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1287 /* If we know the pid file, then let's just check if it is
1289 if (s
->main_pid_known
) {
1291 /* If it's an alien child let's check if it is still
1293 if (s
->main_pid_alien
&& s
->main_pid
> 0)
1294 return pid_is_alive(s
->main_pid
);
1296 /* .. otherwise assume we'll get a SIGCHLD for it,
1297 * which we really should wait for to collect exit
1298 * status and code */
1299 return s
->main_pid
> 0;
1302 /* We don't know the pid */
1306 _pure_
static int control_pid_good(Service
*s
) {
1309 return s
->control_pid
> 0;
1312 static int cgroup_good(Service
*s
) {
1317 if (!UNIT(s
)->cgroup_path
)
1320 r
= cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER
, UNIT(s
)->cgroup_path
);
1327 static bool service_shall_restart(Service
*s
) {
1330 /* Don't restart after manual stops */
1331 if (s
->forbid_restart
)
1334 /* Never restart if this is configured as special exception */
1335 if (exit_status_set_test(&s
->restart_prevent_status
, s
->main_exec_status
.code
, s
->main_exec_status
.status
))
1338 /* Restart if the exit code/status are configured as restart triggers */
1339 if (exit_status_set_test(&s
->restart_force_status
, s
->main_exec_status
.code
, s
->main_exec_status
.status
))
1342 switch (s
->restart
) {
1344 case SERVICE_RESTART_NO
:
1347 case SERVICE_RESTART_ALWAYS
:
1350 case SERVICE_RESTART_ON_SUCCESS
:
1351 return s
->result
== SERVICE_SUCCESS
;
1353 case SERVICE_RESTART_ON_FAILURE
:
1354 return s
->result
!= SERVICE_SUCCESS
;
1356 case SERVICE_RESTART_ON_ABNORMAL
:
1357 return !IN_SET(s
->result
, SERVICE_SUCCESS
, SERVICE_FAILURE_EXIT_CODE
);
1359 case SERVICE_RESTART_ON_WATCHDOG
:
1360 return s
->result
== SERVICE_FAILURE_WATCHDOG
;
1362 case SERVICE_RESTART_ON_ABORT
:
1363 return IN_SET(s
->result
, SERVICE_FAILURE_SIGNAL
, SERVICE_FAILURE_CORE_DUMP
);
1366 assert_not_reached("unknown restart setting");
1370 static void service_enter_dead(Service
*s
, ServiceResult f
, bool allow_restart
) {
1374 if (f
!= SERVICE_SUCCESS
)
1377 service_set_state(s
, s
->result
!= SERVICE_SUCCESS
? SERVICE_FAILED
: SERVICE_DEAD
);
1379 if (s
->result
!= SERVICE_SUCCESS
) {
1380 log_unit_warning(UNIT(s
), "Failed with result '%s'.", service_result_to_string(s
->result
));
1381 failure_action(UNIT(s
)->manager
, s
->failure_action
, s
->reboot_arg
);
1384 if (allow_restart
&& service_shall_restart(s
)) {
1386 r
= service_arm_timer(s
, s
->restart_usec
);
1390 service_set_state(s
, SERVICE_AUTO_RESTART
);
1393 /* The next restart might not be a manual stop, hence reset the flag indicating manual stops */
1394 s
->forbid_restart
= false;
1396 /* We want fresh tmpdirs in case service is started again immediately */
1397 exec_runtime_destroy(s
->exec_runtime
);
1398 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
1400 /* Also, remove the runtime directory in */
1401 exec_context_destroy_runtime_directory(&s
->exec_context
, manager_get_runtime_prefix(UNIT(s
)->manager
));
1403 /* Try to delete the pid file. At this point it will be
1404 * out-of-date, and some software might be confused by it, so
1405 * let's remove it. */
1407 unlink_noerrno(s
->pid_file
);
1412 log_unit_warning_errno(UNIT(s
), r
, "Failed to run install restart timer: %m");
1413 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1416 static void service_enter_stop_post(Service
*s
, ServiceResult f
) {
1420 if (f
!= SERVICE_SUCCESS
)
1423 service_unwatch_control_pid(s
);
1424 unit_watch_all_pids(UNIT(s
));
1426 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP_POST
];
1427 if (s
->control_command
) {
1428 s
->control_command_id
= SERVICE_EXEC_STOP_POST
;
1430 r
= service_spawn(s
,
1432 s
->timeout_stop_usec
,
1434 !s
->permissions_start_only
,
1435 !s
->root_directory_start_only
,
1442 service_set_state(s
, SERVICE_STOP_POST
);
1444 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_SUCCESS
);
1449 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'stop-post' task: %m");
1450 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1453 static int state_to_kill_operation(ServiceState state
) {
1456 case SERVICE_STOP_SIGABRT
:
1459 case SERVICE_STOP_SIGTERM
:
1460 case SERVICE_FINAL_SIGTERM
:
1461 return KILL_TERMINATE
;
1463 case SERVICE_STOP_SIGKILL
:
1464 case SERVICE_FINAL_SIGKILL
:
1468 return _KILL_OPERATION_INVALID
;
1472 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
) {
1477 if (f
!= SERVICE_SUCCESS
)
1480 unit_watch_all_pids(UNIT(s
));
1482 r
= unit_kill_context(
1485 state_to_kill_operation(state
),
1494 if (s
->timeout_stop_usec
> 0) {
1495 r
= service_arm_timer(s
, s
->timeout_stop_usec
);
1500 service_set_state(s
, state
);
1501 } else if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
) && s
->kill_context
.send_sigkill
)
1502 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_SUCCESS
);
1503 else if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
))
1504 service_enter_stop_post(s
, SERVICE_SUCCESS
);
1505 else if (state
== SERVICE_FINAL_SIGTERM
&& s
->kill_context
.send_sigkill
)
1506 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_SUCCESS
);
1508 service_enter_dead(s
, SERVICE_SUCCESS
, true);
1513 log_unit_warning_errno(UNIT(s
), r
, "Failed to kill processes: %m");
1515 if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
))
1516 service_enter_stop_post(s
, SERVICE_FAILURE_RESOURCES
);
1518 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1521 static void service_enter_stop_by_notify(Service
*s
) {
1524 unit_watch_all_pids(UNIT(s
));
1526 if (s
->timeout_stop_usec
> 0)
1527 service_arm_timer(s
, s
->timeout_stop_usec
);
1529 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1530 service_set_state(s
, SERVICE_STOP_SIGTERM
);
1533 static void service_enter_stop(Service
*s
, ServiceResult f
) {
1538 if (f
!= SERVICE_SUCCESS
)
1541 service_unwatch_control_pid(s
);
1542 unit_watch_all_pids(UNIT(s
));
1544 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP
];
1545 if (s
->control_command
) {
1546 s
->control_command_id
= SERVICE_EXEC_STOP
;
1548 r
= service_spawn(s
,
1550 s
->timeout_stop_usec
,
1552 !s
->permissions_start_only
,
1553 !s
->root_directory_start_only
,
1560 service_set_state(s
, SERVICE_STOP
);
1562 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
1567 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'stop' task: %m");
1568 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1571 static bool service_good(Service
*s
) {
1575 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name_good
)
1578 main_pid_ok
= main_pid_good(s
);
1579 if (main_pid_ok
> 0) /* It's alive */
1581 if (main_pid_ok
== 0) /* It's dead */
1584 /* OK, we don't know anything about the main PID, maybe
1585 * because there is none. Let's check the control group
1588 return cgroup_good(s
) != 0;
1591 static void service_enter_running(Service
*s
, ServiceResult f
) {
1594 if (f
!= SERVICE_SUCCESS
)
1597 if (service_good(s
)) {
1599 /* If there are any queued up sd_notify()
1600 * notifications, process them now */
1601 if (s
->notify_state
== NOTIFY_RELOADING
)
1602 service_enter_reload_by_notify(s
);
1603 else if (s
->notify_state
== NOTIFY_STOPPING
)
1604 service_enter_stop_by_notify(s
);
1606 service_set_state(s
, SERVICE_RUNNING
);
1608 } else if (s
->remain_after_exit
)
1609 service_set_state(s
, SERVICE_EXITED
);
1611 service_enter_stop(s
, SERVICE_SUCCESS
);
1614 static void service_enter_start_post(Service
*s
) {
1618 service_unwatch_control_pid(s
);
1619 service_reset_watchdog(s
);
1621 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_POST
];
1622 if (s
->control_command
) {
1623 s
->control_command_id
= SERVICE_EXEC_START_POST
;
1625 r
= service_spawn(s
,
1627 s
->timeout_start_usec
,
1629 !s
->permissions_start_only
,
1630 !s
->root_directory_start_only
,
1637 service_set_state(s
, SERVICE_START_POST
);
1639 service_enter_running(s
, SERVICE_SUCCESS
);
1644 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start-post' task: %m");
1645 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1648 static void service_kill_control_processes(Service
*s
) {
1651 if (!UNIT(s
)->cgroup_path
)
1654 p
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1655 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, p
, SIGKILL
, true, true, true, NULL
);
1658 static void service_enter_start(Service
*s
) {
1665 service_unwatch_control_pid(s
);
1666 service_unwatch_main_pid(s
);
1668 /* We want to ensure that nobody leaks processes from
1669 * START_PRE here, so let's go on a killing spree, People
1670 * should not spawn long running processes from START_PRE. */
1671 service_kill_control_processes(s
);
1673 if (s
->type
== SERVICE_FORKING
) {
1674 s
->control_command_id
= SERVICE_EXEC_START
;
1675 c
= s
->control_command
= s
->exec_command
[SERVICE_EXEC_START
];
1677 s
->main_command
= NULL
;
1679 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
1680 s
->control_command
= NULL
;
1682 c
= s
->main_command
= s
->exec_command
[SERVICE_EXEC_START
];
1686 assert(s
->type
== SERVICE_ONESHOT
);
1687 service_enter_start_post(s
);
1691 r
= service_spawn(s
,
1693 IN_SET(s
->type
, SERVICE_FORKING
, SERVICE_DBUS
, SERVICE_NOTIFY
, SERVICE_ONESHOT
) ? s
->timeout_start_usec
: 0,
1703 if (s
->type
== SERVICE_SIMPLE
|| s
->type
== SERVICE_IDLE
) {
1704 /* For simple services we immediately start
1705 * the START_POST binaries. */
1707 service_set_main_pid(s
, pid
);
1708 service_enter_start_post(s
);
1710 } else if (s
->type
== SERVICE_FORKING
) {
1712 /* For forking services we wait until the start
1713 * process exited. */
1715 s
->control_pid
= pid
;
1716 service_set_state(s
, SERVICE_START
);
1718 } else if (s
->type
== SERVICE_ONESHOT
||
1719 s
->type
== SERVICE_DBUS
||
1720 s
->type
== SERVICE_NOTIFY
) {
1722 /* For oneshot services we wait until the start
1723 * process exited, too, but it is our main process. */
1725 /* For D-Bus services we know the main pid right away,
1726 * but wait for the bus name to appear on the
1727 * bus. Notify services are similar. */
1729 service_set_main_pid(s
, pid
);
1730 service_set_state(s
, SERVICE_START
);
1732 assert_not_reached("Unknown service type");
1737 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start' task: %m");
1738 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1741 static void service_enter_start_pre(Service
*s
) {
1746 service_unwatch_control_pid(s
);
1748 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_PRE
];
1749 if (s
->control_command
) {
1750 /* Before we start anything, let's clear up what might
1751 * be left from previous runs. */
1752 service_kill_control_processes(s
);
1754 s
->control_command_id
= SERVICE_EXEC_START_PRE
;
1756 r
= service_spawn(s
,
1758 s
->timeout_start_usec
,
1760 !s
->permissions_start_only
,
1761 !s
->root_directory_start_only
,
1768 service_set_state(s
, SERVICE_START_PRE
);
1770 service_enter_start(s
);
1775 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start-pre' task: %m");
1776 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1779 static void service_enter_restart(Service
*s
) {
1780 _cleanup_bus_error_free_ sd_bus_error error
= SD_BUS_ERROR_NULL
;
1785 if (UNIT(s
)->job
&& UNIT(s
)->job
->type
== JOB_STOP
) {
1786 /* Don't restart things if we are going down anyway */
1787 log_unit_info(UNIT(s
), "Stop job pending for unit, delaying automatic restart.");
1789 r
= service_arm_timer(s
, s
->restart_usec
);
1796 /* Any units that are bound to this service must also be
1797 * restarted. We use JOB_RESTART (instead of the more obvious
1798 * JOB_START) here so that those dependency jobs will be added
1800 r
= manager_add_job(UNIT(s
)->manager
, JOB_RESTART
, UNIT(s
), JOB_FAIL
, false, &error
, NULL
);
1804 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
1805 * it will be canceled as part of the service_stop() call that
1806 * is executed as part of JOB_RESTART. */
1808 log_unit_debug(UNIT(s
), "Scheduled restart job.");
1812 log_unit_warning(UNIT(s
), "Failed to schedule restart job: %s", bus_error_message(&error
, -r
));
1813 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1816 static void service_enter_reload_by_notify(Service
*s
) {
1819 if (s
->timeout_start_usec
> 0)
1820 service_arm_timer(s
, s
->timeout_start_usec
);
1822 service_set_state(s
, SERVICE_RELOAD
);
1825 static void service_enter_reload(Service
*s
) {
1830 service_unwatch_control_pid(s
);
1831 s
->reload_result
= SERVICE_SUCCESS
;
1833 s
->control_command
= s
->exec_command
[SERVICE_EXEC_RELOAD
];
1834 if (s
->control_command
) {
1835 s
->control_command_id
= SERVICE_EXEC_RELOAD
;
1837 r
= service_spawn(s
,
1839 s
->timeout_start_usec
,
1841 !s
->permissions_start_only
,
1842 !s
->root_directory_start_only
,
1849 service_set_state(s
, SERVICE_RELOAD
);
1851 service_enter_running(s
, SERVICE_SUCCESS
);
1856 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'reload' task: %m");
1857 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
1858 service_enter_running(s
, SERVICE_SUCCESS
);
1861 static void service_run_next_control(Service
*s
) {
1865 assert(s
->control_command
);
1866 assert(s
->control_command
->command_next
);
1868 assert(s
->control_command_id
!= SERVICE_EXEC_START
);
1870 s
->control_command
= s
->control_command
->command_next
;
1871 service_unwatch_control_pid(s
);
1873 r
= service_spawn(s
,
1875 IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
) ? s
->timeout_start_usec
: s
->timeout_stop_usec
,
1877 !s
->permissions_start_only
,
1878 !s
->root_directory_start_only
,
1879 s
->control_command_id
== SERVICE_EXEC_START_PRE
||
1880 s
->control_command_id
== SERVICE_EXEC_STOP_POST
,
1889 log_unit_warning_errno(UNIT(s
), r
, "Failed to run next control task: %m");
1891 if (s
->state
== SERVICE_START_PRE
)
1892 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1893 else if (s
->state
== SERVICE_STOP
)
1894 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1895 else if (s
->state
== SERVICE_STOP_POST
)
1896 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1897 else if (s
->state
== SERVICE_RELOAD
) {
1898 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
1899 service_enter_running(s
, SERVICE_SUCCESS
);
1901 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1904 static void service_run_next_main(Service
*s
) {
1909 assert(s
->main_command
);
1910 assert(s
->main_command
->command_next
);
1911 assert(s
->type
== SERVICE_ONESHOT
);
1913 s
->main_command
= s
->main_command
->command_next
;
1914 service_unwatch_main_pid(s
);
1916 r
= service_spawn(s
,
1918 s
->timeout_start_usec
,
1928 service_set_main_pid(s
, pid
);
1933 log_unit_warning_errno(UNIT(s
), r
, "Failed to run next main task: %m");
1934 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1937 static int service_start_limit_test(Service
*s
) {
1940 if (ratelimit_test(&s
->start_limit
))
1943 log_unit_warning(UNIT(s
), "Start request repeated too quickly.");
1945 return failure_action(UNIT(s
)->manager
, s
->start_limit_action
, s
->reboot_arg
);
1948 static int service_start(Unit
*u
) {
1949 Service
*s
= SERVICE(u
);
1954 /* We cannot fulfill this request right now, try again later
1956 if (IN_SET(s
->state
,
1957 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1958 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))
1961 /* Already on it! */
1962 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
))
1965 /* A service that will be restarted must be stopped first to
1966 * trigger BindsTo and/or OnFailure dependencies. If a user
1967 * does not want to wait for the holdoff time to elapse, the
1968 * service should be manually restarted, not started. We
1969 * simply return EAGAIN here, so that any start jobs stay
1970 * queued, and assume that the auto restart timer will
1971 * eventually trigger the restart. */
1972 if (s
->state
== SERVICE_AUTO_RESTART
)
1975 assert(IN_SET(s
->state
, SERVICE_DEAD
, SERVICE_FAILED
));
1977 /* Make sure we don't enter a busy loop of some kind. */
1978 r
= service_start_limit_test(s
);
1980 service_enter_dead(s
, SERVICE_FAILURE_START_LIMIT
, false);
1984 s
->result
= SERVICE_SUCCESS
;
1985 s
->reload_result
= SERVICE_SUCCESS
;
1986 s
->main_pid_known
= false;
1987 s
->main_pid_alien
= false;
1988 s
->forbid_restart
= false;
1989 s
->reset_cpu_usage
= true;
1991 s
->status_text
= mfree(s
->status_text
);
1992 s
->status_errno
= 0;
1994 s
->notify_state
= NOTIFY_UNKNOWN
;
1996 service_enter_start_pre(s
);
2000 static int service_stop(Unit
*u
) {
2001 Service
*s
= SERVICE(u
);
2005 /* Don't create restart jobs from manual stops. */
2006 s
->forbid_restart
= true;
2009 if (IN_SET(s
->state
,
2010 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
2011 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))
2014 /* A restart will be scheduled or is in progress. */
2015 if (s
->state
== SERVICE_AUTO_RESTART
) {
2016 service_set_state(s
, SERVICE_DEAD
);
2020 /* If there's already something running we go directly into
2022 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RELOAD
)) {
2023 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
2027 assert(IN_SET(s
->state
, SERVICE_RUNNING
, SERVICE_EXITED
));
2029 service_enter_stop(s
, SERVICE_SUCCESS
);
2033 static int service_reload(Unit
*u
) {
2034 Service
*s
= SERVICE(u
);
2038 assert(s
->state
== SERVICE_RUNNING
|| s
->state
== SERVICE_EXITED
);
2040 service_enter_reload(s
);
2044 _pure_
static bool service_can_reload(Unit
*u
) {
2045 Service
*s
= SERVICE(u
);
2049 return !!s
->exec_command
[SERVICE_EXEC_RELOAD
];
2052 static int service_serialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
2053 Service
*s
= SERVICE(u
);
2061 unit_serialize_item(u
, f
, "state", service_state_to_string(s
->state
));
2062 unit_serialize_item(u
, f
, "result", service_result_to_string(s
->result
));
2063 unit_serialize_item(u
, f
, "reload-result", service_result_to_string(s
->reload_result
));
2065 if (s
->control_pid
> 0)
2066 unit_serialize_item_format(u
, f
, "control-pid", PID_FMT
, s
->control_pid
);
2068 if (s
->main_pid_known
&& s
->main_pid
> 0)
2069 unit_serialize_item_format(u
, f
, "main-pid", PID_FMT
, s
->main_pid
);
2071 unit_serialize_item(u
, f
, "main-pid-known", yes_no(s
->main_pid_known
));
2072 unit_serialize_item(u
, f
, "bus-name-good", yes_no(s
->bus_name_good
));
2074 r
= unit_serialize_item_escaped(u
, f
, "status-text", s
->status_text
);
2078 /* FIXME: There's a minor uncleanliness here: if there are
2079 * multiple commands attached here, we will start from the
2080 * first one again */
2081 if (s
->control_command_id
>= 0)
2082 unit_serialize_item(u
, f
, "control-command", service_exec_command_to_string(s
->control_command_id
));
2084 r
= unit_serialize_item_fd(u
, f
, fds
, "stdin-fd", s
->stdin_fd
);
2087 r
= unit_serialize_item_fd(u
, f
, fds
, "stdout-fd", s
->stdout_fd
);
2090 r
= unit_serialize_item_fd(u
, f
, fds
, "stderr-fd", s
->stderr_fd
);
2094 r
= unit_serialize_item_fd(u
, f
, fds
, "socket-fd", s
->socket_fd
);
2097 r
= unit_serialize_item_fd(u
, f
, fds
, "endpoint-fd", s
->bus_endpoint_fd
);
2101 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
2102 _cleanup_free_
char *c
= NULL
;
2105 copy
= fdset_put_dup(fds
, fs
->fd
);
2109 c
= cescape(fs
->fdname
);
2111 unit_serialize_item_format(u
, f
, "fd-store-fd", "%i %s", copy
, strempty(c
));
2114 if (s
->main_exec_status
.pid
> 0) {
2115 unit_serialize_item_format(u
, f
, "main-exec-status-pid", PID_FMT
, s
->main_exec_status
.pid
);
2116 dual_timestamp_serialize(f
, "main-exec-status-start", &s
->main_exec_status
.start_timestamp
);
2117 dual_timestamp_serialize(f
, "main-exec-status-exit", &s
->main_exec_status
.exit_timestamp
);
2119 if (dual_timestamp_is_set(&s
->main_exec_status
.exit_timestamp
)) {
2120 unit_serialize_item_format(u
, f
, "main-exec-status-code", "%i", s
->main_exec_status
.code
);
2121 unit_serialize_item_format(u
, f
, "main-exec-status-status", "%i", s
->main_exec_status
.status
);
2125 if (dual_timestamp_is_set(&s
->watchdog_timestamp
))
2126 dual_timestamp_serialize(f
, "watchdog-timestamp", &s
->watchdog_timestamp
);
2128 unit_serialize_item(u
, f
, "forbid-restart", yes_no(s
->forbid_restart
));
2133 static int service_deserialize_item(Unit
*u
, const char *key
, const char *value
, FDSet
*fds
) {
2134 Service
*s
= SERVICE(u
);
2142 if (streq(key
, "state")) {
2145 state
= service_state_from_string(value
);
2147 log_unit_debug(u
, "Failed to parse state value: %s", value
);
2149 s
->deserialized_state
= state
;
2150 } else if (streq(key
, "result")) {
2153 f
= service_result_from_string(value
);
2155 log_unit_debug(u
, "Failed to parse result value: %s", value
);
2156 else if (f
!= SERVICE_SUCCESS
)
2159 } else if (streq(key
, "reload-result")) {
2162 f
= service_result_from_string(value
);
2164 log_unit_debug(u
, "Failed to parse reload result value: %s", value
);
2165 else if (f
!= SERVICE_SUCCESS
)
2166 s
->reload_result
= f
;
2168 } else if (streq(key
, "control-pid")) {
2171 if (parse_pid(value
, &pid
) < 0)
2172 log_unit_debug(u
, "Failed to parse control-pid value: %s", value
);
2174 s
->control_pid
= pid
;
2175 } else if (streq(key
, "main-pid")) {
2178 if (parse_pid(value
, &pid
) < 0)
2179 log_unit_debug(u
, "Failed to parse main-pid value: %s", value
);
2181 service_set_main_pid(s
, pid
);
2182 unit_watch_pid(UNIT(s
), pid
);
2184 } else if (streq(key
, "main-pid-known")) {
2187 b
= parse_boolean(value
);
2189 log_unit_debug(u
, "Failed to parse main-pid-known value: %s", value
);
2191 s
->main_pid_known
= b
;
2192 } else if (streq(key
, "bus-name-good")) {
2195 b
= parse_boolean(value
);
2197 log_unit_debug(u
, "Failed to parse bus-name-good value: %s", value
);
2199 s
->bus_name_good
= b
;
2200 } else if (streq(key
, "status-text")) {
2203 r
= cunescape(value
, 0, &t
);
2205 log_unit_debug_errno(u
, r
, "Failed to unescape status text: %s", value
);
2207 free(s
->status_text
);
2211 } else if (streq(key
, "control-command")) {
2212 ServiceExecCommand id
;
2214 id
= service_exec_command_from_string(value
);
2216 log_unit_debug(u
, "Failed to parse exec-command value: %s", value
);
2218 s
->control_command_id
= id
;
2219 s
->control_command
= s
->exec_command
[id
];
2221 } else if (streq(key
, "socket-fd")) {
2224 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2225 log_unit_debug(u
, "Failed to parse socket-fd value: %s", value
);
2227 asynchronous_close(s
->socket_fd
);
2228 s
->socket_fd
= fdset_remove(fds
, fd
);
2230 } else if (streq(key
, "endpoint-fd")) {
2233 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2234 log_unit_debug(u
, "Failed to parse endpoint-fd value: %s", value
);
2236 safe_close(s
->bus_endpoint_fd
);
2237 s
->bus_endpoint_fd
= fdset_remove(fds
, fd
);
2239 } else if (streq(key
, "fd-store-fd")) {
2244 pf
= strcspn(value
, WHITESPACE
);
2245 fdv
= strndupa(value
, pf
);
2247 if (safe_atoi(fdv
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2248 log_unit_debug(u
, "Failed to parse fd-store-fd value: %s", value
);
2250 _cleanup_free_
char *t
= NULL
;
2254 fdn
+= strspn(fdn
, WHITESPACE
);
2255 (void) cunescape(fdn
, 0, &t
);
2257 r
= service_add_fd_store(s
, fd
, t
);
2259 log_unit_error_errno(u
, r
, "Failed to add fd to store: %m");
2261 fdset_remove(fds
, fd
);
2264 } else if (streq(key
, "main-exec-status-pid")) {
2267 if (parse_pid(value
, &pid
) < 0)
2268 log_unit_debug(u
, "Failed to parse main-exec-status-pid value: %s", value
);
2270 s
->main_exec_status
.pid
= pid
;
2271 } else if (streq(key
, "main-exec-status-code")) {
2274 if (safe_atoi(value
, &i
) < 0)
2275 log_unit_debug(u
, "Failed to parse main-exec-status-code value: %s", value
);
2277 s
->main_exec_status
.code
= i
;
2278 } else if (streq(key
, "main-exec-status-status")) {
2281 if (safe_atoi(value
, &i
) < 0)
2282 log_unit_debug(u
, "Failed to parse main-exec-status-status value: %s", value
);
2284 s
->main_exec_status
.status
= i
;
2285 } else if (streq(key
, "main-exec-status-start"))
2286 dual_timestamp_deserialize(value
, &s
->main_exec_status
.start_timestamp
);
2287 else if (streq(key
, "main-exec-status-exit"))
2288 dual_timestamp_deserialize(value
, &s
->main_exec_status
.exit_timestamp
);
2289 else if (streq(key
, "watchdog-timestamp"))
2290 dual_timestamp_deserialize(value
, &s
->watchdog_timestamp
);
2291 else if (streq(key
, "forbid-restart")) {
2294 b
= parse_boolean(value
);
2296 log_unit_debug(u
, "Failed to parse forbid-restart value: %s", value
);
2298 s
->forbid_restart
= b
;
2299 } else if (streq(key
, "stdin-fd")) {
2302 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2303 log_unit_debug(u
, "Failed to parse stdin-fd value: %s", value
);
2305 asynchronous_close(s
->stdin_fd
);
2306 s
->stdin_fd
= fdset_remove(fds
, fd
);
2308 } else if (streq(key
, "stdout-fd")) {
2311 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2312 log_unit_debug(u
, "Failed to parse stdout-fd value: %s", value
);
2314 asynchronous_close(s
->stdout_fd
);
2315 s
->stdout_fd
= fdset_remove(fds
, fd
);
2317 } else if (streq(key
, "stderr-fd")) {
2320 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2321 log_unit_debug(u
, "Failed to parse stderr-fd value: %s", value
);
2323 asynchronous_close(s
->stderr_fd
);
2324 s
->stderr_fd
= fdset_remove(fds
, fd
);
2327 log_unit_debug(u
, "Unknown serialization key: %s", key
);
2332 _pure_
static UnitActiveState
service_active_state(Unit
*u
) {
2333 const UnitActiveState
*table
;
2337 table
= SERVICE(u
)->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
2339 return table
[SERVICE(u
)->state
];
2342 static const char *service_sub_state_to_string(Unit
*u
) {
2345 return service_state_to_string(SERVICE(u
)->state
);
2348 static bool service_check_gc(Unit
*u
) {
2349 Service
*s
= SERVICE(u
);
2353 /* Never clean up services that still have a process around,
2354 * even if the service is formally dead. */
2355 if (cgroup_good(s
) > 0 ||
2356 main_pid_good(s
) > 0 ||
2357 control_pid_good(s
) > 0)
2363 _pure_
static bool service_check_snapshot(Unit
*u
) {
2364 Service
*s
= SERVICE(u
);
2368 return s
->socket_fd
< 0;
2371 static int service_retry_pid_file(Service
*s
) {
2374 assert(s
->pid_file
);
2375 assert(s
->state
== SERVICE_START
|| s
->state
== SERVICE_START_POST
);
2377 r
= service_load_pid_file(s
, false);
2381 service_unwatch_pid_file(s
);
2383 service_enter_running(s
, SERVICE_SUCCESS
);
2387 static int service_watch_pid_file(Service
*s
) {
2390 log_unit_debug(UNIT(s
), "Setting watch for PID file %s", s
->pid_file_pathspec
->path
);
2392 r
= path_spec_watch(s
->pid_file_pathspec
, service_dispatch_io
);
2396 /* the pidfile might have appeared just before we set the watch */
2397 log_unit_debug(UNIT(s
), "Trying to read PID file %s in case it changed", s
->pid_file_pathspec
->path
);
2398 service_retry_pid_file(s
);
2402 log_unit_error_errno(UNIT(s
), r
, "Failed to set a watch for PID file %s: %m", s
->pid_file_pathspec
->path
);
2403 service_unwatch_pid_file(s
);
2407 static int service_demand_pid_file(Service
*s
) {
2410 assert(s
->pid_file
);
2411 assert(!s
->pid_file_pathspec
);
2413 ps
= new0(PathSpec
, 1);
2418 ps
->path
= strdup(s
->pid_file
);
2424 path_kill_slashes(ps
->path
);
2426 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2427 * keep their PID file open all the time. */
2428 ps
->type
= PATH_MODIFIED
;
2429 ps
->inotify_fd
= -1;
2431 s
->pid_file_pathspec
= ps
;
2433 return service_watch_pid_file(s
);
2436 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
) {
2437 PathSpec
*p
= userdata
;
2442 s
= SERVICE(p
->unit
);
2446 assert(s
->state
== SERVICE_START
|| s
->state
== SERVICE_START_POST
);
2447 assert(s
->pid_file_pathspec
);
2448 assert(path_spec_owns_inotify_fd(s
->pid_file_pathspec
, fd
));
2450 log_unit_debug(UNIT(s
), "inotify event");
2452 if (path_spec_fd_event(p
, events
) < 0)
2455 if (service_retry_pid_file(s
) == 0)
2458 if (service_watch_pid_file(s
) < 0)
2464 service_unwatch_pid_file(s
);
2465 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2469 static void service_notify_cgroup_empty_event(Unit
*u
) {
2470 Service
*s
= SERVICE(u
);
2474 log_unit_debug(u
, "cgroup is empty");
2478 /* Waiting for SIGCHLD is usually more interesting,
2479 * because it includes return codes/signals. Which is
2480 * why we ignore the cgroup events for most cases,
2481 * except when we don't know pid which to expect the
2485 case SERVICE_START_POST
:
2486 /* If we were hoping for the daemon to write its PID file,
2487 * we can give up now. */
2488 if (s
->pid_file_pathspec
) {
2489 log_unit_warning(u
, "Daemon never wrote its PID file. Failing.");
2491 service_unwatch_pid_file(s
);
2492 if (s
->state
== SERVICE_START
)
2493 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2495 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2499 case SERVICE_RUNNING
:
2500 /* service_enter_running() will figure out what to do */
2501 service_enter_running(s
, SERVICE_SUCCESS
);
2504 case SERVICE_STOP_SIGABRT
:
2505 case SERVICE_STOP_SIGTERM
:
2506 case SERVICE_STOP_SIGKILL
:
2508 if (main_pid_good(s
) <= 0 && !control_pid_good(s
))
2509 service_enter_stop_post(s
, SERVICE_SUCCESS
);
2513 case SERVICE_STOP_POST
:
2514 case SERVICE_FINAL_SIGTERM
:
2515 case SERVICE_FINAL_SIGKILL
:
2516 if (main_pid_good(s
) <= 0 && !control_pid_good(s
))
2517 service_enter_dead(s
, SERVICE_SUCCESS
, true);
2526 static void service_sigchld_event(Unit
*u
, pid_t pid
, int code
, int status
) {
2527 Service
*s
= SERVICE(u
);
2533 if (UNIT(s
)->fragment_path
? is_clean_exit(code
, status
, &s
->success_status
) :
2534 is_clean_exit_lsb(code
, status
, &s
->success_status
))
2535 f
= SERVICE_SUCCESS
;
2536 else if (code
== CLD_EXITED
)
2537 f
= SERVICE_FAILURE_EXIT_CODE
;
2538 else if (code
== CLD_KILLED
)
2539 f
= SERVICE_FAILURE_SIGNAL
;
2540 else if (code
== CLD_DUMPED
)
2541 f
= SERVICE_FAILURE_CORE_DUMP
;
2543 assert_not_reached("Unknown code");
2545 if (s
->main_pid
== pid
) {
2546 /* Forking services may occasionally move to a new PID.
2547 * As long as they update the PID file before exiting the old
2548 * PID, they're fine. */
2549 if (service_load_pid_file(s
, false) == 0)
2553 exec_status_exit(&s
->main_exec_status
, &s
->exec_context
, pid
, code
, status
);
2555 if (s
->main_command
) {
2556 /* If this is not a forking service than the
2557 * main process got started and hence we copy
2558 * the exit status so that it is recorded both
2559 * as main and as control process exit
2562 s
->main_command
->exec_status
= s
->main_exec_status
;
2564 if (s
->main_command
->ignore
)
2565 f
= SERVICE_SUCCESS
;
2566 } else if (s
->exec_command
[SERVICE_EXEC_START
]) {
2568 /* If this is a forked process, then we should
2569 * ignore the return value if this was
2570 * configured for the starter process */
2572 if (s
->exec_command
[SERVICE_EXEC_START
]->ignore
)
2573 f
= SERVICE_SUCCESS
;
2576 log_struct(f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
,
2578 LOG_UNIT_MESSAGE(u
, "Main process exited, code=%s, status=%i/%s",
2579 sigchld_code_to_string(code
), status
,
2580 strna(code
== CLD_EXITED
2581 ? exit_status_to_string(status
, EXIT_STATUS_FULL
)
2582 : signal_to_string(status
))),
2583 "EXIT_CODE=%s", sigchld_code_to_string(code
),
2584 "EXIT_STATUS=%i", status
,
2587 if (f
!= SERVICE_SUCCESS
)
2590 if (s
->main_command
&&
2591 s
->main_command
->command_next
&&
2592 f
== SERVICE_SUCCESS
) {
2594 /* There is another command to *
2595 * execute, so let's do that. */
2597 log_unit_debug(u
, "Running next main command for state %s.", service_state_to_string(s
->state
));
2598 service_run_next_main(s
);
2602 /* The service exited, so the service is officially
2604 s
->main_command
= NULL
;
2608 case SERVICE_START_POST
:
2609 case SERVICE_RELOAD
:
2611 /* Need to wait until the operation is
2616 if (s
->type
== SERVICE_ONESHOT
) {
2617 /* This was our main goal, so let's go on */
2618 if (f
== SERVICE_SUCCESS
)
2619 service_enter_start_post(s
);
2621 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2627 case SERVICE_RUNNING
:
2628 service_enter_running(s
, f
);
2631 case SERVICE_STOP_SIGABRT
:
2632 case SERVICE_STOP_SIGTERM
:
2633 case SERVICE_STOP_SIGKILL
:
2635 if (!control_pid_good(s
))
2636 service_enter_stop_post(s
, f
);
2638 /* If there is still a control process, wait for that first */
2641 case SERVICE_STOP_POST
:
2642 case SERVICE_FINAL_SIGTERM
:
2643 case SERVICE_FINAL_SIGKILL
:
2645 if (!control_pid_good(s
))
2646 service_enter_dead(s
, f
, true);
2650 assert_not_reached("Uh, main process died at wrong time.");
2654 } else if (s
->control_pid
== pid
) {
2657 if (s
->control_command
) {
2658 exec_status_exit(&s
->control_command
->exec_status
, &s
->exec_context
, pid
, code
, status
);
2660 if (s
->control_command
->ignore
)
2661 f
= SERVICE_SUCCESS
;
2664 log_unit_full(u
, f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
, 0,
2665 "Control process exited, code=%s status=%i",
2666 sigchld_code_to_string(code
), status
);
2668 if (f
!= SERVICE_SUCCESS
)
2671 /* Immediately get rid of the cgroup, so that the
2672 * kernel doesn't delay the cgroup empty messages for
2673 * the service cgroup any longer than necessary */
2674 service_kill_control_processes(s
);
2676 if (s
->control_command
&&
2677 s
->control_command
->command_next
&&
2678 f
== SERVICE_SUCCESS
) {
2680 /* There is another command to *
2681 * execute, so let's do that. */
2683 log_unit_debug(u
, "Running next control command for state %s.", service_state_to_string(s
->state
));
2684 service_run_next_control(s
);
2687 /* No further commands for this step, so let's
2688 * figure out what to do next */
2690 s
->control_command
= NULL
;
2691 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
2693 log_unit_debug(u
, "Got final SIGCHLD for state %s.", service_state_to_string(s
->state
));
2697 case SERVICE_START_PRE
:
2698 if (f
== SERVICE_SUCCESS
)
2699 service_enter_start(s
);
2701 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2705 if (s
->type
!= SERVICE_FORKING
)
2706 /* Maybe spurious event due to a reload that changed the type? */
2709 if (f
!= SERVICE_SUCCESS
) {
2710 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2715 bool has_start_post
;
2718 /* Let's try to load the pid file here if we can.
2719 * The PID file might actually be created by a START_POST
2720 * script. In that case don't worry if the loading fails. */
2722 has_start_post
= !!s
->exec_command
[SERVICE_EXEC_START_POST
];
2723 r
= service_load_pid_file(s
, !has_start_post
);
2724 if (!has_start_post
&& r
< 0) {
2725 r
= service_demand_pid_file(s
);
2726 if (r
< 0 || !cgroup_good(s
))
2727 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2731 (void) service_search_main_pid(s
);
2733 service_enter_start_post(s
);
2736 case SERVICE_START_POST
:
2737 if (f
!= SERVICE_SUCCESS
) {
2738 service_enter_stop(s
, f
);
2745 r
= service_load_pid_file(s
, true);
2747 r
= service_demand_pid_file(s
);
2748 if (r
< 0 || !cgroup_good(s
))
2749 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2753 (void) service_search_main_pid(s
);
2755 service_enter_running(s
, SERVICE_SUCCESS
);
2758 case SERVICE_RELOAD
:
2759 if (f
== SERVICE_SUCCESS
) {
2760 service_load_pid_file(s
, true);
2761 (void) service_search_main_pid(s
);
2764 s
->reload_result
= f
;
2765 service_enter_running(s
, SERVICE_SUCCESS
);
2769 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
2772 case SERVICE_STOP_SIGABRT
:
2773 case SERVICE_STOP_SIGTERM
:
2774 case SERVICE_STOP_SIGKILL
:
2775 if (main_pid_good(s
) <= 0)
2776 service_enter_stop_post(s
, f
);
2778 /* If there is still a service
2779 * process around, wait until
2780 * that one quit, too */
2783 case SERVICE_STOP_POST
:
2784 case SERVICE_FINAL_SIGTERM
:
2785 case SERVICE_FINAL_SIGKILL
:
2786 if (main_pid_good(s
) <= 0)
2787 service_enter_dead(s
, f
, true);
2791 assert_not_reached("Uh, control process died at wrong time.");
2796 /* Notify clients about changed exit status */
2797 unit_add_to_dbus_queue(u
);
2799 /* We got one SIGCHLD for the service, let's watch all
2800 * processes that are now running of the service, and watch
2801 * that. Among the PIDs we then watch will be children
2802 * reassigned to us, which hopefully allows us to identify
2803 * when all children are gone */
2804 unit_tidy_watch_pids(u
, s
->main_pid
, s
->control_pid
);
2805 unit_watch_all_pids(u
);
2807 /* If the PID set is empty now, then let's finish this off */
2808 if (set_isempty(u
->pids
))
2809 service_notify_cgroup_empty_event(u
);
2812 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
) {
2813 Service
*s
= SERVICE(userdata
);
2816 assert(source
== s
->timer_event_source
);
2820 case SERVICE_START_PRE
:
2822 log_unit_warning(UNIT(s
), "%s operation timed out. Terminating.", s
->state
== SERVICE_START
? "Start" : "Start-pre");
2823 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2826 case SERVICE_START_POST
:
2827 log_unit_warning(UNIT(s
), "Start-post operation timed out. Stopping.");
2828 service_enter_stop(s
, SERVICE_FAILURE_TIMEOUT
);
2831 case SERVICE_RELOAD
:
2832 log_unit_warning(UNIT(s
), "Reload operation timed out. Stopping.");
2833 service_unwatch_control_pid(s
);
2834 service_kill_control_processes(s
);
2835 s
->reload_result
= SERVICE_FAILURE_TIMEOUT
;
2836 service_enter_running(s
, SERVICE_SUCCESS
);
2840 log_unit_warning(UNIT(s
), "Stopping timed out. Terminating.");
2841 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2844 case SERVICE_STOP_SIGABRT
:
2845 log_unit_warning(UNIT(s
), "State 'stop-sigabrt' timed out. Terminating.");
2846 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2849 case SERVICE_STOP_SIGTERM
:
2850 if (s
->kill_context
.send_sigkill
) {
2851 log_unit_warning(UNIT(s
), "State 'stop-sigterm' timed out. Killing.");
2852 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
2854 log_unit_warning(UNIT(s
), "State 'stop-sigterm' timed out. Skipping SIGKILL.");
2855 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
2860 case SERVICE_STOP_SIGKILL
:
2861 /* Uh, we sent a SIGKILL and it is still not gone?
2862 * Must be something we cannot kill, so let's just be
2863 * weirded out and continue */
2865 log_unit_warning(UNIT(s
), "Processes still around after SIGKILL. Ignoring.");
2866 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
2869 case SERVICE_STOP_POST
:
2870 log_unit_warning(UNIT(s
), "State 'stop-post' timed out. Terminating.");
2871 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2874 case SERVICE_FINAL_SIGTERM
:
2875 if (s
->kill_context
.send_sigkill
) {
2876 log_unit_warning(UNIT(s
), "State 'stop-final-sigterm' timed out. Killing.");
2877 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
2879 log_unit_warning(UNIT(s
), "State 'stop-final-sigterm' timed out. Skipping SIGKILL. Entering failed mode.");
2880 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, false);
2885 case SERVICE_FINAL_SIGKILL
:
2886 log_unit_warning(UNIT(s
), "Processes still around after final SIGKILL. Entering failed mode.");
2887 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, true);
2890 case SERVICE_AUTO_RESTART
:
2891 log_unit_info(UNIT(s
),
2892 s
->restart_usec
> 0 ?
2893 "Service hold-off time over, scheduling restart." :
2894 "Service has no hold-off time, scheduling restart.");
2895 service_enter_restart(s
);
2899 assert_not_reached("Timeout at wrong time.");
2905 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
) {
2906 Service
*s
= SERVICE(userdata
);
2907 char t
[FORMAT_TIMESPAN_MAX
];
2910 assert(source
== s
->watchdog_event_source
);
2912 log_unit_error(UNIT(s
), "Watchdog timeout (limit %s)!",
2913 format_timespan(t
, sizeof(t
), s
->watchdog_usec
, 1));
2915 service_enter_signal(s
, SERVICE_STOP_SIGABRT
, SERVICE_FAILURE_WATCHDOG
);
2920 static void service_notify_message(Unit
*u
, pid_t pid
, char **tags
, FDSet
*fds
) {
2921 Service
*s
= SERVICE(u
);
2922 _cleanup_free_
char *cc
= NULL
;
2923 bool notify_dbus
= false;
2928 cc
= strv_join(tags
, ", ");
2930 if (s
->notify_access
== NOTIFY_NONE
) {
2931 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception is disabled.", pid
);
2933 } else if (s
->notify_access
== NOTIFY_MAIN
&& pid
!= s
->main_pid
) {
2934 if (s
->main_pid
!= 0)
2935 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for main PID "PID_FMT
, pid
, s
->main_pid
);
2937 log_unit_debug(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for main PID which is currently not known", pid
);
2940 log_unit_debug(u
, "Got notification message from PID "PID_FMT
" (%s)", pid
, isempty(cc
) ? "n/a" : cc
);
2942 /* Interpret MAINPID= */
2943 e
= strv_find_startswith(tags
, "MAINPID=");
2944 if (e
&& IN_SET(s
->state
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
)) {
2945 if (parse_pid(e
, &pid
) < 0)
2946 log_unit_warning(u
, "Failed to parse MAINPID= field in notification message: %s", e
);
2948 service_set_main_pid(s
, pid
);
2949 unit_watch_pid(UNIT(s
), pid
);
2954 /* Interpret RELOADING= */
2955 if (strv_find(tags
, "RELOADING=1")) {
2957 s
->notify_state
= NOTIFY_RELOADING
;
2959 if (s
->state
== SERVICE_RUNNING
)
2960 service_enter_reload_by_notify(s
);
2965 /* Interpret READY= */
2966 if (strv_find(tags
, "READY=1")) {
2968 s
->notify_state
= NOTIFY_READY
;
2970 /* Type=notify services inform us about completed
2971 * initialization with READY=1 */
2972 if (s
->type
== SERVICE_NOTIFY
&& s
->state
== SERVICE_START
)
2973 service_enter_start_post(s
);
2975 /* Sending READY=1 while we are reloading informs us
2976 * that the reloading is complete */
2977 if (s
->state
== SERVICE_RELOAD
&& s
->control_pid
== 0)
2978 service_enter_running(s
, SERVICE_SUCCESS
);
2983 /* Interpret STOPPING= */
2984 if (strv_find(tags
, "STOPPING=1")) {
2986 s
->notify_state
= NOTIFY_STOPPING
;
2988 if (s
->state
== SERVICE_RUNNING
)
2989 service_enter_stop_by_notify(s
);
2994 /* Interpret STATUS= */
2995 e
= strv_find_startswith(tags
, "STATUS=");
2997 _cleanup_free_
char *t
= NULL
;
3000 if (!utf8_is_valid(e
))
3001 log_unit_warning(u
, "Status message in notification message is not UTF-8 clean.");
3009 if (!streq_ptr(s
->status_text
, t
)) {
3011 free(s
->status_text
);
3019 /* Interpret ERRNO= */
3020 e
= strv_find_startswith(tags
, "ERRNO=");
3024 if (safe_atoi(e
, &status_errno
) < 0 || status_errno
< 0)
3025 log_unit_warning(u
, "Failed to parse ERRNO= field in notification message: %s", e
);
3027 if (s
->status_errno
!= status_errno
) {
3028 s
->status_errno
= status_errno
;
3034 /* Interpret WATCHDOG= */
3035 if (strv_find(tags
, "WATCHDOG=1"))
3036 service_reset_watchdog(s
);
3038 if (strv_find(tags
, "FDSTORE=1")) {
3041 name
= strv_find_startswith(tags
, "FDNAME=");
3042 if (name
&& !fdname_is_valid(name
)) {
3043 log_unit_warning(u
, "Passed FDNAME= name is invalid, ignoring.");
3047 service_add_fd_store_set(s
, fds
, name
);
3050 /* Notify clients about changed status or main pid */
3052 unit_add_to_dbus_queue(u
);
3055 static int service_get_timeout(Unit
*u
, uint64_t *timeout
) {
3056 Service
*s
= SERVICE(u
);
3059 if (!s
->timer_event_source
)
3062 r
= sd_event_source_get_time(s
->timer_event_source
, timeout
);
3069 static void service_bus_name_owner_change(
3072 const char *old_owner
,
3073 const char *new_owner
) {
3075 Service
*s
= SERVICE(u
);
3081 assert(streq(s
->bus_name
, name
));
3082 assert(old_owner
|| new_owner
);
3084 if (old_owner
&& new_owner
)
3085 log_unit_debug(u
, "D-Bus name %s changed owner from %s to %s", name
, old_owner
, new_owner
);
3087 log_unit_debug(u
, "D-Bus name %s no longer registered by %s", name
, old_owner
);
3089 log_unit_debug(u
, "D-Bus name %s now registered by %s", name
, new_owner
);
3091 s
->bus_name_good
= !!new_owner
;
3093 if (s
->type
== SERVICE_DBUS
) {
3095 /* service_enter_running() will figure out what to
3097 if (s
->state
== SERVICE_RUNNING
)
3098 service_enter_running(s
, SERVICE_SUCCESS
);
3099 else if (s
->state
== SERVICE_START
&& new_owner
)
3100 service_enter_start_post(s
);
3102 } else if (new_owner
&&
3104 (s
->state
== SERVICE_START
||
3105 s
->state
== SERVICE_START_POST
||
3106 s
->state
== SERVICE_RUNNING
||
3107 s
->state
== SERVICE_RELOAD
)) {
3109 _cleanup_bus_creds_unref_ sd_bus_creds
*creds
= NULL
;
3112 /* Try to acquire PID from bus service */
3114 r
= sd_bus_get_name_creds(u
->manager
->api_bus
, name
, SD_BUS_CREDS_PID
, &creds
);
3116 r
= sd_bus_creds_get_pid(creds
, &pid
);
3118 log_unit_debug(u
, "D-Bus name %s is now owned by process %u", name
, (unsigned) pid
);
3120 service_set_main_pid(s
, pid
);
3121 unit_watch_pid(UNIT(s
), pid
);
3126 int service_set_socket_fd(Service
*s
, int fd
, Socket
*sock
, bool selinux_context_net
) {
3127 _cleanup_free_
char *peer
= NULL
;
3133 /* This is called by the socket code when instantiating a new
3134 * service for a stream socket and the socket needs to be
3137 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
3140 if (s
->socket_fd
>= 0)
3143 if (s
->state
!= SERVICE_DEAD
)
3146 if (getpeername_pretty(fd
, &peer
) >= 0) {
3148 if (UNIT(s
)->description
) {
3149 _cleanup_free_
char *a
;
3151 a
= strjoin(UNIT(s
)->description
, " (", peer
, ")", NULL
);
3155 r
= unit_set_description(UNIT(s
), a
);
3157 r
= unit_set_description(UNIT(s
), peer
);
3164 s
->socket_fd_selinux_context_net
= selinux_context_net
;
3166 unit_ref_set(&s
->accept_socket
, UNIT(sock
));
3168 return unit_add_two_dependencies(UNIT(sock
), UNIT_BEFORE
, UNIT_TRIGGERS
, UNIT(s
), false);
3171 static void service_reset_failed(Unit
*u
) {
3172 Service
*s
= SERVICE(u
);
3176 if (s
->state
== SERVICE_FAILED
)
3177 service_set_state(s
, SERVICE_DEAD
);
3179 s
->result
= SERVICE_SUCCESS
;
3180 s
->reload_result
= SERVICE_SUCCESS
;
3182 RATELIMIT_RESET(s
->start_limit
);
3185 static int service_kill(Unit
*u
, KillWho who
, int signo
, sd_bus_error
*error
) {
3186 Service
*s
= SERVICE(u
);
3188 return unit_kill_common(u
, who
, signo
, s
->main_pid
, s
->control_pid
, error
);
3191 static const char* const service_restart_table
[_SERVICE_RESTART_MAX
] = {
3192 [SERVICE_RESTART_NO
] = "no",
3193 [SERVICE_RESTART_ON_SUCCESS
] = "on-success",
3194 [SERVICE_RESTART_ON_FAILURE
] = "on-failure",
3195 [SERVICE_RESTART_ON_ABNORMAL
] = "on-abnormal",
3196 [SERVICE_RESTART_ON_WATCHDOG
] = "on-watchdog",
3197 [SERVICE_RESTART_ON_ABORT
] = "on-abort",
3198 [SERVICE_RESTART_ALWAYS
] = "always",
3201 DEFINE_STRING_TABLE_LOOKUP(service_restart
, ServiceRestart
);
3203 static const char* const service_type_table
[_SERVICE_TYPE_MAX
] = {
3204 [SERVICE_SIMPLE
] = "simple",
3205 [SERVICE_FORKING
] = "forking",
3206 [SERVICE_ONESHOT
] = "oneshot",
3207 [SERVICE_DBUS
] = "dbus",
3208 [SERVICE_NOTIFY
] = "notify",
3209 [SERVICE_IDLE
] = "idle"
3212 DEFINE_STRING_TABLE_LOOKUP(service_type
, ServiceType
);
3214 static const char* const service_exec_command_table
[_SERVICE_EXEC_COMMAND_MAX
] = {
3215 [SERVICE_EXEC_START_PRE
] = "ExecStartPre",
3216 [SERVICE_EXEC_START
] = "ExecStart",
3217 [SERVICE_EXEC_START_POST
] = "ExecStartPost",
3218 [SERVICE_EXEC_RELOAD
] = "ExecReload",
3219 [SERVICE_EXEC_STOP
] = "ExecStop",
3220 [SERVICE_EXEC_STOP_POST
] = "ExecStopPost",
3223 DEFINE_STRING_TABLE_LOOKUP(service_exec_command
, ServiceExecCommand
);
3225 static const char* const notify_access_table
[_NOTIFY_ACCESS_MAX
] = {
3226 [NOTIFY_NONE
] = "none",
3227 [NOTIFY_MAIN
] = "main",
3228 [NOTIFY_ALL
] = "all"
3231 DEFINE_STRING_TABLE_LOOKUP(notify_access
, NotifyAccess
);
3233 static const char* const notify_state_table
[_NOTIFY_STATE_MAX
] = {
3234 [NOTIFY_UNKNOWN
] = "unknown",
3235 [NOTIFY_READY
] = "ready",
3236 [NOTIFY_RELOADING
] = "reloading",
3237 [NOTIFY_STOPPING
] = "stopping",
3240 DEFINE_STRING_TABLE_LOOKUP(notify_state
, NotifyState
);
3242 static const char* const service_result_table
[_SERVICE_RESULT_MAX
] = {
3243 [SERVICE_SUCCESS
] = "success",
3244 [SERVICE_FAILURE_RESOURCES
] = "resources",
3245 [SERVICE_FAILURE_TIMEOUT
] = "timeout",
3246 [SERVICE_FAILURE_EXIT_CODE
] = "exit-code",
3247 [SERVICE_FAILURE_SIGNAL
] = "signal",
3248 [SERVICE_FAILURE_CORE_DUMP
] = "core-dump",
3249 [SERVICE_FAILURE_WATCHDOG
] = "watchdog",
3250 [SERVICE_FAILURE_START_LIMIT
] = "start-limit"
3253 DEFINE_STRING_TABLE_LOOKUP(service_result
, ServiceResult
);
3255 const UnitVTable service_vtable
= {
3256 .object_size
= sizeof(Service
),
3257 .exec_context_offset
= offsetof(Service
, exec_context
),
3258 .cgroup_context_offset
= offsetof(Service
, cgroup_context
),
3259 .kill_context_offset
= offsetof(Service
, kill_context
),
3260 .exec_runtime_offset
= offsetof(Service
, exec_runtime
),
3266 .private_section
= "Service",
3268 .init
= service_init
,
3269 .done
= service_done
,
3270 .load
= service_load
,
3271 .release_resources
= service_release_resources
,
3273 .coldplug
= service_coldplug
,
3275 .dump
= service_dump
,
3277 .start
= service_start
,
3278 .stop
= service_stop
,
3279 .reload
= service_reload
,
3281 .can_reload
= service_can_reload
,
3283 .kill
= service_kill
,
3285 .serialize
= service_serialize
,
3286 .deserialize_item
= service_deserialize_item
,
3288 .active_state
= service_active_state
,
3289 .sub_state_to_string
= service_sub_state_to_string
,
3291 .check_gc
= service_check_gc
,
3292 .check_snapshot
= service_check_snapshot
,
3294 .sigchld_event
= service_sigchld_event
,
3296 .reset_failed
= service_reset_failed
,
3298 .notify_cgroup_empty
= service_notify_cgroup_empty_event
,
3299 .notify_message
= service_notify_message
,
3301 .bus_name_owner_change
= service_bus_name_owner_change
,
3303 .bus_vtable
= bus_service_vtable
,
3304 .bus_set_property
= bus_service_set_property
,
3305 .bus_commit_properties
= bus_service_commit_properties
,
3307 .get_timeout
= service_get_timeout
,
3308 .can_transient
= true,
3310 .status_message_formats
= {
3311 .starting_stopping
= {
3312 [0] = "Starting %s...",
3313 [1] = "Stopping %s...",
3315 .finished_start_job
= {
3316 [JOB_DONE
] = "Started %s.",
3317 [JOB_FAILED
] = "Failed to start %s.",
3319 .finished_stop_job
= {
3320 [JOB_DONE
] = "Stopped %s.",
3321 [JOB_FAILED
] = "Stopped (with error) %s.",