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/>.
30 #include "load-fragment.h"
31 #include "load-dropin.h"
34 #include "unit-name.h"
35 #include "unit-printf.h"
36 #include "dbus-service.h"
38 #include "exit-status.h"
40 #include "path-util.h"
45 #include "bus-error.h"
47 #include "bus-kernel.h"
48 #include "formats-util.h"
49 #include "process-util.h"
50 #include "signal-util.h"
52 static const UnitActiveState state_translation_table
[_SERVICE_STATE_MAX
] = {
53 [SERVICE_DEAD
] = UNIT_INACTIVE
,
54 [SERVICE_START_PRE
] = UNIT_ACTIVATING
,
55 [SERVICE_START
] = UNIT_ACTIVATING
,
56 [SERVICE_START_POST
] = UNIT_ACTIVATING
,
57 [SERVICE_RUNNING
] = UNIT_ACTIVE
,
58 [SERVICE_EXITED
] = UNIT_ACTIVE
,
59 [SERVICE_RELOAD
] = UNIT_RELOADING
,
60 [SERVICE_STOP
] = UNIT_DEACTIVATING
,
61 [SERVICE_STOP_SIGABRT
] = UNIT_DEACTIVATING
,
62 [SERVICE_STOP_SIGTERM
] = UNIT_DEACTIVATING
,
63 [SERVICE_STOP_SIGKILL
] = UNIT_DEACTIVATING
,
64 [SERVICE_STOP_POST
] = UNIT_DEACTIVATING
,
65 [SERVICE_FINAL_SIGTERM
] = UNIT_DEACTIVATING
,
66 [SERVICE_FINAL_SIGKILL
] = UNIT_DEACTIVATING
,
67 [SERVICE_FAILED
] = UNIT_FAILED
,
68 [SERVICE_AUTO_RESTART
] = UNIT_ACTIVATING
71 /* For Type=idle we never want to delay any other jobs, hence we
72 * consider idle jobs active as soon as we start working on them */
73 static const UnitActiveState state_translation_table_idle
[_SERVICE_STATE_MAX
] = {
74 [SERVICE_DEAD
] = UNIT_INACTIVE
,
75 [SERVICE_START_PRE
] = UNIT_ACTIVE
,
76 [SERVICE_START
] = UNIT_ACTIVE
,
77 [SERVICE_START_POST
] = UNIT_ACTIVE
,
78 [SERVICE_RUNNING
] = UNIT_ACTIVE
,
79 [SERVICE_EXITED
] = UNIT_ACTIVE
,
80 [SERVICE_RELOAD
] = UNIT_RELOADING
,
81 [SERVICE_STOP
] = UNIT_DEACTIVATING
,
82 [SERVICE_STOP_SIGABRT
] = UNIT_DEACTIVATING
,
83 [SERVICE_STOP_SIGTERM
] = UNIT_DEACTIVATING
,
84 [SERVICE_STOP_SIGKILL
] = UNIT_DEACTIVATING
,
85 [SERVICE_STOP_POST
] = UNIT_DEACTIVATING
,
86 [SERVICE_FINAL_SIGTERM
] = UNIT_DEACTIVATING
,
87 [SERVICE_FINAL_SIGKILL
] = UNIT_DEACTIVATING
,
88 [SERVICE_FAILED
] = UNIT_FAILED
,
89 [SERVICE_AUTO_RESTART
] = UNIT_ACTIVATING
92 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
);
93 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
);
94 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
);
96 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
);
97 static void service_enter_reload_by_notify(Service
*s
);
99 static void service_init(Unit
*u
) {
100 Service
*s
= SERVICE(u
);
103 assert(u
->load_state
== UNIT_STUB
);
105 s
->timeout_start_usec
= u
->manager
->default_timeout_start_usec
;
106 s
->timeout_stop_usec
= u
->manager
->default_timeout_stop_usec
;
107 s
->restart_usec
= u
->manager
->default_restart_usec
;
108 s
->type
= _SERVICE_TYPE_INVALID
;
110 s
->bus_endpoint_fd
= -1;
111 s
->guess_main_pid
= true;
113 RATELIMIT_INIT(s
->start_limit
, u
->manager
->default_start_limit_interval
, u
->manager
->default_start_limit_burst
);
115 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
118 static void service_unwatch_control_pid(Service
*s
) {
121 if (s
->control_pid
<= 0)
124 unit_unwatch_pid(UNIT(s
), s
->control_pid
);
128 static void service_unwatch_main_pid(Service
*s
) {
131 if (s
->main_pid
<= 0)
134 unit_unwatch_pid(UNIT(s
), s
->main_pid
);
138 static void service_unwatch_pid_file(Service
*s
) {
139 if (!s
->pid_file_pathspec
)
142 log_unit_debug(UNIT(s
), "Stopping watch for PID file %s", s
->pid_file_pathspec
->path
);
143 path_spec_unwatch(s
->pid_file_pathspec
);
144 path_spec_done(s
->pid_file_pathspec
);
145 s
->pid_file_pathspec
= mfree(s
->pid_file_pathspec
);
148 static int service_set_main_pid(Service
*s
, pid_t pid
) {
159 if (s
->main_pid
== pid
&& s
->main_pid_known
)
162 if (s
->main_pid
!= pid
) {
163 service_unwatch_main_pid(s
);
164 exec_status_start(&s
->main_exec_status
, pid
);
168 s
->main_pid_known
= true;
170 if (get_parent_of_pid(pid
, &ppid
) >= 0 && ppid
!= getpid()) {
171 log_unit_warning(UNIT(s
), "Supervising process "PID_FMT
" which is not our child. We'll most likely not notice when it exits.", pid
);
172 s
->main_pid_alien
= true;
174 s
->main_pid_alien
= false;
179 static void service_close_socket_fd(Service
*s
) {
182 s
->socket_fd
= asynchronous_close(s
->socket_fd
);
185 static void service_connection_unref(Service
*s
) {
188 if (!UNIT_ISSET(s
->accept_socket
))
191 socket_connection_unref(SOCKET(UNIT_DEREF(s
->accept_socket
)));
192 unit_ref_unset(&s
->accept_socket
);
195 static void service_stop_watchdog(Service
*s
) {
198 s
->watchdog_event_source
= sd_event_source_unref(s
->watchdog_event_source
);
199 s
->watchdog_timestamp
= DUAL_TIMESTAMP_NULL
;
202 static void service_start_watchdog(Service
*s
) {
207 if (s
->watchdog_usec
<= 0)
210 if (s
->watchdog_event_source
) {
211 r
= sd_event_source_set_time(s
->watchdog_event_source
, s
->watchdog_timestamp
.monotonic
+ s
->watchdog_usec
);
213 log_unit_warning_errno(UNIT(s
), r
, "Failed to reset watchdog timer: %m");
217 r
= sd_event_source_set_enabled(s
->watchdog_event_source
, SD_EVENT_ONESHOT
);
219 r
= sd_event_add_time(
220 UNIT(s
)->manager
->event
,
221 &s
->watchdog_event_source
,
223 s
->watchdog_timestamp
.monotonic
+ s
->watchdog_usec
, 0,
224 service_dispatch_watchdog
, s
);
226 log_unit_warning_errno(UNIT(s
), r
, "Failed to add watchdog timer: %m");
230 (void) sd_event_source_set_description(s
->watchdog_event_source
, "service-watchdog");
232 /* Let's process everything else which might be a sign
233 * of living before we consider a service died. */
234 r
= sd_event_source_set_priority(s
->watchdog_event_source
, SD_EVENT_PRIORITY_IDLE
);
238 log_unit_warning_errno(UNIT(s
), r
, "Failed to install watchdog timer: %m");
241 static void service_reset_watchdog(Service
*s
) {
244 dual_timestamp_get(&s
->watchdog_timestamp
);
245 service_start_watchdog(s
);
248 static void service_fd_store_unlink(ServiceFDStore
*fs
) {
254 assert(fs
->service
->n_fd_store
> 0);
255 LIST_REMOVE(fd_store
, fs
->service
->fd_store
, fs
);
256 fs
->service
->n_fd_store
--;
259 if (fs
->event_source
) {
260 sd_event_source_set_enabled(fs
->event_source
, SD_EVENT_OFF
);
261 sd_event_source_unref(fs
->event_source
);
268 static void service_release_resources(Unit
*u
) {
269 Service
*s
= SERVICE(u
);
276 log_unit_debug(u
, "Releasing all resources.");
279 service_fd_store_unlink(s
->fd_store
);
281 assert(s
->n_fd_store
== 0);
284 static void service_done(Unit
*u
) {
285 Service
*s
= SERVICE(u
);
289 s
->pid_file
= mfree(s
->pid_file
);
290 s
->status_text
= mfree(s
->status_text
);
291 s
->reboot_arg
= mfree(s
->reboot_arg
);
293 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
294 exec_command_free_array(s
->exec_command
, _SERVICE_EXEC_COMMAND_MAX
);
295 s
->control_command
= NULL
;
296 s
->main_command
= NULL
;
298 exit_status_set_free(&s
->restart_prevent_status
);
299 exit_status_set_free(&s
->restart_force_status
);
300 exit_status_set_free(&s
->success_status
);
302 /* This will leak a process, but at least no memory or any of
304 service_unwatch_main_pid(s
);
305 service_unwatch_control_pid(s
);
306 service_unwatch_pid_file(s
);
309 unit_unwatch_bus_name(u
, s
->bus_name
);
310 s
->bus_name
= mfree(s
->bus_name
);
313 s
->bus_endpoint_fd
= safe_close(s
->bus_endpoint_fd
);
314 service_close_socket_fd(s
);
315 service_connection_unref(s
);
317 unit_ref_unset(&s
->accept_socket
);
319 service_stop_watchdog(s
);
321 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
323 service_release_resources(u
);
326 static int on_fd_store_io(sd_event_source
*e
, int fd
, uint32_t revents
, void *userdata
) {
327 ServiceFDStore
*fs
= userdata
;
332 /* If we get either EPOLLHUP or EPOLLERR, it's time to remove this entry from the fd store */
333 service_fd_store_unlink(fs
);
337 static int service_add_fd_store(Service
*s
, int fd
) {
344 if (s
->n_fd_store
>= s
->n_fd_store_max
)
347 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
348 r
= same_fd(fs
->fd
, fd
);
352 /* Already included */
358 fs
= new0(ServiceFDStore
, 1);
365 r
= sd_event_add_io(UNIT(s
)->manager
->event
, &fs
->event_source
, fd
, 0, on_fd_store_io
, fs
);
371 (void) sd_event_source_set_description(fs
->event_source
, "service-fd-store");
373 LIST_PREPEND(fd_store
, s
->fd_store
, fs
);
379 static int service_add_fd_store_set(Service
*s
, FDSet
*fds
) {
384 if (fdset_size(fds
) <= 0)
387 while (s
->n_fd_store
< s
->n_fd_store_max
) {
388 _cleanup_close_
int fd
= -1;
390 fd
= fdset_steal_first(fds
);
394 r
= service_add_fd_store(s
, fd
);
396 return log_unit_error_errno(UNIT(s
), r
, "Couldn't add fd to fd store: %m");
398 log_unit_debug(UNIT(s
), "Added fd to fd store.");
403 if (fdset_size(fds
) > 0)
404 log_unit_warning(UNIT(s
), "Tried to store more fds than FDStoreMax=%u allows, closing remaining.", s
->n_fd_store_max
);
409 static int service_arm_timer(Service
*s
, usec_t usec
) {
414 if (s
->timer_event_source
) {
415 r
= sd_event_source_set_time(s
->timer_event_source
, now(CLOCK_MONOTONIC
) + usec
);
419 return sd_event_source_set_enabled(s
->timer_event_source
, SD_EVENT_ONESHOT
);
422 r
= sd_event_add_time(
423 UNIT(s
)->manager
->event
,
424 &s
->timer_event_source
,
426 now(CLOCK_MONOTONIC
) + usec
, 0,
427 service_dispatch_timer
, s
);
431 (void) sd_event_source_set_description(s
->timer_event_source
, "service-timer");
436 static int service_verify(Service
*s
) {
439 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
442 if (!s
->exec_command
[SERVICE_EXEC_START
] && !s
->exec_command
[SERVICE_EXEC_STOP
]) {
443 log_unit_error(UNIT(s
), "Service lacks both ExecStart= and ExecStop= setting. Refusing.");
447 if (s
->type
!= SERVICE_ONESHOT
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
448 log_unit_error(UNIT(s
), "Service has no ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
452 if (!s
->remain_after_exit
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
453 log_unit_error(UNIT(s
), "Service has no ExecStart= setting, which is only allowed for RemainAfterExit=yes services. Refusing.");
457 if (s
->type
!= SERVICE_ONESHOT
&& s
->exec_command
[SERVICE_EXEC_START
]->command_next
) {
458 log_unit_error(UNIT(s
), "Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
462 if (s
->type
== SERVICE_ONESHOT
&& s
->restart
!= SERVICE_RESTART_NO
) {
463 log_unit_error(UNIT(s
), "Service has Restart= setting other than no, which isn't allowed for Type=oneshot services. Refusing.");
467 if (s
->type
== SERVICE_ONESHOT
&& !exit_status_set_is_empty(&s
->restart_force_status
)) {
468 log_unit_error(UNIT(s
), "Service has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.");
472 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name
) {
473 log_unit_error(UNIT(s
), "Service is of type D-Bus but no D-Bus service name has been specified. Refusing.");
477 if (s
->bus_name
&& s
->type
!= SERVICE_DBUS
)
478 log_unit_warning(UNIT(s
), "Service has a D-Bus service name specified, but is not of type dbus. Ignoring.");
480 if (s
->exec_context
.pam_name
&& !(s
->kill_context
.kill_mode
== KILL_CONTROL_GROUP
|| s
->kill_context
.kill_mode
== KILL_MIXED
)) {
481 log_unit_error(UNIT(s
), "Service has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.");
485 if (s
->usb_function_descriptors
&& !s
->usb_function_strings
)
486 log_unit_warning(UNIT(s
), "Service has USBFunctionDescriptors= setting, but no USBFunctionStrings=. Ignoring.");
488 if (!s
->usb_function_descriptors
&& s
->usb_function_strings
)
489 log_unit_warning(UNIT(s
), "Service has USBFunctionStrings= setting, but no USBFunctionDescriptors=. Ignoring.");
494 static int service_add_default_dependencies(Service
*s
) {
499 /* Add a number of automatic dependencies useful for the
500 * majority of services. */
502 /* First, pull in base system */
503 r
= unit_add_two_dependencies_by_name(UNIT(s
), UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_BASIC_TARGET
, NULL
, true);
507 /* Second, activate normal shutdown */
508 return unit_add_two_dependencies_by_name(UNIT(s
), UNIT_BEFORE
, UNIT_CONFLICTS
, SPECIAL_SHUTDOWN_TARGET
, NULL
, true);
511 static void service_fix_output(Service
*s
) {
514 /* If nothing has been explicitly configured, patch default
515 * output in. If input is socket/tty we avoid this however,
516 * since in that case we want output to default to the same
517 * place as we read input from. */
519 if (s
->exec_context
.std_error
== EXEC_OUTPUT_INHERIT
&&
520 s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
521 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
522 s
->exec_context
.std_error
= UNIT(s
)->manager
->default_std_error
;
524 if (s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
525 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
526 s
->exec_context
.std_output
= UNIT(s
)->manager
->default_std_output
;
529 static int service_add_extras(Service
*s
) {
534 if (s
->type
== _SERVICE_TYPE_INVALID
) {
535 /* Figure out a type automatically */
537 s
->type
= SERVICE_DBUS
;
538 else if (s
->exec_command
[SERVICE_EXEC_START
])
539 s
->type
= SERVICE_SIMPLE
;
541 s
->type
= SERVICE_ONESHOT
;
544 /* Oneshot services have disabled start timeout by default */
545 if (s
->type
== SERVICE_ONESHOT
&& !s
->start_timeout_defined
)
546 s
->timeout_start_usec
= 0;
548 service_fix_output(s
);
550 r
= unit_patch_contexts(UNIT(s
));
554 r
= unit_add_exec_dependencies(UNIT(s
), &s
->exec_context
);
558 r
= unit_set_default_slice(UNIT(s
));
562 if (s
->type
== SERVICE_NOTIFY
&& s
->notify_access
== NOTIFY_NONE
)
563 s
->notify_access
= NOTIFY_MAIN
;
565 if (s
->watchdog_usec
> 0 && s
->notify_access
== NOTIFY_NONE
)
566 s
->notify_access
= NOTIFY_MAIN
;
571 n
= strjoina(s
->bus_name
, ".busname");
572 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_AFTER
, n
, NULL
, true);
576 r
= unit_watch_bus_name(UNIT(s
), s
->bus_name
);
578 return log_unit_error_errno(UNIT(s
), r
, "Two services allocated for the same bus name %s, refusing operation.", s
->bus_name
);
580 return log_unit_error_errno(UNIT(s
), r
, "Cannot watch bus name %s: %m", s
->bus_name
);
583 if (UNIT(s
)->default_dependencies
) {
584 r
= service_add_default_dependencies(s
);
592 static int service_load(Unit
*u
) {
593 Service
*s
= SERVICE(u
);
598 /* Load a .service file */
599 r
= unit_load_fragment(u
);
603 /* Still nothing found? Then let's give up */
604 if (u
->load_state
== UNIT_STUB
)
607 /* This is a new unit? Then let's add in some extras */
608 if (u
->load_state
== UNIT_LOADED
) {
610 /* We were able to load something, then let's add in
611 * the dropin directories. */
612 r
= unit_load_dropin(u
);
616 /* This is a new unit? Then let's add in some
618 r
= service_add_extras(s
);
623 return service_verify(s
);
626 static void service_dump(Unit
*u
, FILE *f
, const char *prefix
) {
627 ServiceExecCommand c
;
628 Service
*s
= SERVICE(u
);
633 prefix
= strempty(prefix
);
634 prefix2
= strjoina(prefix
, "\t");
637 "%sService State: %s\n"
639 "%sReload Result: %s\n"
640 "%sPermissionsStartOnly: %s\n"
641 "%sRootDirectoryStartOnly: %s\n"
642 "%sRemainAfterExit: %s\n"
643 "%sGuessMainPID: %s\n"
646 "%sNotifyAccess: %s\n"
647 "%sNotifyState: %s\n",
648 prefix
, service_state_to_string(s
->state
),
649 prefix
, service_result_to_string(s
->result
),
650 prefix
, service_result_to_string(s
->reload_result
),
651 prefix
, yes_no(s
->permissions_start_only
),
652 prefix
, yes_no(s
->root_directory_start_only
),
653 prefix
, yes_no(s
->remain_after_exit
),
654 prefix
, yes_no(s
->guess_main_pid
),
655 prefix
, service_type_to_string(s
->type
),
656 prefix
, service_restart_to_string(s
->restart
),
657 prefix
, notify_access_to_string(s
->notify_access
),
658 prefix
, notify_state_to_string(s
->notify_state
));
660 if (s
->control_pid
> 0)
662 "%sControl PID: "PID_FMT
"\n",
663 prefix
, s
->control_pid
);
667 "%sMain PID: "PID_FMT
"\n"
668 "%sMain PID Known: %s\n"
669 "%sMain PID Alien: %s\n",
671 prefix
, yes_no(s
->main_pid_known
),
672 prefix
, yes_no(s
->main_pid_alien
));
677 prefix
, s
->pid_file
);
682 "%sBus Name Good: %s\n",
684 prefix
, yes_no(s
->bus_name_good
));
686 kill_context_dump(&s
->kill_context
, f
, prefix
);
687 exec_context_dump(&s
->exec_context
, f
, prefix
);
689 for (c
= 0; c
< _SERVICE_EXEC_COMMAND_MAX
; c
++) {
691 if (!s
->exec_command
[c
])
694 fprintf(f
, "%s-> %s:\n",
695 prefix
, service_exec_command_to_string(c
));
697 exec_command_dump_list(s
->exec_command
[c
], f
, prefix2
);
701 fprintf(f
, "%sStatus Text: %s\n",
702 prefix
, s
->status_text
);
704 if (s
->n_fd_store_max
> 0)
706 "%sFile Descriptor Store Max: %u\n"
707 "%sFile Descriptor Store Current: %u\n",
708 prefix
, s
->n_fd_store_max
,
709 prefix
, s
->n_fd_store
);
712 static int service_load_pid_file(Service
*s
, bool may_warn
) {
713 _cleanup_free_
char *k
= NULL
;
722 r
= read_one_line_file(s
->pid_file
, &k
);
725 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
));
729 r
= parse_pid(k
, &pid
);
732 log_unit_info_errno(UNIT(s
), r
, "Failed to read PID from file %s: %m", s
->pid_file
);
736 if (!pid_is_alive(pid
)) {
738 log_unit_info(UNIT(s
), "PID "PID_FMT
" read from file %s does not exist or is a zombie.", pid
, s
->pid_file
);
742 if (s
->main_pid_known
) {
743 if (pid
== s
->main_pid
)
746 log_unit_debug(UNIT(s
), "Main PID changing: "PID_FMT
" -> "PID_FMT
, s
->main_pid
, pid
);
748 service_unwatch_main_pid(s
);
749 s
->main_pid_known
= false;
751 log_unit_debug(UNIT(s
), "Main PID loaded: "PID_FMT
, pid
);
753 r
= service_set_main_pid(s
, pid
);
757 r
= unit_watch_pid(UNIT(s
), pid
);
759 /* FIXME: we need to do something here */
760 log_unit_warning_errno(UNIT(s
), r
, "Failed to watch PID "PID_FMT
" for service: %m", pid
);
767 static int service_search_main_pid(Service
*s
) {
773 /* If we know it anyway, don't ever fallback to unreliable
775 if (s
->main_pid_known
)
778 if (!s
->guess_main_pid
)
781 assert(s
->main_pid
<= 0);
783 r
= unit_search_main_pid(UNIT(s
), &pid
);
787 log_unit_debug(UNIT(s
), "Main PID guessed: "PID_FMT
, pid
);
788 r
= service_set_main_pid(s
, pid
);
792 r
= unit_watch_pid(UNIT(s
), pid
);
794 /* FIXME: we need to do something here */
795 log_unit_warning_errno(UNIT(s
), r
, "Failed to watch PID "PID_FMT
" from: %m", pid
);
802 static void service_set_state(Service
*s
, ServiceState state
) {
803 ServiceState old_state
;
804 const UnitActiveState
*table
;
808 table
= s
->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
810 old_state
= s
->state
;
813 service_unwatch_pid_file(s
);
816 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
818 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
819 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
,
820 SERVICE_AUTO_RESTART
))
821 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
824 SERVICE_START
, SERVICE_START_POST
,
825 SERVICE_RUNNING
, SERVICE_RELOAD
,
826 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
827 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
828 service_unwatch_main_pid(s
);
829 s
->main_command
= NULL
;
833 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
835 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
836 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
837 service_unwatch_control_pid(s
);
838 s
->control_command
= NULL
;
839 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
842 if (IN_SET(state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
843 unit_unwatch_all_pids(UNIT(s
));
846 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
847 SERVICE_RUNNING
, SERVICE_RELOAD
,
848 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
849 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
) &&
850 !(state
== SERVICE_DEAD
&& UNIT(s
)->job
)) {
851 service_close_socket_fd(s
);
852 service_connection_unref(s
);
855 if (!IN_SET(state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
856 service_stop_watchdog(s
);
858 /* For the inactive states unit_notify() will trim the cgroup,
859 * but for exit we have to do that ourselves... */
860 if (state
== SERVICE_EXITED
&& UNIT(s
)->manager
->n_reloading
<= 0)
861 unit_prune_cgroup(UNIT(s
));
863 /* For remain_after_exit services, let's see if we can "release" the
864 * hold on the console, since unit_notify() only does that in case of
866 if (state
== SERVICE_EXITED
&&
867 s
->remain_after_exit
&&
868 UNIT(s
)->manager
->n_on_console
> 0) {
872 ec
= unit_get_exec_context(UNIT(s
));
873 if (ec
&& exec_context_may_touch_console(ec
)) {
874 Manager
*m
= UNIT(s
)->manager
;
877 if (m
->n_on_console
== 0)
878 /* unset no_console_output flag, since the console is free */
879 m
->no_console_output
= false;
883 if (old_state
!= state
)
884 log_unit_debug(UNIT(s
), "Changed %s -> %s", service_state_to_string(old_state
), service_state_to_string(state
));
886 unit_notify(UNIT(s
), table
[old_state
], table
[state
], s
->reload_result
== SERVICE_SUCCESS
);
889 static int service_coldplug(Unit
*u
) {
890 Service
*s
= SERVICE(u
);
894 assert(s
->state
== SERVICE_DEAD
);
896 if (s
->deserialized_state
!= s
->state
) {
898 if (IN_SET(s
->deserialized_state
,
899 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
901 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
902 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
906 k
= IN_SET(s
->deserialized_state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RELOAD
) ? s
->timeout_start_usec
: s
->timeout_stop_usec
;
908 /* For the start/stop timeouts 0 means off */
910 r
= service_arm_timer(s
, k
);
916 if (s
->deserialized_state
== SERVICE_AUTO_RESTART
) {
918 /* The restart timeouts 0 means immediately */
919 r
= service_arm_timer(s
, s
->restart_usec
);
924 if (pid_is_unwaited(s
->main_pid
) &&
925 ((s
->deserialized_state
== SERVICE_START
&& IN_SET(s
->type
, SERVICE_FORKING
, SERVICE_DBUS
, SERVICE_ONESHOT
, SERVICE_NOTIFY
)) ||
926 IN_SET(s
->deserialized_state
,
927 SERVICE_START
, SERVICE_START_POST
,
928 SERVICE_RUNNING
, SERVICE_RELOAD
,
929 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
930 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))) {
931 r
= unit_watch_pid(UNIT(s
), s
->main_pid
);
936 if (pid_is_unwaited(s
->control_pid
) &&
937 IN_SET(s
->deserialized_state
,
938 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
940 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
941 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
942 r
= unit_watch_pid(UNIT(s
), s
->control_pid
);
947 if (!IN_SET(s
->deserialized_state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
948 unit_watch_all_pids(UNIT(s
));
950 if (IN_SET(s
->deserialized_state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
951 service_start_watchdog(s
);
953 service_set_state(s
, s
->deserialized_state
);
959 static int service_collect_fds(Service
*s
, int **fds
, unsigned *n_fds
) {
960 _cleanup_free_
int *rfds
= NULL
;
970 if (s
->socket_fd
>= 0)
973 SET_FOREACH(u
, UNIT(s
)->dependencies
[UNIT_TRIGGERED_BY
], i
) {
978 if (u
->type
!= UNIT_SOCKET
)
983 r
= socket_collect_fds(sock
, &cfds
, &cn_fds
);
998 t
= realloc(rfds
, (rn_fds
+ cn_fds
) * sizeof(int));
1004 memcpy(t
+ rn_fds
, cfds
, cn_fds
* sizeof(int));
1013 if (s
->n_fd_store
> 0) {
1017 t
= realloc(rfds
, (rn_fds
+ s
->n_fd_store
) * sizeof(int));
1022 LIST_FOREACH(fd_store
, fs
, s
->fd_store
)
1023 rfds
[rn_fds
++] = fs
->fd
;
1033 static int service_spawn(
1038 bool apply_permissions
,
1040 bool apply_tty_stdin
,
1047 _cleanup_free_
int *fdsbuf
= NULL
;
1048 unsigned n_fds
= 0, n_env
= 0;
1049 _cleanup_free_
char *bus_endpoint_path
= NULL
;
1050 _cleanup_strv_free_
char
1051 **argv
= NULL
, **final_env
= NULL
, **our_env
= NULL
;
1053 ExecParameters exec_params
= {
1054 .apply_permissions
= apply_permissions
,
1055 .apply_chroot
= apply_chroot
,
1056 .apply_tty_stdin
= apply_tty_stdin
,
1057 .bus_endpoint_fd
= -1,
1058 .selinux_context_net
= s
->socket_fd_selinux_context_net
1065 (void) unit_realize_cgroup(UNIT(s
));
1066 if (s
->reset_cpu_usage
) {
1067 (void) unit_reset_cpu_usage(UNIT(s
));
1068 s
->reset_cpu_usage
= false;
1071 r
= unit_setup_exec_runtime(UNIT(s
));
1076 s
->exec_context
.std_input
== EXEC_INPUT_SOCKET
||
1077 s
->exec_context
.std_output
== EXEC_OUTPUT_SOCKET
||
1078 s
->exec_context
.std_error
== EXEC_OUTPUT_SOCKET
) {
1080 if (s
->socket_fd
>= 0) {
1081 fds
= &s
->socket_fd
;
1084 r
= service_collect_fds(s
, &fdsbuf
, &n_fds
);
1093 r
= service_arm_timer(s
, timeout
);
1097 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
1099 r
= unit_full_printf_strv(UNIT(s
), c
->argv
, &argv
);
1103 our_env
= new0(char*, 6);
1109 if (is_control
? s
->notify_access
== NOTIFY_ALL
: s
->notify_access
!= NOTIFY_NONE
)
1110 if (asprintf(our_env
+ n_env
++, "NOTIFY_SOCKET=%s", UNIT(s
)->manager
->notify_socket
) < 0) {
1115 if (s
->main_pid
> 0)
1116 if (asprintf(our_env
+ n_env
++, "MAINPID="PID_FMT
, s
->main_pid
) < 0) {
1121 if (UNIT(s
)->manager
->running_as
!= MANAGER_SYSTEM
)
1122 if (asprintf(our_env
+ n_env
++, "MANAGERPID="PID_FMT
, getpid()) < 0) {
1127 if (UNIT_DEREF(s
->accept_socket
)) {
1128 union sockaddr_union sa
;
1129 socklen_t salen
= sizeof(sa
);
1131 r
= getpeername(s
->socket_fd
, &sa
.sa
, &salen
);
1137 if (IN_SET(sa
.sa
.sa_family
, AF_INET
, AF_INET6
)) {
1138 _cleanup_free_
char *addr
= NULL
;
1142 r
= sockaddr_pretty(&sa
.sa
, salen
, true, false, &addr
);
1146 t
= strappend("REMOTE_ADDR=", addr
);
1151 our_env
[n_env
++] = t
;
1153 port
= sockaddr_port(&sa
.sa
);
1159 if (asprintf(&t
, "REMOTE_PORT=%u", port
) < 0) {
1163 our_env
[n_env
++] = t
;
1167 final_env
= strv_env_merge(2, UNIT(s
)->manager
->environment
, our_env
, NULL
);
1173 if (is_control
&& UNIT(s
)->cgroup_path
) {
1174 path
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1175 cg_create(SYSTEMD_CGROUP_CONTROLLER
, path
);
1177 path
= UNIT(s
)->cgroup_path
;
1179 if (s
->exec_context
.bus_endpoint
) {
1180 r
= bus_kernel_create_endpoint(UNIT(s
)->manager
->running_as
== MANAGER_SYSTEM
? "system" : "user",
1181 UNIT(s
)->id
, &bus_endpoint_path
);
1185 /* Pass the fd to the exec_params so that the child process can upload the policy.
1186 * Keep a reference to the fd in the service, so the endpoint is kept alive as long
1187 * as the service is running. */
1188 exec_params
.bus_endpoint_fd
= s
->bus_endpoint_fd
= r
;
1191 exec_params
.argv
= argv
;
1192 exec_params
.fds
= fds
;
1193 exec_params
.n_fds
= n_fds
;
1194 exec_params
.environment
= final_env
;
1195 exec_params
.confirm_spawn
= UNIT(s
)->manager
->confirm_spawn
;
1196 exec_params
.cgroup_supported
= UNIT(s
)->manager
->cgroup_supported
;
1197 exec_params
.cgroup_path
= path
;
1198 exec_params
.cgroup_delegate
= s
->cgroup_context
.delegate
;
1199 exec_params
.runtime_prefix
= manager_get_runtime_prefix(UNIT(s
)->manager
);
1200 exec_params
.watchdog_usec
= s
->watchdog_usec
;
1201 exec_params
.bus_endpoint_path
= bus_endpoint_path
;
1202 if (s
->type
== SERVICE_IDLE
)
1203 exec_params
.idle_pipe
= UNIT(s
)->manager
->idle_pipe
;
1205 r
= exec_spawn(UNIT(s
),
1214 r
= unit_watch_pid(UNIT(s
), pid
);
1216 /* FIXME: we need to do something here */
1225 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
1230 static int main_pid_good(Service
*s
) {
1233 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1236 /* If we know the pid file, then let's just check if it is
1238 if (s
->main_pid_known
) {
1240 /* If it's an alien child let's check if it is still
1242 if (s
->main_pid_alien
&& s
->main_pid
> 0)
1243 return pid_is_alive(s
->main_pid
);
1245 /* .. otherwise assume we'll get a SIGCHLD for it,
1246 * which we really should wait for to collect exit
1247 * status and code */
1248 return s
->main_pid
> 0;
1251 /* We don't know the pid */
1255 _pure_
static int control_pid_good(Service
*s
) {
1258 return s
->control_pid
> 0;
1261 static int cgroup_good(Service
*s
) {
1266 if (!UNIT(s
)->cgroup_path
)
1269 r
= cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER
, UNIT(s
)->cgroup_path
);
1276 static bool service_shall_restart(Service
*s
) {
1279 /* Don't restart after manual stops */
1280 if (s
->forbid_restart
)
1283 /* Never restart if this is configured as special exception */
1284 if (exit_status_set_test(&s
->restart_prevent_status
, s
->main_exec_status
.code
, s
->main_exec_status
.status
))
1287 /* Restart if the exit code/status are configured as restart triggers */
1288 if (exit_status_set_test(&s
->restart_force_status
, s
->main_exec_status
.code
, s
->main_exec_status
.status
))
1291 switch (s
->restart
) {
1293 case SERVICE_RESTART_NO
:
1296 case SERVICE_RESTART_ALWAYS
:
1299 case SERVICE_RESTART_ON_SUCCESS
:
1300 return s
->result
== SERVICE_SUCCESS
;
1302 case SERVICE_RESTART_ON_FAILURE
:
1303 return s
->result
!= SERVICE_SUCCESS
;
1305 case SERVICE_RESTART_ON_ABNORMAL
:
1306 return !IN_SET(s
->result
, SERVICE_SUCCESS
, SERVICE_FAILURE_EXIT_CODE
);
1308 case SERVICE_RESTART_ON_WATCHDOG
:
1309 return s
->result
== SERVICE_FAILURE_WATCHDOG
;
1311 case SERVICE_RESTART_ON_ABORT
:
1312 return IN_SET(s
->result
, SERVICE_FAILURE_SIGNAL
, SERVICE_FAILURE_CORE_DUMP
);
1315 assert_not_reached("unknown restart setting");
1319 static void service_enter_dead(Service
*s
, ServiceResult f
, bool allow_restart
) {
1323 if (f
!= SERVICE_SUCCESS
)
1326 service_set_state(s
, s
->result
!= SERVICE_SUCCESS
? SERVICE_FAILED
: SERVICE_DEAD
);
1328 if (s
->result
!= SERVICE_SUCCESS
) {
1329 log_unit_warning(UNIT(s
), "Failed with result '%s'.", service_result_to_string(s
->result
));
1330 failure_action(UNIT(s
)->manager
, s
->failure_action
, s
->reboot_arg
);
1333 if (allow_restart
&& service_shall_restart(s
)) {
1335 r
= service_arm_timer(s
, s
->restart_usec
);
1339 service_set_state(s
, SERVICE_AUTO_RESTART
);
1342 /* The next restart might not be a manual stop, hence reset the flag indicating manual stops */
1343 s
->forbid_restart
= false;
1345 /* We want fresh tmpdirs in case service is started again immediately */
1346 exec_runtime_destroy(s
->exec_runtime
);
1347 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
1349 /* Also, remove the runtime directory in */
1350 exec_context_destroy_runtime_directory(&s
->exec_context
, manager_get_runtime_prefix(UNIT(s
)->manager
));
1352 /* Try to delete the pid file. At this point it will be
1353 * out-of-date, and some software might be confused by it, so
1354 * let's remove it. */
1356 unlink_noerrno(s
->pid_file
);
1361 log_unit_warning_errno(UNIT(s
), r
, "Failed to run install restart timer: %m");
1362 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1365 static void service_enter_stop_post(Service
*s
, ServiceResult f
) {
1369 if (f
!= SERVICE_SUCCESS
)
1372 service_unwatch_control_pid(s
);
1373 unit_watch_all_pids(UNIT(s
));
1375 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP_POST
];
1376 if (s
->control_command
) {
1377 s
->control_command_id
= SERVICE_EXEC_STOP_POST
;
1379 r
= service_spawn(s
,
1381 s
->timeout_stop_usec
,
1383 !s
->permissions_start_only
,
1384 !s
->root_directory_start_only
,
1391 service_set_state(s
, SERVICE_STOP_POST
);
1393 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_SUCCESS
);
1398 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'stop-post' task: %m");
1399 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1402 static int state_to_kill_operation(ServiceState state
) {
1405 case SERVICE_STOP_SIGABRT
:
1408 case SERVICE_STOP_SIGTERM
:
1409 case SERVICE_FINAL_SIGTERM
:
1410 return KILL_TERMINATE
;
1412 case SERVICE_STOP_SIGKILL
:
1413 case SERVICE_FINAL_SIGKILL
:
1417 return _KILL_OPERATION_INVALID
;
1421 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
) {
1426 if (f
!= SERVICE_SUCCESS
)
1429 unit_watch_all_pids(UNIT(s
));
1431 r
= unit_kill_context(
1434 state_to_kill_operation(state
),
1443 if (s
->timeout_stop_usec
> 0) {
1444 r
= service_arm_timer(s
, s
->timeout_stop_usec
);
1449 service_set_state(s
, state
);
1450 } else if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
) && s
->kill_context
.send_sigkill
)
1451 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_SUCCESS
);
1452 else if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
))
1453 service_enter_stop_post(s
, SERVICE_SUCCESS
);
1454 else if (state
== SERVICE_FINAL_SIGTERM
&& s
->kill_context
.send_sigkill
)
1455 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_SUCCESS
);
1457 service_enter_dead(s
, SERVICE_SUCCESS
, true);
1462 log_unit_warning_errno(UNIT(s
), r
, "Failed to kill processes: %m");
1464 if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
))
1465 service_enter_stop_post(s
, SERVICE_FAILURE_RESOURCES
);
1467 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1470 static void service_enter_stop_by_notify(Service
*s
) {
1473 unit_watch_all_pids(UNIT(s
));
1475 if (s
->timeout_stop_usec
> 0)
1476 service_arm_timer(s
, s
->timeout_stop_usec
);
1478 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1479 service_set_state(s
, SERVICE_STOP_SIGTERM
);
1482 static void service_enter_stop(Service
*s
, ServiceResult f
) {
1487 if (f
!= SERVICE_SUCCESS
)
1490 service_unwatch_control_pid(s
);
1491 unit_watch_all_pids(UNIT(s
));
1493 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP
];
1494 if (s
->control_command
) {
1495 s
->control_command_id
= SERVICE_EXEC_STOP
;
1497 r
= service_spawn(s
,
1499 s
->timeout_stop_usec
,
1501 !s
->permissions_start_only
,
1502 !s
->root_directory_start_only
,
1509 service_set_state(s
, SERVICE_STOP
);
1511 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
1516 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'stop' task: %m");
1517 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1520 static bool service_good(Service
*s
) {
1524 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name_good
)
1527 main_pid_ok
= main_pid_good(s
);
1528 if (main_pid_ok
> 0) /* It's alive */
1530 if (main_pid_ok
== 0) /* It's dead */
1533 /* OK, we don't know anything about the main PID, maybe
1534 * because there is none. Let's check the control group
1537 return cgroup_good(s
) != 0;
1540 static void service_enter_running(Service
*s
, ServiceResult f
) {
1543 if (f
!= SERVICE_SUCCESS
)
1546 if (service_good(s
)) {
1548 /* If there are any queued up sd_notify()
1549 * notifications, process them now */
1550 if (s
->notify_state
== NOTIFY_RELOADING
)
1551 service_enter_reload_by_notify(s
);
1552 else if (s
->notify_state
== NOTIFY_STOPPING
)
1553 service_enter_stop_by_notify(s
);
1555 service_set_state(s
, SERVICE_RUNNING
);
1557 } else if (s
->remain_after_exit
)
1558 service_set_state(s
, SERVICE_EXITED
);
1560 service_enter_stop(s
, SERVICE_SUCCESS
);
1563 static void service_enter_start_post(Service
*s
) {
1567 service_unwatch_control_pid(s
);
1568 service_reset_watchdog(s
);
1570 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_POST
];
1571 if (s
->control_command
) {
1572 s
->control_command_id
= SERVICE_EXEC_START_POST
;
1574 r
= service_spawn(s
,
1576 s
->timeout_start_usec
,
1578 !s
->permissions_start_only
,
1579 !s
->root_directory_start_only
,
1586 service_set_state(s
, SERVICE_START_POST
);
1588 service_enter_running(s
, SERVICE_SUCCESS
);
1593 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start-post' task: %m");
1594 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1597 static void service_kill_control_processes(Service
*s
) {
1600 if (!UNIT(s
)->cgroup_path
)
1603 p
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1604 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, p
, SIGKILL
, true, true, true, NULL
);
1607 static void service_enter_start(Service
*s
) {
1614 service_unwatch_control_pid(s
);
1615 service_unwatch_main_pid(s
);
1617 /* We want to ensure that nobody leaks processes from
1618 * START_PRE here, so let's go on a killing spree, People
1619 * should not spawn long running processes from START_PRE. */
1620 service_kill_control_processes(s
);
1622 if (s
->type
== SERVICE_FORKING
) {
1623 s
->control_command_id
= SERVICE_EXEC_START
;
1624 c
= s
->control_command
= s
->exec_command
[SERVICE_EXEC_START
];
1626 s
->main_command
= NULL
;
1628 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
1629 s
->control_command
= NULL
;
1631 c
= s
->main_command
= s
->exec_command
[SERVICE_EXEC_START
];
1635 assert(s
->type
== SERVICE_ONESHOT
);
1636 service_enter_start_post(s
);
1640 r
= service_spawn(s
,
1642 IN_SET(s
->type
, SERVICE_FORKING
, SERVICE_DBUS
, SERVICE_NOTIFY
, SERVICE_ONESHOT
) ? s
->timeout_start_usec
: 0,
1652 if (s
->type
== SERVICE_SIMPLE
|| s
->type
== SERVICE_IDLE
) {
1653 /* For simple services we immediately start
1654 * the START_POST binaries. */
1656 service_set_main_pid(s
, pid
);
1657 service_enter_start_post(s
);
1659 } else if (s
->type
== SERVICE_FORKING
) {
1661 /* For forking services we wait until the start
1662 * process exited. */
1664 s
->control_pid
= pid
;
1665 service_set_state(s
, SERVICE_START
);
1667 } else if (s
->type
== SERVICE_ONESHOT
||
1668 s
->type
== SERVICE_DBUS
||
1669 s
->type
== SERVICE_NOTIFY
) {
1671 /* For oneshot services we wait until the start
1672 * process exited, too, but it is our main process. */
1674 /* For D-Bus services we know the main pid right away,
1675 * but wait for the bus name to appear on the
1676 * bus. Notify services are similar. */
1678 service_set_main_pid(s
, pid
);
1679 service_set_state(s
, SERVICE_START
);
1681 assert_not_reached("Unknown service type");
1686 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start' task: %m");
1687 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1690 static void service_enter_start_pre(Service
*s
) {
1695 service_unwatch_control_pid(s
);
1697 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_PRE
];
1698 if (s
->control_command
) {
1699 /* Before we start anything, let's clear up what might
1700 * be left from previous runs. */
1701 service_kill_control_processes(s
);
1703 s
->control_command_id
= SERVICE_EXEC_START_PRE
;
1705 r
= service_spawn(s
,
1707 s
->timeout_start_usec
,
1709 !s
->permissions_start_only
,
1710 !s
->root_directory_start_only
,
1717 service_set_state(s
, SERVICE_START_PRE
);
1719 service_enter_start(s
);
1724 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start-pre' task: %m");
1725 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1728 static void service_enter_restart(Service
*s
) {
1729 _cleanup_bus_error_free_ sd_bus_error error
= SD_BUS_ERROR_NULL
;
1734 if (UNIT(s
)->job
&& UNIT(s
)->job
->type
== JOB_STOP
) {
1735 /* Don't restart things if we are going down anyway */
1736 log_unit_info(UNIT(s
), "Stop job pending for unit, delaying automatic restart.");
1738 r
= service_arm_timer(s
, s
->restart_usec
);
1745 /* Any units that are bound to this service must also be
1746 * restarted. We use JOB_RESTART (instead of the more obvious
1747 * JOB_START) here so that those dependency jobs will be added
1749 r
= manager_add_job(UNIT(s
)->manager
, JOB_RESTART
, UNIT(s
), JOB_FAIL
, false, &error
, NULL
);
1753 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
1754 * it will be canceled as part of the service_stop() call that
1755 * is executed as part of JOB_RESTART. */
1757 log_unit_debug(UNIT(s
), "Scheduled restart job.");
1761 log_unit_warning(UNIT(s
), "Failed to schedule restart job: %s", bus_error_message(&error
, -r
));
1762 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1765 static void service_enter_reload_by_notify(Service
*s
) {
1768 if (s
->timeout_start_usec
> 0)
1769 service_arm_timer(s
, s
->timeout_start_usec
);
1771 service_set_state(s
, SERVICE_RELOAD
);
1774 static void service_enter_reload(Service
*s
) {
1779 service_unwatch_control_pid(s
);
1780 s
->reload_result
= SERVICE_SUCCESS
;
1782 s
->control_command
= s
->exec_command
[SERVICE_EXEC_RELOAD
];
1783 if (s
->control_command
) {
1784 s
->control_command_id
= SERVICE_EXEC_RELOAD
;
1786 r
= service_spawn(s
,
1788 s
->timeout_start_usec
,
1790 !s
->permissions_start_only
,
1791 !s
->root_directory_start_only
,
1798 service_set_state(s
, SERVICE_RELOAD
);
1800 service_enter_running(s
, SERVICE_SUCCESS
);
1805 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'reload' task: %m");
1806 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
1807 service_enter_running(s
, SERVICE_SUCCESS
);
1810 static void service_run_next_control(Service
*s
) {
1814 assert(s
->control_command
);
1815 assert(s
->control_command
->command_next
);
1817 assert(s
->control_command_id
!= SERVICE_EXEC_START
);
1819 s
->control_command
= s
->control_command
->command_next
;
1820 service_unwatch_control_pid(s
);
1822 r
= service_spawn(s
,
1824 IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
) ? s
->timeout_start_usec
: s
->timeout_stop_usec
,
1826 !s
->permissions_start_only
,
1827 !s
->root_directory_start_only
,
1828 s
->control_command_id
== SERVICE_EXEC_START_PRE
||
1829 s
->control_command_id
== SERVICE_EXEC_STOP_POST
,
1838 log_unit_warning_errno(UNIT(s
), r
, "Failed to run next control task: %m");
1840 if (s
->state
== SERVICE_START_PRE
)
1841 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1842 else if (s
->state
== SERVICE_STOP
)
1843 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1844 else if (s
->state
== SERVICE_STOP_POST
)
1845 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1846 else if (s
->state
== SERVICE_RELOAD
) {
1847 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
1848 service_enter_running(s
, SERVICE_SUCCESS
);
1850 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1853 static void service_run_next_main(Service
*s
) {
1858 assert(s
->main_command
);
1859 assert(s
->main_command
->command_next
);
1860 assert(s
->type
== SERVICE_ONESHOT
);
1862 s
->main_command
= s
->main_command
->command_next
;
1863 service_unwatch_main_pid(s
);
1865 r
= service_spawn(s
,
1867 s
->timeout_start_usec
,
1877 service_set_main_pid(s
, pid
);
1882 log_unit_warning_errno(UNIT(s
), r
, "Failed to run next main task: %m");
1883 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1886 static int service_start_limit_test(Service
*s
) {
1889 if (ratelimit_test(&s
->start_limit
))
1892 log_unit_warning(UNIT(s
), "Start request repeated too quickly.");
1894 return failure_action(UNIT(s
)->manager
, s
->start_limit_action
, s
->reboot_arg
);
1897 static int service_start(Unit
*u
) {
1898 Service
*s
= SERVICE(u
);
1903 /* We cannot fulfill this request right now, try again later
1905 if (IN_SET(s
->state
,
1906 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1907 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))
1910 /* Already on it! */
1911 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
))
1914 /* A service that will be restarted must be stopped first to
1915 * trigger BindsTo and/or OnFailure dependencies. If a user
1916 * does not want to wait for the holdoff time to elapse, the
1917 * service should be manually restarted, not started. We
1918 * simply return EAGAIN here, so that any start jobs stay
1919 * queued, and assume that the auto restart timer will
1920 * eventually trigger the restart. */
1921 if (s
->state
== SERVICE_AUTO_RESTART
)
1924 assert(IN_SET(s
->state
, SERVICE_DEAD
, SERVICE_FAILED
));
1926 /* Make sure we don't enter a busy loop of some kind. */
1927 r
= service_start_limit_test(s
);
1929 service_enter_dead(s
, SERVICE_FAILURE_START_LIMIT
, false);
1933 s
->result
= SERVICE_SUCCESS
;
1934 s
->reload_result
= SERVICE_SUCCESS
;
1935 s
->main_pid_known
= false;
1936 s
->main_pid_alien
= false;
1937 s
->forbid_restart
= false;
1938 s
->reset_cpu_usage
= true;
1940 s
->status_text
= mfree(s
->status_text
);
1941 s
->status_errno
= 0;
1943 s
->notify_state
= NOTIFY_UNKNOWN
;
1945 service_enter_start_pre(s
);
1949 static int service_stop(Unit
*u
) {
1950 Service
*s
= SERVICE(u
);
1954 /* Don't create restart jobs from manual stops. */
1955 s
->forbid_restart
= true;
1958 if (IN_SET(s
->state
,
1959 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1960 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))
1963 /* A restart will be scheduled or is in progress. */
1964 if (s
->state
== SERVICE_AUTO_RESTART
) {
1965 service_set_state(s
, SERVICE_DEAD
);
1969 /* If there's already something running we go directly into
1971 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RELOAD
)) {
1972 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
1976 assert(IN_SET(s
->state
, SERVICE_RUNNING
, SERVICE_EXITED
));
1978 service_enter_stop(s
, SERVICE_SUCCESS
);
1982 static int service_reload(Unit
*u
) {
1983 Service
*s
= SERVICE(u
);
1987 assert(s
->state
== SERVICE_RUNNING
|| s
->state
== SERVICE_EXITED
);
1989 service_enter_reload(s
);
1993 _pure_
static bool service_can_reload(Unit
*u
) {
1994 Service
*s
= SERVICE(u
);
1998 return !!s
->exec_command
[SERVICE_EXEC_RELOAD
];
2001 static int service_serialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
2002 Service
*s
= SERVICE(u
);
2009 unit_serialize_item(u
, f
, "state", service_state_to_string(s
->state
));
2010 unit_serialize_item(u
, f
, "result", service_result_to_string(s
->result
));
2011 unit_serialize_item(u
, f
, "reload-result", service_result_to_string(s
->reload_result
));
2013 if (s
->control_pid
> 0)
2014 unit_serialize_item_format(u
, f
, "control-pid", PID_FMT
, s
->control_pid
);
2016 if (s
->main_pid_known
&& s
->main_pid
> 0)
2017 unit_serialize_item_format(u
, f
, "main-pid", PID_FMT
, s
->main_pid
);
2019 unit_serialize_item(u
, f
, "main-pid-known", yes_no(s
->main_pid_known
));
2020 unit_serialize_item(u
, f
, "bus-name-good", yes_no(s
->bus_name_good
));
2022 if (s
->status_text
) {
2023 _cleanup_free_
char *c
= NULL
;
2025 c
= cescape(s
->status_text
);
2026 unit_serialize_item(u
, f
, "status-text", strempty(c
));
2029 /* FIXME: There's a minor uncleanliness here: if there are
2030 * multiple commands attached here, we will start from the
2031 * first one again */
2032 if (s
->control_command_id
>= 0)
2033 unit_serialize_item(u
, f
, "control-command", service_exec_command_to_string(s
->control_command_id
));
2035 if (s
->socket_fd
>= 0) {
2038 copy
= fdset_put_dup(fds
, s
->socket_fd
);
2042 unit_serialize_item_format(u
, f
, "socket-fd", "%i", copy
);
2045 if (s
->bus_endpoint_fd
>= 0) {
2048 copy
= fdset_put_dup(fds
, s
->bus_endpoint_fd
);
2052 unit_serialize_item_format(u
, f
, "endpoint-fd", "%i", copy
);
2055 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
2058 copy
= fdset_put_dup(fds
, fs
->fd
);
2062 unit_serialize_item_format(u
, f
, "fd-store-fd", "%i", copy
);
2065 if (s
->main_exec_status
.pid
> 0) {
2066 unit_serialize_item_format(u
, f
, "main-exec-status-pid", PID_FMT
, s
->main_exec_status
.pid
);
2067 dual_timestamp_serialize(f
, "main-exec-status-start", &s
->main_exec_status
.start_timestamp
);
2068 dual_timestamp_serialize(f
, "main-exec-status-exit", &s
->main_exec_status
.exit_timestamp
);
2070 if (dual_timestamp_is_set(&s
->main_exec_status
.exit_timestamp
)) {
2071 unit_serialize_item_format(u
, f
, "main-exec-status-code", "%i", s
->main_exec_status
.code
);
2072 unit_serialize_item_format(u
, f
, "main-exec-status-status", "%i", s
->main_exec_status
.status
);
2076 if (dual_timestamp_is_set(&s
->watchdog_timestamp
))
2077 dual_timestamp_serialize(f
, "watchdog-timestamp", &s
->watchdog_timestamp
);
2079 if (s
->forbid_restart
)
2080 unit_serialize_item(u
, f
, "forbid-restart", yes_no(s
->forbid_restart
));
2085 static int service_deserialize_item(Unit
*u
, const char *key
, const char *value
, FDSet
*fds
) {
2086 Service
*s
= SERVICE(u
);
2094 if (streq(key
, "state")) {
2097 state
= service_state_from_string(value
);
2099 log_unit_debug(u
, "Failed to parse state value: %s", value
);
2101 s
->deserialized_state
= state
;
2102 } else if (streq(key
, "result")) {
2105 f
= service_result_from_string(value
);
2107 log_unit_debug(u
, "Failed to parse result value: %s", value
);
2108 else if (f
!= SERVICE_SUCCESS
)
2111 } else if (streq(key
, "reload-result")) {
2114 f
= service_result_from_string(value
);
2116 log_unit_debug(u
, "Failed to parse reload result value: %s", value
);
2117 else if (f
!= SERVICE_SUCCESS
)
2118 s
->reload_result
= f
;
2120 } else if (streq(key
, "control-pid")) {
2123 if (parse_pid(value
, &pid
) < 0)
2124 log_unit_debug(u
, "Failed to parse control-pid value: %s", value
);
2126 s
->control_pid
= pid
;
2127 } else if (streq(key
, "main-pid")) {
2130 if (parse_pid(value
, &pid
) < 0)
2131 log_unit_debug(u
, "Failed to parse main-pid value: %s", value
);
2133 service_set_main_pid(s
, pid
);
2134 unit_watch_pid(UNIT(s
), pid
);
2136 } else if (streq(key
, "main-pid-known")) {
2139 b
= parse_boolean(value
);
2141 log_unit_debug(u
, "Failed to parse main-pid-known value: %s", value
);
2143 s
->main_pid_known
= b
;
2144 } else if (streq(key
, "bus-name-good")) {
2147 b
= parse_boolean(value
);
2149 log_unit_debug(u
, "Failed to parse bus-name-good value: %s", value
);
2151 s
->bus_name_good
= b
;
2152 } else if (streq(key
, "status-text")) {
2155 r
= cunescape(value
, 0, &t
);
2157 log_unit_debug_errno(u
, r
, "Failed to unescape status text: %s", value
);
2159 free(s
->status_text
);
2163 } else if (streq(key
, "control-command")) {
2164 ServiceExecCommand id
;
2166 id
= service_exec_command_from_string(value
);
2168 log_unit_debug(u
, "Failed to parse exec-command value: %s", value
);
2170 s
->control_command_id
= id
;
2171 s
->control_command
= s
->exec_command
[id
];
2173 } else if (streq(key
, "socket-fd")) {
2176 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2177 log_unit_debug(u
, "Failed to parse socket-fd value: %s", value
);
2179 asynchronous_close(s
->socket_fd
);
2180 s
->socket_fd
= fdset_remove(fds
, fd
);
2182 } else if (streq(key
, "endpoint-fd")) {
2185 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2186 log_unit_debug(u
, "Failed to parse endpoint-fd value: %s", value
);
2188 safe_close(s
->bus_endpoint_fd
);
2189 s
->bus_endpoint_fd
= fdset_remove(fds
, fd
);
2191 } else if (streq(key
, "fd-store-fd")) {
2194 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2195 log_unit_debug(u
, "Failed to parse fd-store-fd value: %s", value
);
2197 r
= service_add_fd_store(s
, fd
);
2199 log_unit_error_errno(u
, r
, "Failed to add fd to store: %m");
2201 fdset_remove(fds
, fd
);
2204 } else if (streq(key
, "main-exec-status-pid")) {
2207 if (parse_pid(value
, &pid
) < 0)
2208 log_unit_debug(u
, "Failed to parse main-exec-status-pid value: %s", value
);
2210 s
->main_exec_status
.pid
= pid
;
2211 } else if (streq(key
, "main-exec-status-code")) {
2214 if (safe_atoi(value
, &i
) < 0)
2215 log_unit_debug(u
, "Failed to parse main-exec-status-code value: %s", value
);
2217 s
->main_exec_status
.code
= i
;
2218 } else if (streq(key
, "main-exec-status-status")) {
2221 if (safe_atoi(value
, &i
) < 0)
2222 log_unit_debug(u
, "Failed to parse main-exec-status-status value: %s", value
);
2224 s
->main_exec_status
.status
= i
;
2225 } else if (streq(key
, "main-exec-status-start"))
2226 dual_timestamp_deserialize(value
, &s
->main_exec_status
.start_timestamp
);
2227 else if (streq(key
, "main-exec-status-exit"))
2228 dual_timestamp_deserialize(value
, &s
->main_exec_status
.exit_timestamp
);
2229 else if (streq(key
, "watchdog-timestamp"))
2230 dual_timestamp_deserialize(value
, &s
->watchdog_timestamp
);
2231 else if (streq(key
, "forbid-restart")) {
2234 b
= parse_boolean(value
);
2236 log_unit_debug(u
, "Failed to parse forbid-restart value: %s", value
);
2238 s
->forbid_restart
= b
;
2240 log_unit_debug(u
, "Unknown serialization key: %s", key
);
2245 _pure_
static UnitActiveState
service_active_state(Unit
*u
) {
2246 const UnitActiveState
*table
;
2250 table
= SERVICE(u
)->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
2252 return table
[SERVICE(u
)->state
];
2255 static const char *service_sub_state_to_string(Unit
*u
) {
2258 return service_state_to_string(SERVICE(u
)->state
);
2261 static bool service_check_gc(Unit
*u
) {
2262 Service
*s
= SERVICE(u
);
2266 /* Never clean up services that still have a process around,
2267 * even if the service is formally dead. */
2268 if (cgroup_good(s
) > 0 ||
2269 main_pid_good(s
) > 0 ||
2270 control_pid_good(s
) > 0)
2276 _pure_
static bool service_check_snapshot(Unit
*u
) {
2277 Service
*s
= SERVICE(u
);
2281 return s
->socket_fd
< 0;
2284 static int service_retry_pid_file(Service
*s
) {
2287 assert(s
->pid_file
);
2288 assert(s
->state
== SERVICE_START
|| s
->state
== SERVICE_START_POST
);
2290 r
= service_load_pid_file(s
, false);
2294 service_unwatch_pid_file(s
);
2296 service_enter_running(s
, SERVICE_SUCCESS
);
2300 static int service_watch_pid_file(Service
*s
) {
2303 log_unit_debug(UNIT(s
), "Setting watch for PID file %s", s
->pid_file_pathspec
->path
);
2305 r
= path_spec_watch(s
->pid_file_pathspec
, service_dispatch_io
);
2309 /* the pidfile might have appeared just before we set the watch */
2310 log_unit_debug(UNIT(s
), "Trying to read PID file %s in case it changed", s
->pid_file_pathspec
->path
);
2311 service_retry_pid_file(s
);
2315 log_unit_error_errno(UNIT(s
), r
, "Failed to set a watch for PID file %s: %m", s
->pid_file_pathspec
->path
);
2316 service_unwatch_pid_file(s
);
2320 static int service_demand_pid_file(Service
*s
) {
2323 assert(s
->pid_file
);
2324 assert(!s
->pid_file_pathspec
);
2326 ps
= new0(PathSpec
, 1);
2331 ps
->path
= strdup(s
->pid_file
);
2337 path_kill_slashes(ps
->path
);
2339 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2340 * keep their PID file open all the time. */
2341 ps
->type
= PATH_MODIFIED
;
2342 ps
->inotify_fd
= -1;
2344 s
->pid_file_pathspec
= ps
;
2346 return service_watch_pid_file(s
);
2349 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
) {
2350 PathSpec
*p
= userdata
;
2355 s
= SERVICE(p
->unit
);
2359 assert(s
->state
== SERVICE_START
|| s
->state
== SERVICE_START_POST
);
2360 assert(s
->pid_file_pathspec
);
2361 assert(path_spec_owns_inotify_fd(s
->pid_file_pathspec
, fd
));
2363 log_unit_debug(UNIT(s
), "inotify event");
2365 if (path_spec_fd_event(p
, events
) < 0)
2368 if (service_retry_pid_file(s
) == 0)
2371 if (service_watch_pid_file(s
) < 0)
2377 service_unwatch_pid_file(s
);
2378 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2382 static void service_notify_cgroup_empty_event(Unit
*u
) {
2383 Service
*s
= SERVICE(u
);
2387 log_unit_debug(u
, "cgroup is empty");
2391 /* Waiting for SIGCHLD is usually more interesting,
2392 * because it includes return codes/signals. Which is
2393 * why we ignore the cgroup events for most cases,
2394 * except when we don't know pid which to expect the
2398 case SERVICE_START_POST
:
2399 /* If we were hoping for the daemon to write its PID file,
2400 * we can give up now. */
2401 if (s
->pid_file_pathspec
) {
2402 log_unit_warning(u
, "Daemon never wrote its PID file. Failing.");
2404 service_unwatch_pid_file(s
);
2405 if (s
->state
== SERVICE_START
)
2406 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2408 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2412 case SERVICE_RUNNING
:
2413 /* service_enter_running() will figure out what to do */
2414 service_enter_running(s
, SERVICE_SUCCESS
);
2417 case SERVICE_STOP_SIGABRT
:
2418 case SERVICE_STOP_SIGTERM
:
2419 case SERVICE_STOP_SIGKILL
:
2421 if (main_pid_good(s
) <= 0 && !control_pid_good(s
))
2422 service_enter_stop_post(s
, SERVICE_SUCCESS
);
2426 case SERVICE_STOP_POST
:
2427 case SERVICE_FINAL_SIGTERM
:
2428 case SERVICE_FINAL_SIGKILL
:
2429 if (main_pid_good(s
) <= 0 && !control_pid_good(s
))
2430 service_enter_dead(s
, SERVICE_SUCCESS
, true);
2439 static void service_sigchld_event(Unit
*u
, pid_t pid
, int code
, int status
) {
2440 Service
*s
= SERVICE(u
);
2446 if (UNIT(s
)->fragment_path
? is_clean_exit(code
, status
, &s
->success_status
) :
2447 is_clean_exit_lsb(code
, status
, &s
->success_status
))
2448 f
= SERVICE_SUCCESS
;
2449 else if (code
== CLD_EXITED
)
2450 f
= SERVICE_FAILURE_EXIT_CODE
;
2451 else if (code
== CLD_KILLED
)
2452 f
= SERVICE_FAILURE_SIGNAL
;
2453 else if (code
== CLD_DUMPED
)
2454 f
= SERVICE_FAILURE_CORE_DUMP
;
2456 assert_not_reached("Unknown code");
2458 if (s
->main_pid
== pid
) {
2459 /* Forking services may occasionally move to a new PID.
2460 * As long as they update the PID file before exiting the old
2461 * PID, they're fine. */
2462 if (service_load_pid_file(s
, false) == 0)
2466 exec_status_exit(&s
->main_exec_status
, &s
->exec_context
, pid
, code
, status
);
2468 if (s
->main_command
) {
2469 /* If this is not a forking service than the
2470 * main process got started and hence we copy
2471 * the exit status so that it is recorded both
2472 * as main and as control process exit
2475 s
->main_command
->exec_status
= s
->main_exec_status
;
2477 if (s
->main_command
->ignore
)
2478 f
= SERVICE_SUCCESS
;
2479 } else if (s
->exec_command
[SERVICE_EXEC_START
]) {
2481 /* If this is a forked process, then we should
2482 * ignore the return value if this was
2483 * configured for the starter process */
2485 if (s
->exec_command
[SERVICE_EXEC_START
]->ignore
)
2486 f
= SERVICE_SUCCESS
;
2489 log_struct(f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
,
2491 LOG_UNIT_MESSAGE(u
, "Main process exited, code=%s, status=%i/%s",
2492 sigchld_code_to_string(code
), status
,
2493 strna(code
== CLD_EXITED
2494 ? exit_status_to_string(status
, EXIT_STATUS_FULL
)
2495 : signal_to_string(status
))),
2496 "EXIT_CODE=%s", sigchld_code_to_string(code
),
2497 "EXIT_STATUS=%i", status
,
2500 if (f
!= SERVICE_SUCCESS
)
2503 if (s
->main_command
&&
2504 s
->main_command
->command_next
&&
2505 f
== SERVICE_SUCCESS
) {
2507 /* There is another command to *
2508 * execute, so let's do that. */
2510 log_unit_debug(u
, "Running next main command for state %s.", service_state_to_string(s
->state
));
2511 service_run_next_main(s
);
2515 /* The service exited, so the service is officially
2517 s
->main_command
= NULL
;
2521 case SERVICE_START_POST
:
2522 case SERVICE_RELOAD
:
2524 /* Need to wait until the operation is
2529 if (s
->type
== SERVICE_ONESHOT
) {
2530 /* This was our main goal, so let's go on */
2531 if (f
== SERVICE_SUCCESS
)
2532 service_enter_start_post(s
);
2534 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2540 case SERVICE_RUNNING
:
2541 service_enter_running(s
, f
);
2544 case SERVICE_STOP_SIGABRT
:
2545 case SERVICE_STOP_SIGTERM
:
2546 case SERVICE_STOP_SIGKILL
:
2548 if (!control_pid_good(s
))
2549 service_enter_stop_post(s
, f
);
2551 /* If there is still a control process, wait for that first */
2554 case SERVICE_STOP_POST
:
2555 case SERVICE_FINAL_SIGTERM
:
2556 case SERVICE_FINAL_SIGKILL
:
2558 if (!control_pid_good(s
))
2559 service_enter_dead(s
, f
, true);
2563 assert_not_reached("Uh, main process died at wrong time.");
2567 } else if (s
->control_pid
== pid
) {
2570 if (s
->control_command
) {
2571 exec_status_exit(&s
->control_command
->exec_status
, &s
->exec_context
, pid
, code
, status
);
2573 if (s
->control_command
->ignore
)
2574 f
= SERVICE_SUCCESS
;
2577 log_unit_full(u
, f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
, 0,
2578 "Control process exited, code=%s status=%i",
2579 sigchld_code_to_string(code
), status
);
2581 if (f
!= SERVICE_SUCCESS
)
2584 /* Immediately get rid of the cgroup, so that the
2585 * kernel doesn't delay the cgroup empty messages for
2586 * the service cgroup any longer than necessary */
2587 service_kill_control_processes(s
);
2589 if (s
->control_command
&&
2590 s
->control_command
->command_next
&&
2591 f
== SERVICE_SUCCESS
) {
2593 /* There is another command to *
2594 * execute, so let's do that. */
2596 log_unit_debug(u
, "Running next control command for state %s.", service_state_to_string(s
->state
));
2597 service_run_next_control(s
);
2600 /* No further commands for this step, so let's
2601 * figure out what to do next */
2603 s
->control_command
= NULL
;
2604 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
2606 log_unit_debug(u
, "Got final SIGCHLD for state %s.", service_state_to_string(s
->state
));
2610 case SERVICE_START_PRE
:
2611 if (f
== SERVICE_SUCCESS
)
2612 service_enter_start(s
);
2614 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2618 if (s
->type
!= SERVICE_FORKING
)
2619 /* Maybe spurious event due to a reload that changed the type? */
2622 if (f
!= SERVICE_SUCCESS
) {
2623 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2628 bool has_start_post
;
2631 /* Let's try to load the pid file here if we can.
2632 * The PID file might actually be created by a START_POST
2633 * script. In that case don't worry if the loading fails. */
2635 has_start_post
= !!s
->exec_command
[SERVICE_EXEC_START_POST
];
2636 r
= service_load_pid_file(s
, !has_start_post
);
2637 if (!has_start_post
&& r
< 0) {
2638 r
= service_demand_pid_file(s
);
2639 if (r
< 0 || !cgroup_good(s
))
2640 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2644 (void) service_search_main_pid(s
);
2646 service_enter_start_post(s
);
2649 case SERVICE_START_POST
:
2650 if (f
!= SERVICE_SUCCESS
) {
2651 service_enter_stop(s
, f
);
2658 r
= service_load_pid_file(s
, true);
2660 r
= service_demand_pid_file(s
);
2661 if (r
< 0 || !cgroup_good(s
))
2662 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2666 (void) service_search_main_pid(s
);
2668 service_enter_running(s
, SERVICE_SUCCESS
);
2671 case SERVICE_RELOAD
:
2672 if (f
== SERVICE_SUCCESS
) {
2673 service_load_pid_file(s
, true);
2674 (void) service_search_main_pid(s
);
2677 s
->reload_result
= f
;
2678 service_enter_running(s
, SERVICE_SUCCESS
);
2682 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
2685 case SERVICE_STOP_SIGABRT
:
2686 case SERVICE_STOP_SIGTERM
:
2687 case SERVICE_STOP_SIGKILL
:
2688 if (main_pid_good(s
) <= 0)
2689 service_enter_stop_post(s
, f
);
2691 /* If there is still a service
2692 * process around, wait until
2693 * that one quit, too */
2696 case SERVICE_STOP_POST
:
2697 case SERVICE_FINAL_SIGTERM
:
2698 case SERVICE_FINAL_SIGKILL
:
2699 if (main_pid_good(s
) <= 0)
2700 service_enter_dead(s
, f
, true);
2704 assert_not_reached("Uh, control process died at wrong time.");
2709 /* Notify clients about changed exit status */
2710 unit_add_to_dbus_queue(u
);
2712 /* We got one SIGCHLD for the service, let's watch all
2713 * processes that are now running of the service, and watch
2714 * that. Among the PIDs we then watch will be children
2715 * reassigned to us, which hopefully allows us to identify
2716 * when all children are gone */
2717 unit_tidy_watch_pids(u
, s
->main_pid
, s
->control_pid
);
2718 unit_watch_all_pids(u
);
2720 /* If the PID set is empty now, then let's finish this off */
2721 if (set_isempty(u
->pids
))
2722 service_notify_cgroup_empty_event(u
);
2725 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
) {
2726 Service
*s
= SERVICE(userdata
);
2729 assert(source
== s
->timer_event_source
);
2733 case SERVICE_START_PRE
:
2735 log_unit_warning(UNIT(s
), "%s operation timed out. Terminating.", s
->state
== SERVICE_START
? "Start" : "Start-pre");
2736 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2739 case SERVICE_START_POST
:
2740 log_unit_warning(UNIT(s
), "Start-post operation timed out. Stopping.");
2741 service_enter_stop(s
, SERVICE_FAILURE_TIMEOUT
);
2744 case SERVICE_RELOAD
:
2745 log_unit_warning(UNIT(s
), "Reload operation timed out. Stopping.");
2746 service_unwatch_control_pid(s
);
2747 service_kill_control_processes(s
);
2748 s
->reload_result
= SERVICE_FAILURE_TIMEOUT
;
2749 service_enter_running(s
, SERVICE_SUCCESS
);
2753 log_unit_warning(UNIT(s
), "Stopping timed out. Terminating.");
2754 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2757 case SERVICE_STOP_SIGABRT
:
2758 log_unit_warning(UNIT(s
), "State 'stop-sigabrt' timed out. Terminating.");
2759 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2762 case SERVICE_STOP_SIGTERM
:
2763 if (s
->kill_context
.send_sigkill
) {
2764 log_unit_warning(UNIT(s
), "State 'stop-sigterm' timed out. Killing.");
2765 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
2767 log_unit_warning(UNIT(s
), "State 'stop-sigterm' timed out. Skipping SIGKILL.");
2768 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
2773 case SERVICE_STOP_SIGKILL
:
2774 /* Uh, we sent a SIGKILL and it is still not gone?
2775 * Must be something we cannot kill, so let's just be
2776 * weirded out and continue */
2778 log_unit_warning(UNIT(s
), "Processes still around after SIGKILL. Ignoring.");
2779 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
2782 case SERVICE_STOP_POST
:
2783 log_unit_warning(UNIT(s
), "State 'stop-post' timed out. Terminating.");
2784 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2787 case SERVICE_FINAL_SIGTERM
:
2788 if (s
->kill_context
.send_sigkill
) {
2789 log_unit_warning(UNIT(s
), "State 'stop-final-sigterm' timed out. Killing.");
2790 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
2792 log_unit_warning(UNIT(s
), "State 'stop-final-sigterm' timed out. Skipping SIGKILL. Entering failed mode.");
2793 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, false);
2798 case SERVICE_FINAL_SIGKILL
:
2799 log_unit_warning(UNIT(s
), "Processes still around after final SIGKILL. Entering failed mode.");
2800 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, true);
2803 case SERVICE_AUTO_RESTART
:
2804 log_unit_info(UNIT(s
),
2805 s
->restart_usec
> 0 ?
2806 "Service hold-off time over, scheduling restart." :
2807 "Service has no hold-off time, scheduling restart.");
2808 service_enter_restart(s
);
2812 assert_not_reached("Timeout at wrong time.");
2818 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
) {
2819 Service
*s
= SERVICE(userdata
);
2820 char t
[FORMAT_TIMESPAN_MAX
];
2823 assert(source
== s
->watchdog_event_source
);
2825 log_unit_error(UNIT(s
), "Watchdog timeout (limit %s)!",
2826 format_timespan(t
, sizeof(t
), s
->watchdog_usec
, 1));
2828 service_enter_signal(s
, SERVICE_STOP_SIGABRT
, SERVICE_FAILURE_WATCHDOG
);
2833 static void service_notify_message(Unit
*u
, pid_t pid
, char **tags
, FDSet
*fds
) {
2834 Service
*s
= SERVICE(u
);
2835 _cleanup_free_
char *cc
= NULL
;
2836 bool notify_dbus
= false;
2841 cc
= strv_join(tags
, ", ");
2843 if (s
->notify_access
== NOTIFY_NONE
) {
2844 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception is disabled.", pid
);
2846 } else if (s
->notify_access
== NOTIFY_MAIN
&& pid
!= s
->main_pid
) {
2847 if (s
->main_pid
!= 0)
2848 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for main PID "PID_FMT
, pid
, s
->main_pid
);
2850 log_unit_debug(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for main PID which is currently not known", pid
);
2853 log_unit_debug(u
, "Got notification message from PID "PID_FMT
" (%s)", pid
, isempty(cc
) ? "n/a" : cc
);
2855 /* Interpret MAINPID= */
2856 e
= strv_find_startswith(tags
, "MAINPID=");
2857 if (e
&& IN_SET(s
->state
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
)) {
2858 if (parse_pid(e
, &pid
) < 0)
2859 log_unit_warning(u
, "Failed to parse MAINPID= field in notification message: %s", e
);
2861 service_set_main_pid(s
, pid
);
2862 unit_watch_pid(UNIT(s
), pid
);
2867 /* Interpret RELOADING= */
2868 if (strv_find(tags
, "RELOADING=1")) {
2870 s
->notify_state
= NOTIFY_RELOADING
;
2872 if (s
->state
== SERVICE_RUNNING
)
2873 service_enter_reload_by_notify(s
);
2878 /* Interpret READY= */
2879 if (strv_find(tags
, "READY=1")) {
2881 s
->notify_state
= NOTIFY_READY
;
2883 /* Type=notify services inform us about completed
2884 * initialization with READY=1 */
2885 if (s
->type
== SERVICE_NOTIFY
&& s
->state
== SERVICE_START
)
2886 service_enter_start_post(s
);
2888 /* Sending READY=1 while we are reloading informs us
2889 * that the reloading is complete */
2890 if (s
->state
== SERVICE_RELOAD
&& s
->control_pid
== 0)
2891 service_enter_running(s
, SERVICE_SUCCESS
);
2896 /* Interpret STOPPING= */
2897 if (strv_find(tags
, "STOPPING=1")) {
2899 s
->notify_state
= NOTIFY_STOPPING
;
2901 if (s
->state
== SERVICE_RUNNING
)
2902 service_enter_stop_by_notify(s
);
2907 /* Interpret STATUS= */
2908 e
= strv_find_startswith(tags
, "STATUS=");
2910 _cleanup_free_
char *t
= NULL
;
2913 if (!utf8_is_valid(e
))
2914 log_unit_warning(u
, "Status message in notification message is not UTF-8 clean.");
2922 if (!streq_ptr(s
->status_text
, t
)) {
2924 free(s
->status_text
);
2932 /* Interpret ERRNO= */
2933 e
= strv_find_startswith(tags
, "ERRNO=");
2937 if (safe_atoi(e
, &status_errno
) < 0 || status_errno
< 0)
2938 log_unit_warning(u
, "Failed to parse ERRNO= field in notification message: %s", e
);
2940 if (s
->status_errno
!= status_errno
) {
2941 s
->status_errno
= status_errno
;
2947 /* Interpret WATCHDOG= */
2948 if (strv_find(tags
, "WATCHDOG=1"))
2949 service_reset_watchdog(s
);
2951 if (strv_find(tags
, "FDSTORE=1"))
2952 service_add_fd_store_set(s
, fds
);
2954 /* Notify clients about changed status or main pid */
2956 unit_add_to_dbus_queue(u
);
2959 static int service_get_timeout(Unit
*u
, uint64_t *timeout
) {
2960 Service
*s
= SERVICE(u
);
2963 if (!s
->timer_event_source
)
2966 r
= sd_event_source_get_time(s
->timer_event_source
, timeout
);
2973 static void service_bus_name_owner_change(
2976 const char *old_owner
,
2977 const char *new_owner
) {
2979 Service
*s
= SERVICE(u
);
2985 assert(streq(s
->bus_name
, name
));
2986 assert(old_owner
|| new_owner
);
2988 if (old_owner
&& new_owner
)
2989 log_unit_debug(u
, "D-Bus name %s changed owner from %s to %s", name
, old_owner
, new_owner
);
2991 log_unit_debug(u
, "D-Bus name %s no longer registered by %s", name
, old_owner
);
2993 log_unit_debug(u
, "D-Bus name %s now registered by %s", name
, new_owner
);
2995 s
->bus_name_good
= !!new_owner
;
2997 if (s
->type
== SERVICE_DBUS
) {
2999 /* service_enter_running() will figure out what to
3001 if (s
->state
== SERVICE_RUNNING
)
3002 service_enter_running(s
, SERVICE_SUCCESS
);
3003 else if (s
->state
== SERVICE_START
&& new_owner
)
3004 service_enter_start_post(s
);
3006 } else if (new_owner
&&
3008 (s
->state
== SERVICE_START
||
3009 s
->state
== SERVICE_START_POST
||
3010 s
->state
== SERVICE_RUNNING
||
3011 s
->state
== SERVICE_RELOAD
)) {
3013 _cleanup_bus_creds_unref_ sd_bus_creds
*creds
= NULL
;
3016 /* Try to acquire PID from bus service */
3018 r
= sd_bus_get_name_creds(u
->manager
->api_bus
, name
, SD_BUS_CREDS_PID
, &creds
);
3020 r
= sd_bus_creds_get_pid(creds
, &pid
);
3022 log_unit_debug(u
, "D-Bus name %s is now owned by process %u", name
, (unsigned) pid
);
3024 service_set_main_pid(s
, pid
);
3025 unit_watch_pid(UNIT(s
), pid
);
3030 int service_set_socket_fd(Service
*s
, int fd
, Socket
*sock
, bool selinux_context_net
) {
3031 _cleanup_free_
char *peer
= NULL
;
3037 /* This is called by the socket code when instantiating a new
3038 * service for a stream socket and the socket needs to be
3041 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
3044 if (s
->socket_fd
>= 0)
3047 if (s
->state
!= SERVICE_DEAD
)
3050 if (getpeername_pretty(fd
, &peer
) >= 0) {
3052 if (UNIT(s
)->description
) {
3053 _cleanup_free_
char *a
;
3055 a
= strjoin(UNIT(s
)->description
, " (", peer
, ")", NULL
);
3059 r
= unit_set_description(UNIT(s
), a
);
3061 r
= unit_set_description(UNIT(s
), peer
);
3068 s
->socket_fd_selinux_context_net
= selinux_context_net
;
3070 unit_ref_set(&s
->accept_socket
, UNIT(sock
));
3072 return unit_add_two_dependencies(UNIT(sock
), UNIT_BEFORE
, UNIT_TRIGGERS
, UNIT(s
), false);
3075 static void service_reset_failed(Unit
*u
) {
3076 Service
*s
= SERVICE(u
);
3080 if (s
->state
== SERVICE_FAILED
)
3081 service_set_state(s
, SERVICE_DEAD
);
3083 s
->result
= SERVICE_SUCCESS
;
3084 s
->reload_result
= SERVICE_SUCCESS
;
3086 RATELIMIT_RESET(s
->start_limit
);
3089 static int service_kill(Unit
*u
, KillWho who
, int signo
, sd_bus_error
*error
) {
3090 Service
*s
= SERVICE(u
);
3092 return unit_kill_common(u
, who
, signo
, s
->main_pid
, s
->control_pid
, error
);
3095 static const char* const service_restart_table
[_SERVICE_RESTART_MAX
] = {
3096 [SERVICE_RESTART_NO
] = "no",
3097 [SERVICE_RESTART_ON_SUCCESS
] = "on-success",
3098 [SERVICE_RESTART_ON_FAILURE
] = "on-failure",
3099 [SERVICE_RESTART_ON_ABNORMAL
] = "on-abnormal",
3100 [SERVICE_RESTART_ON_WATCHDOG
] = "on-watchdog",
3101 [SERVICE_RESTART_ON_ABORT
] = "on-abort",
3102 [SERVICE_RESTART_ALWAYS
] = "always",
3105 DEFINE_STRING_TABLE_LOOKUP(service_restart
, ServiceRestart
);
3107 static const char* const service_type_table
[_SERVICE_TYPE_MAX
] = {
3108 [SERVICE_SIMPLE
] = "simple",
3109 [SERVICE_FORKING
] = "forking",
3110 [SERVICE_ONESHOT
] = "oneshot",
3111 [SERVICE_DBUS
] = "dbus",
3112 [SERVICE_NOTIFY
] = "notify",
3113 [SERVICE_IDLE
] = "idle"
3116 DEFINE_STRING_TABLE_LOOKUP(service_type
, ServiceType
);
3118 static const char* const service_exec_command_table
[_SERVICE_EXEC_COMMAND_MAX
] = {
3119 [SERVICE_EXEC_START_PRE
] = "ExecStartPre",
3120 [SERVICE_EXEC_START
] = "ExecStart",
3121 [SERVICE_EXEC_START_POST
] = "ExecStartPost",
3122 [SERVICE_EXEC_RELOAD
] = "ExecReload",
3123 [SERVICE_EXEC_STOP
] = "ExecStop",
3124 [SERVICE_EXEC_STOP_POST
] = "ExecStopPost",
3127 DEFINE_STRING_TABLE_LOOKUP(service_exec_command
, ServiceExecCommand
);
3129 static const char* const notify_access_table
[_NOTIFY_ACCESS_MAX
] = {
3130 [NOTIFY_NONE
] = "none",
3131 [NOTIFY_MAIN
] = "main",
3132 [NOTIFY_ALL
] = "all"
3135 DEFINE_STRING_TABLE_LOOKUP(notify_access
, NotifyAccess
);
3137 static const char* const notify_state_table
[_NOTIFY_STATE_MAX
] = {
3138 [NOTIFY_UNKNOWN
] = "unknown",
3139 [NOTIFY_READY
] = "ready",
3140 [NOTIFY_RELOADING
] = "reloading",
3141 [NOTIFY_STOPPING
] = "stopping",
3144 DEFINE_STRING_TABLE_LOOKUP(notify_state
, NotifyState
);
3146 static const char* const service_result_table
[_SERVICE_RESULT_MAX
] = {
3147 [SERVICE_SUCCESS
] = "success",
3148 [SERVICE_FAILURE_RESOURCES
] = "resources",
3149 [SERVICE_FAILURE_TIMEOUT
] = "timeout",
3150 [SERVICE_FAILURE_EXIT_CODE
] = "exit-code",
3151 [SERVICE_FAILURE_SIGNAL
] = "signal",
3152 [SERVICE_FAILURE_CORE_DUMP
] = "core-dump",
3153 [SERVICE_FAILURE_WATCHDOG
] = "watchdog",
3154 [SERVICE_FAILURE_START_LIMIT
] = "start-limit"
3157 DEFINE_STRING_TABLE_LOOKUP(service_result
, ServiceResult
);
3159 const UnitVTable service_vtable
= {
3160 .object_size
= sizeof(Service
),
3161 .exec_context_offset
= offsetof(Service
, exec_context
),
3162 .cgroup_context_offset
= offsetof(Service
, cgroup_context
),
3163 .kill_context_offset
= offsetof(Service
, kill_context
),
3164 .exec_runtime_offset
= offsetof(Service
, exec_runtime
),
3170 .private_section
= "Service",
3172 .init
= service_init
,
3173 .done
= service_done
,
3174 .load
= service_load
,
3175 .release_resources
= service_release_resources
,
3177 .coldplug
= service_coldplug
,
3179 .dump
= service_dump
,
3181 .start
= service_start
,
3182 .stop
= service_stop
,
3183 .reload
= service_reload
,
3185 .can_reload
= service_can_reload
,
3187 .kill
= service_kill
,
3189 .serialize
= service_serialize
,
3190 .deserialize_item
= service_deserialize_item
,
3192 .active_state
= service_active_state
,
3193 .sub_state_to_string
= service_sub_state_to_string
,
3195 .check_gc
= service_check_gc
,
3196 .check_snapshot
= service_check_snapshot
,
3198 .sigchld_event
= service_sigchld_event
,
3200 .reset_failed
= service_reset_failed
,
3202 .notify_cgroup_empty
= service_notify_cgroup_empty_event
,
3203 .notify_message
= service_notify_message
,
3205 .bus_name_owner_change
= service_bus_name_owner_change
,
3207 .bus_vtable
= bus_service_vtable
,
3208 .bus_set_property
= bus_service_set_property
,
3209 .bus_commit_properties
= bus_service_commit_properties
,
3211 .get_timeout
= service_get_timeout
,
3212 .can_transient
= true,
3214 .status_message_formats
= {
3215 .starting_stopping
= {
3216 [0] = "Starting %s...",
3217 [1] = "Stopping %s...",
3219 .finished_start_job
= {
3220 [JOB_DONE
] = "Started %s.",
3221 [JOB_FAILED
] = "Failed to start %s.",
3223 .finished_stop_job
= {
3224 [JOB_DONE
] = "Stopped %s.",
3225 [JOB_FAILED
] = "Stopped (with error) %s.",