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 free(s
->pid_file_pathspec
);
146 s
->pid_file_pathspec
= NULL
;
149 static int service_set_main_pid(Service
*s
, pid_t pid
) {
160 if (s
->main_pid
== pid
&& s
->main_pid_known
)
163 if (s
->main_pid
!= pid
) {
164 service_unwatch_main_pid(s
);
165 exec_status_start(&s
->main_exec_status
, pid
);
169 s
->main_pid_known
= true;
171 if (get_parent_of_pid(pid
, &ppid
) >= 0 && ppid
!= getpid()) {
172 log_unit_warning(UNIT(s
), "Supervising process "PID_FMT
" which is not our child. We'll most likely not notice when it exits.", pid
);
173 s
->main_pid_alien
= true;
175 s
->main_pid_alien
= false;
180 static void service_close_socket_fd(Service
*s
) {
183 s
->socket_fd
= asynchronous_close(s
->socket_fd
);
186 static void service_connection_unref(Service
*s
) {
189 if (!UNIT_ISSET(s
->accept_socket
))
192 socket_connection_unref(SOCKET(UNIT_DEREF(s
->accept_socket
)));
193 unit_ref_unset(&s
->accept_socket
);
196 static void service_stop_watchdog(Service
*s
) {
199 s
->watchdog_event_source
= sd_event_source_unref(s
->watchdog_event_source
);
200 s
->watchdog_timestamp
= DUAL_TIMESTAMP_NULL
;
203 static void service_start_watchdog(Service
*s
) {
208 if (s
->watchdog_usec
<= 0)
211 if (s
->watchdog_event_source
) {
212 r
= sd_event_source_set_time(s
->watchdog_event_source
, s
->watchdog_timestamp
.monotonic
+ s
->watchdog_usec
);
214 log_unit_warning_errno(UNIT(s
), r
, "Failed to reset watchdog timer: %m");
218 r
= sd_event_source_set_enabled(s
->watchdog_event_source
, SD_EVENT_ONESHOT
);
220 r
= sd_event_add_time(
221 UNIT(s
)->manager
->event
,
222 &s
->watchdog_event_source
,
224 s
->watchdog_timestamp
.monotonic
+ s
->watchdog_usec
, 0,
225 service_dispatch_watchdog
, s
);
227 log_unit_warning_errno(UNIT(s
), r
, "Failed to add watchdog timer: %m");
231 (void) sd_event_source_set_description(s
->watchdog_event_source
, "service-watchdog");
233 /* Let's process everything else which might be a sign
234 * of living before we consider a service died. */
235 r
= sd_event_source_set_priority(s
->watchdog_event_source
, SD_EVENT_PRIORITY_IDLE
);
239 log_unit_warning_errno(UNIT(s
), r
, "Failed to install watchdog timer: %m");
242 static void service_reset_watchdog(Service
*s
) {
245 dual_timestamp_get(&s
->watchdog_timestamp
);
246 service_start_watchdog(s
);
249 static void service_fd_store_unlink(ServiceFDStore
*fs
) {
255 assert(fs
->service
->n_fd_store
> 0);
256 LIST_REMOVE(fd_store
, fs
->service
->fd_store
, fs
);
257 fs
->service
->n_fd_store
--;
260 if (fs
->event_source
) {
261 sd_event_source_set_enabled(fs
->event_source
, SD_EVENT_OFF
);
262 sd_event_source_unref(fs
->event_source
);
269 static void service_release_resources(Unit
*u
) {
270 Service
*s
= SERVICE(u
);
277 log_unit_debug(u
, "Releasing all resources.");
280 service_fd_store_unlink(s
->fd_store
);
282 assert(s
->n_fd_store
== 0);
285 static void service_done(Unit
*u
) {
286 Service
*s
= SERVICE(u
);
293 free(s
->status_text
);
294 s
->status_text
= NULL
;
297 s
->reboot_arg
= NULL
;
299 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
300 exec_command_free_array(s
->exec_command
, _SERVICE_EXEC_COMMAND_MAX
);
301 s
->control_command
= NULL
;
302 s
->main_command
= NULL
;
304 exit_status_set_free(&s
->restart_prevent_status
);
305 exit_status_set_free(&s
->restart_force_status
);
306 exit_status_set_free(&s
->success_status
);
308 /* This will leak a process, but at least no memory or any of
310 service_unwatch_main_pid(s
);
311 service_unwatch_control_pid(s
);
312 service_unwatch_pid_file(s
);
315 unit_unwatch_bus_name(u
, s
->bus_name
);
320 s
->bus_endpoint_fd
= safe_close(s
->bus_endpoint_fd
);
321 service_close_socket_fd(s
);
322 service_connection_unref(s
);
324 unit_ref_unset(&s
->accept_socket
);
326 service_stop_watchdog(s
);
328 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
330 service_release_resources(u
);
333 static int on_fd_store_io(sd_event_source
*e
, int fd
, uint32_t revents
, void *userdata
) {
334 ServiceFDStore
*fs
= userdata
;
339 /* If we get either EPOLLHUP or EPOLLERR, it's time to remove this entry from the fd store */
340 service_fd_store_unlink(fs
);
344 static int service_add_fd_store(Service
*s
, int fd
) {
351 if (s
->n_fd_store
>= s
->n_fd_store_max
)
354 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
355 r
= same_fd(fs
->fd
, fd
);
359 /* Already included */
365 fs
= new0(ServiceFDStore
, 1);
372 r
= sd_event_add_io(UNIT(s
)->manager
->event
, &fs
->event_source
, fd
, 0, on_fd_store_io
, fs
);
378 (void) sd_event_source_set_description(fs
->event_source
, "service-fd-store");
380 LIST_PREPEND(fd_store
, s
->fd_store
, fs
);
386 static int service_add_fd_store_set(Service
*s
, FDSet
*fds
) {
391 if (fdset_size(fds
) <= 0)
394 while (s
->n_fd_store
< s
->n_fd_store_max
) {
395 _cleanup_close_
int fd
= -1;
397 fd
= fdset_steal_first(fds
);
401 r
= service_add_fd_store(s
, fd
);
403 return log_unit_error_errno(UNIT(s
), r
, "Couldn't add fd to fd store: %m");
405 log_unit_debug(UNIT(s
), "Added fd to fd store.");
410 if (fdset_size(fds
) > 0)
411 log_unit_warning(UNIT(s
), "Tried to store more fds than FDStoreMax=%u allows, closing remaining.", s
->n_fd_store_max
);
416 static int service_arm_timer(Service
*s
, usec_t usec
) {
421 if (s
->timer_event_source
) {
422 r
= sd_event_source_set_time(s
->timer_event_source
, now(CLOCK_MONOTONIC
) + usec
);
426 return sd_event_source_set_enabled(s
->timer_event_source
, SD_EVENT_ONESHOT
);
429 r
= sd_event_add_time(
430 UNIT(s
)->manager
->event
,
431 &s
->timer_event_source
,
433 now(CLOCK_MONOTONIC
) + usec
, 0,
434 service_dispatch_timer
, s
);
438 (void) sd_event_source_set_description(s
->timer_event_source
, "service-timer");
443 static int service_verify(Service
*s
) {
446 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
449 if (!s
->exec_command
[SERVICE_EXEC_START
] && !s
->exec_command
[SERVICE_EXEC_STOP
]) {
450 log_unit_error(UNIT(s
), "Service lacks both ExecStart= and ExecStop= setting. Refusing.");
454 if (s
->type
!= SERVICE_ONESHOT
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
455 log_unit_error(UNIT(s
), "Service has no ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
459 if (!s
->remain_after_exit
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
460 log_unit_error(UNIT(s
), "Service has no ExecStart= setting, which is only allowed for RemainAfterExit=yes services. Refusing.");
464 if (s
->type
!= SERVICE_ONESHOT
&& s
->exec_command
[SERVICE_EXEC_START
]->command_next
) {
465 log_unit_error(UNIT(s
), "Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
469 if (s
->type
== SERVICE_ONESHOT
&& s
->restart
!= SERVICE_RESTART_NO
) {
470 log_unit_error(UNIT(s
), "Service has Restart= setting other than no, which isn't allowed for Type=oneshot services. Refusing.");
474 if (s
->type
== SERVICE_ONESHOT
&& !exit_status_set_is_empty(&s
->restart_force_status
)) {
475 log_unit_error(UNIT(s
), "Service has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.");
479 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name
) {
480 log_unit_error(UNIT(s
), "Service is of type D-Bus but no D-Bus service name has been specified. Refusing.");
484 if (s
->bus_name
&& s
->type
!= SERVICE_DBUS
)
485 log_unit_warning(UNIT(s
), "Service has a D-Bus service name specified, but is not of type dbus. Ignoring.");
487 if (s
->exec_context
.pam_name
&& !(s
->kill_context
.kill_mode
== KILL_CONTROL_GROUP
|| s
->kill_context
.kill_mode
== KILL_MIXED
)) {
488 log_unit_error(UNIT(s
), "Service has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.");
495 static int service_add_default_dependencies(Service
*s
) {
500 /* Add a number of automatic dependencies useful for the
501 * majority of services. */
503 /* First, pull in base system */
504 r
= unit_add_two_dependencies_by_name(UNIT(s
), UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_BASIC_TARGET
, NULL
, true);
508 /* Second, activate normal shutdown */
509 return unit_add_two_dependencies_by_name(UNIT(s
), UNIT_BEFORE
, UNIT_CONFLICTS
, SPECIAL_SHUTDOWN_TARGET
, NULL
, true);
512 static void service_fix_output(Service
*s
) {
515 /* If nothing has been explicitly configured, patch default
516 * output in. If input is socket/tty we avoid this however,
517 * since in that case we want output to default to the same
518 * place as we read input from. */
520 if (s
->exec_context
.std_error
== EXEC_OUTPUT_INHERIT
&&
521 s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
522 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
523 s
->exec_context
.std_error
= UNIT(s
)->manager
->default_std_error
;
525 if (s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
526 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
527 s
->exec_context
.std_output
= UNIT(s
)->manager
->default_std_output
;
530 static int service_add_extras(Service
*s
) {
535 if (s
->type
== _SERVICE_TYPE_INVALID
) {
536 /* Figure out a type automatically */
538 s
->type
= SERVICE_DBUS
;
539 else if (s
->exec_command
[SERVICE_EXEC_START
])
540 s
->type
= SERVICE_SIMPLE
;
542 s
->type
= SERVICE_ONESHOT
;
545 /* Oneshot services have disabled start timeout by default */
546 if (s
->type
== SERVICE_ONESHOT
&& !s
->start_timeout_defined
)
547 s
->timeout_start_usec
= 0;
549 service_fix_output(s
);
551 r
= unit_patch_contexts(UNIT(s
));
555 r
= unit_add_exec_dependencies(UNIT(s
), &s
->exec_context
);
559 r
= unit_set_default_slice(UNIT(s
));
563 if (s
->type
== SERVICE_NOTIFY
&& s
->notify_access
== NOTIFY_NONE
)
564 s
->notify_access
= NOTIFY_MAIN
;
566 if (s
->watchdog_usec
> 0 && s
->notify_access
== NOTIFY_NONE
)
567 s
->notify_access
= NOTIFY_MAIN
;
572 n
= strjoina(s
->bus_name
, ".busname");
573 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_AFTER
, n
, NULL
, true);
577 r
= unit_watch_bus_name(UNIT(s
), s
->bus_name
);
579 return log_unit_error_errno(UNIT(s
), r
, "Two services allocated for the same bus name %s, refusing operation.", s
->bus_name
);
581 return log_unit_error_errno(UNIT(s
), r
, "Cannot watch bus name %s: %m", s
->bus_name
);
584 if (UNIT(s
)->default_dependencies
) {
585 r
= service_add_default_dependencies(s
);
593 static int service_load(Unit
*u
) {
594 Service
*s
= SERVICE(u
);
599 /* Load a .service file */
600 r
= unit_load_fragment(u
);
604 /* Still nothing found? Then let's give up */
605 if (u
->load_state
== UNIT_STUB
)
608 /* This is a new unit? Then let's add in some extras */
609 if (u
->load_state
== UNIT_LOADED
) {
611 /* We were able to load something, then let's add in
612 * the dropin directories. */
613 r
= unit_load_dropin(u
);
617 /* This is a new unit? Then let's add in some
619 r
= service_add_extras(s
);
624 return service_verify(s
);
627 static void service_dump(Unit
*u
, FILE *f
, const char *prefix
) {
628 ServiceExecCommand c
;
629 Service
*s
= SERVICE(u
);
634 prefix
= strempty(prefix
);
635 prefix2
= strjoina(prefix
, "\t");
638 "%sService State: %s\n"
640 "%sReload Result: %s\n"
641 "%sPermissionsStartOnly: %s\n"
642 "%sRootDirectoryStartOnly: %s\n"
643 "%sRemainAfterExit: %s\n"
644 "%sGuessMainPID: %s\n"
647 "%sNotifyAccess: %s\n"
648 "%sNotifyState: %s\n",
649 prefix
, service_state_to_string(s
->state
),
650 prefix
, service_result_to_string(s
->result
),
651 prefix
, service_result_to_string(s
->reload_result
),
652 prefix
, yes_no(s
->permissions_start_only
),
653 prefix
, yes_no(s
->root_directory_start_only
),
654 prefix
, yes_no(s
->remain_after_exit
),
655 prefix
, yes_no(s
->guess_main_pid
),
656 prefix
, service_type_to_string(s
->type
),
657 prefix
, service_restart_to_string(s
->restart
),
658 prefix
, notify_access_to_string(s
->notify_access
),
659 prefix
, notify_state_to_string(s
->notify_state
));
661 if (s
->control_pid
> 0)
663 "%sControl PID: "PID_FMT
"\n",
664 prefix
, s
->control_pid
);
668 "%sMain PID: "PID_FMT
"\n"
669 "%sMain PID Known: %s\n"
670 "%sMain PID Alien: %s\n",
672 prefix
, yes_no(s
->main_pid_known
),
673 prefix
, yes_no(s
->main_pid_alien
));
678 prefix
, s
->pid_file
);
683 "%sBus Name Good: %s\n",
685 prefix
, yes_no(s
->bus_name_good
));
687 kill_context_dump(&s
->kill_context
, f
, prefix
);
688 exec_context_dump(&s
->exec_context
, f
, prefix
);
690 for (c
= 0; c
< _SERVICE_EXEC_COMMAND_MAX
; c
++) {
692 if (!s
->exec_command
[c
])
695 fprintf(f
, "%s-> %s:\n",
696 prefix
, service_exec_command_to_string(c
));
698 exec_command_dump_list(s
->exec_command
[c
], f
, prefix2
);
702 fprintf(f
, "%sStatus Text: %s\n",
703 prefix
, s
->status_text
);
705 if (s
->n_fd_store_max
> 0) {
707 "%sFile Descriptor Store Max: %u\n"
708 "%sFile Descriptor Store Current: %u\n",
709 prefix
, s
->n_fd_store_max
,
710 prefix
, s
->n_fd_store
);
714 static int service_load_pid_file(Service
*s
, bool may_warn
) {
715 _cleanup_free_
char *k
= NULL
;
724 r
= read_one_line_file(s
->pid_file
, &k
);
727 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
));
731 r
= parse_pid(k
, &pid
);
734 log_unit_info_errno(UNIT(s
), r
, "Failed to read PID from file %s: %m", s
->pid_file
);
738 if (!pid_is_alive(pid
)) {
740 log_unit_info(UNIT(s
), "PID "PID_FMT
" read from file %s does not exist or is a zombie.", pid
, s
->pid_file
);
744 if (s
->main_pid_known
) {
745 if (pid
== s
->main_pid
)
748 log_unit_debug(UNIT(s
), "Main PID changing: "PID_FMT
" -> "PID_FMT
, s
->main_pid
, pid
);
750 service_unwatch_main_pid(s
);
751 s
->main_pid_known
= false;
753 log_unit_debug(UNIT(s
), "Main PID loaded: "PID_FMT
, pid
);
755 r
= service_set_main_pid(s
, pid
);
759 r
= unit_watch_pid(UNIT(s
), pid
);
761 /* FIXME: we need to do something here */
762 log_unit_warning_errno(UNIT(s
), r
, "Failed to watch PID "PID_FMT
" for service: %m", pid
);
769 static int service_search_main_pid(Service
*s
) {
775 /* If we know it anyway, don't ever fallback to unreliable
777 if (s
->main_pid_known
)
780 if (!s
->guess_main_pid
)
783 assert(s
->main_pid
<= 0);
785 r
= unit_search_main_pid(UNIT(s
), &pid
);
789 log_unit_debug(UNIT(s
), "Main PID guessed: "PID_FMT
, pid
);
790 r
= service_set_main_pid(s
, pid
);
794 r
= unit_watch_pid(UNIT(s
), pid
);
796 /* FIXME: we need to do something here */
797 log_unit_warning_errno(UNIT(s
), r
, "Failed to watch PID "PID_FMT
" from: %m", pid
);
804 static void service_set_state(Service
*s
, ServiceState state
) {
805 ServiceState old_state
;
806 const UnitActiveState
*table
;
810 table
= s
->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
812 old_state
= s
->state
;
815 service_unwatch_pid_file(s
);
818 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
820 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
821 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
,
822 SERVICE_AUTO_RESTART
))
823 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
826 SERVICE_START
, SERVICE_START_POST
,
827 SERVICE_RUNNING
, SERVICE_RELOAD
,
828 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
829 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
830 service_unwatch_main_pid(s
);
831 s
->main_command
= NULL
;
835 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
837 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
838 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
839 service_unwatch_control_pid(s
);
840 s
->control_command
= NULL
;
841 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
844 if (IN_SET(state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
845 unit_unwatch_all_pids(UNIT(s
));
848 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
849 SERVICE_RUNNING
, SERVICE_RELOAD
,
850 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
851 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
) &&
852 !(state
== SERVICE_DEAD
&& UNIT(s
)->job
)) {
853 service_close_socket_fd(s
);
854 service_connection_unref(s
);
857 if (!IN_SET(state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
858 service_stop_watchdog(s
);
860 /* For the inactive states unit_notify() will trim the cgroup,
861 * but for exit we have to do that ourselves... */
862 if (state
== SERVICE_EXITED
&& UNIT(s
)->manager
->n_reloading
<= 0)
863 unit_prune_cgroup(UNIT(s
));
865 /* For remain_after_exit services, let's see if we can "release" the
866 * hold on the console, since unit_notify() only does that in case of
868 if (state
== SERVICE_EXITED
&&
869 s
->remain_after_exit
&&
870 UNIT(s
)->manager
->n_on_console
> 0) {
874 ec
= unit_get_exec_context(UNIT(s
));
875 if (ec
&& exec_context_may_touch_console(ec
)) {
876 Manager
*m
= UNIT(s
)->manager
;
879 if (m
->n_on_console
== 0)
880 /* unset no_console_output flag, since the console is free */
881 m
->no_console_output
= false;
885 if (old_state
!= state
)
886 log_unit_debug(UNIT(s
), "Changed %s -> %s", service_state_to_string(old_state
), service_state_to_string(state
));
888 unit_notify(UNIT(s
), table
[old_state
], table
[state
], s
->reload_result
== SERVICE_SUCCESS
);
889 s
->reload_result
= SERVICE_SUCCESS
;
892 static int service_coldplug(Unit
*u
) {
893 Service
*s
= SERVICE(u
);
897 assert(s
->state
== SERVICE_DEAD
);
899 if (s
->deserialized_state
!= s
->state
) {
901 if (IN_SET(s
->deserialized_state
,
902 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
904 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
905 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
909 k
= IN_SET(s
->deserialized_state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RELOAD
) ? s
->timeout_start_usec
: s
->timeout_stop_usec
;
911 /* For the start/stop timeouts 0 means off */
913 r
= service_arm_timer(s
, k
);
919 if (s
->deserialized_state
== SERVICE_AUTO_RESTART
) {
921 /* The restart timeouts 0 means immediately */
922 r
= service_arm_timer(s
, s
->restart_usec
);
927 if (pid_is_unwaited(s
->main_pid
) &&
928 ((s
->deserialized_state
== SERVICE_START
&& IN_SET(s
->type
, SERVICE_FORKING
, SERVICE_DBUS
, SERVICE_ONESHOT
, SERVICE_NOTIFY
)) ||
929 IN_SET(s
->deserialized_state
,
930 SERVICE_START
, SERVICE_START_POST
,
931 SERVICE_RUNNING
, SERVICE_RELOAD
,
932 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
933 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))) {
934 r
= unit_watch_pid(UNIT(s
), s
->main_pid
);
939 if (pid_is_unwaited(s
->control_pid
) &&
940 IN_SET(s
->deserialized_state
,
941 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
943 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
944 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
945 r
= unit_watch_pid(UNIT(s
), s
->control_pid
);
950 if (!IN_SET(s
->deserialized_state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
951 unit_watch_all_pids(UNIT(s
));
953 if (IN_SET(s
->deserialized_state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
954 service_start_watchdog(s
);
956 service_set_state(s
, s
->deserialized_state
);
962 static int service_collect_fds(Service
*s
, int **fds
, unsigned *n_fds
) {
963 _cleanup_free_
int *rfds
= NULL
;
973 if (s
->socket_fd
>= 0)
976 SET_FOREACH(u
, UNIT(s
)->dependencies
[UNIT_TRIGGERED_BY
], i
) {
981 if (u
->type
!= UNIT_SOCKET
)
986 r
= socket_collect_fds(sock
, &cfds
, &cn_fds
);
1001 t
= realloc(rfds
, (rn_fds
+ cn_fds
) * sizeof(int));
1007 memcpy(t
+ rn_fds
, cfds
, cn_fds
* sizeof(int));
1016 if (s
->n_fd_store
> 0) {
1020 t
= realloc(rfds
, (rn_fds
+ s
->n_fd_store
) * sizeof(int));
1025 LIST_FOREACH(fd_store
, fs
, s
->fd_store
)
1026 rfds
[rn_fds
++] = fs
->fd
;
1036 static int service_spawn(
1041 bool apply_permissions
,
1043 bool apply_tty_stdin
,
1050 _cleanup_free_
int *fdsbuf
= NULL
;
1051 unsigned n_fds
= 0, n_env
= 0;
1052 _cleanup_free_
char *bus_endpoint_path
= NULL
;
1053 _cleanup_strv_free_
char
1054 **argv
= NULL
, **final_env
= NULL
, **our_env
= NULL
;
1056 ExecParameters exec_params
= {
1057 .apply_permissions
= apply_permissions
,
1058 .apply_chroot
= apply_chroot
,
1059 .apply_tty_stdin
= apply_tty_stdin
,
1060 .bus_endpoint_fd
= -1,
1061 .selinux_context_net
= s
->socket_fd_selinux_context_net
1068 (void) unit_realize_cgroup(UNIT(s
));
1069 if (s
->reset_cpu_usage
) {
1070 (void) unit_reset_cpu_usage(UNIT(s
));
1071 s
->reset_cpu_usage
= false;
1074 r
= unit_setup_exec_runtime(UNIT(s
));
1079 s
->exec_context
.std_input
== EXEC_INPUT_SOCKET
||
1080 s
->exec_context
.std_output
== EXEC_OUTPUT_SOCKET
||
1081 s
->exec_context
.std_error
== EXEC_OUTPUT_SOCKET
) {
1083 if (s
->socket_fd
>= 0) {
1084 fds
= &s
->socket_fd
;
1087 r
= service_collect_fds(s
, &fdsbuf
, &n_fds
);
1096 r
= service_arm_timer(s
, timeout
);
1100 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
1102 r
= unit_full_printf_strv(UNIT(s
), c
->argv
, &argv
);
1106 our_env
= new0(char*, 6);
1112 if (is_control
? s
->notify_access
== NOTIFY_ALL
: s
->notify_access
!= NOTIFY_NONE
)
1113 if (asprintf(our_env
+ n_env
++, "NOTIFY_SOCKET=%s", UNIT(s
)->manager
->notify_socket
) < 0) {
1118 if (s
->main_pid
> 0)
1119 if (asprintf(our_env
+ n_env
++, "MAINPID="PID_FMT
, s
->main_pid
) < 0) {
1124 if (UNIT(s
)->manager
->running_as
!= MANAGER_SYSTEM
)
1125 if (asprintf(our_env
+ n_env
++, "MANAGERPID="PID_FMT
, getpid()) < 0) {
1130 if (UNIT_DEREF(s
->accept_socket
)) {
1131 union sockaddr_union sa
;
1132 socklen_t salen
= sizeof(sa
);
1134 r
= getpeername(s
->socket_fd
, &sa
.sa
, &salen
);
1140 if (IN_SET(sa
.sa
.sa_family
, AF_INET
, AF_INET6
)) {
1141 _cleanup_free_
char *addr
= NULL
;
1145 r
= sockaddr_pretty(&sa
.sa
, salen
, true, false, &addr
);
1149 t
= strappend("REMOTE_ADDR=", addr
);
1154 our_env
[n_env
++] = t
;
1156 port
= sockaddr_port(&sa
.sa
);
1162 if (asprintf(&t
, "REMOTE_PORT=%u", port
) < 0) {
1166 our_env
[n_env
++] = t
;
1170 final_env
= strv_env_merge(2, UNIT(s
)->manager
->environment
, our_env
, NULL
);
1176 if (is_control
&& UNIT(s
)->cgroup_path
) {
1177 path
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1178 cg_create(SYSTEMD_CGROUP_CONTROLLER
, path
);
1180 path
= UNIT(s
)->cgroup_path
;
1182 if (s
->exec_context
.bus_endpoint
) {
1183 r
= bus_kernel_create_endpoint(UNIT(s
)->manager
->running_as
== MANAGER_SYSTEM
? "system" : "user",
1184 UNIT(s
)->id
, &bus_endpoint_path
);
1188 /* Pass the fd to the exec_params so that the child process can upload the policy.
1189 * Keep a reference to the fd in the service, so the endpoint is kept alive as long
1190 * as the service is running. */
1191 exec_params
.bus_endpoint_fd
= s
->bus_endpoint_fd
= r
;
1194 exec_params
.argv
= argv
;
1195 exec_params
.fds
= fds
;
1196 exec_params
.n_fds
= n_fds
;
1197 exec_params
.environment
= final_env
;
1198 exec_params
.confirm_spawn
= UNIT(s
)->manager
->confirm_spawn
;
1199 exec_params
.cgroup_supported
= UNIT(s
)->manager
->cgroup_supported
;
1200 exec_params
.cgroup_path
= path
;
1201 exec_params
.cgroup_delegate
= s
->cgroup_context
.delegate
;
1202 exec_params
.runtime_prefix
= manager_get_runtime_prefix(UNIT(s
)->manager
);
1203 exec_params
.watchdog_usec
= s
->watchdog_usec
;
1204 exec_params
.bus_endpoint_path
= bus_endpoint_path
;
1205 if (s
->type
== SERVICE_IDLE
)
1206 exec_params
.idle_pipe
= UNIT(s
)->manager
->idle_pipe
;
1208 r
= exec_spawn(UNIT(s
),
1217 r
= unit_watch_pid(UNIT(s
), pid
);
1219 /* FIXME: we need to do something here */
1228 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
1233 static int main_pid_good(Service
*s
) {
1236 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1239 /* If we know the pid file, then let's just check if it is
1241 if (s
->main_pid_known
) {
1243 /* If it's an alien child let's check if it is still
1245 if (s
->main_pid_alien
&& s
->main_pid
> 0)
1246 return pid_is_alive(s
->main_pid
);
1248 /* .. otherwise assume we'll get a SIGCHLD for it,
1249 * which we really should wait for to collect exit
1250 * status and code */
1251 return s
->main_pid
> 0;
1254 /* We don't know the pid */
1258 _pure_
static int control_pid_good(Service
*s
) {
1261 return s
->control_pid
> 0;
1264 static int cgroup_good(Service
*s
) {
1269 if (!UNIT(s
)->cgroup_path
)
1272 r
= cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER
, UNIT(s
)->cgroup_path
);
1279 static bool service_shall_restart(Service
*s
) {
1282 /* Don't restart after manual stops */
1283 if (s
->forbid_restart
)
1286 /* Never restart if this is configured as special exception */
1287 if (exit_status_set_test(&s
->restart_prevent_status
, s
->main_exec_status
.code
, s
->main_exec_status
.status
))
1290 /* Restart if the exit code/status are configured as restart triggers */
1291 if (exit_status_set_test(&s
->restart_force_status
, s
->main_exec_status
.code
, s
->main_exec_status
.status
))
1294 switch (s
->restart
) {
1296 case SERVICE_RESTART_NO
:
1299 case SERVICE_RESTART_ALWAYS
:
1302 case SERVICE_RESTART_ON_SUCCESS
:
1303 return s
->result
== SERVICE_SUCCESS
;
1305 case SERVICE_RESTART_ON_FAILURE
:
1306 return s
->result
!= SERVICE_SUCCESS
;
1308 case SERVICE_RESTART_ON_ABNORMAL
:
1309 return !IN_SET(s
->result
, SERVICE_SUCCESS
, SERVICE_FAILURE_EXIT_CODE
);
1311 case SERVICE_RESTART_ON_WATCHDOG
:
1312 return s
->result
== SERVICE_FAILURE_WATCHDOG
;
1314 case SERVICE_RESTART_ON_ABORT
:
1315 return IN_SET(s
->result
, SERVICE_FAILURE_SIGNAL
, SERVICE_FAILURE_CORE_DUMP
);
1318 assert_not_reached("unknown restart setting");
1322 static void service_enter_dead(Service
*s
, ServiceResult f
, bool allow_restart
) {
1326 if (f
!= SERVICE_SUCCESS
)
1329 service_set_state(s
, s
->result
!= SERVICE_SUCCESS
? SERVICE_FAILED
: SERVICE_DEAD
);
1331 if (s
->result
!= SERVICE_SUCCESS
) {
1332 log_unit_warning(UNIT(s
), "Failed with result '%s'.", service_result_to_string(s
->result
));
1333 failure_action(UNIT(s
)->manager
, s
->failure_action
, s
->reboot_arg
);
1336 if (allow_restart
&& service_shall_restart(s
)) {
1338 r
= service_arm_timer(s
, s
->restart_usec
);
1342 service_set_state(s
, SERVICE_AUTO_RESTART
);
1345 /* The next restart might not be a manual stop, hence reset the flag indicating manual stops */
1346 s
->forbid_restart
= false;
1348 /* We want fresh tmpdirs in case service is started again immediately */
1349 exec_runtime_destroy(s
->exec_runtime
);
1350 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
1352 /* Also, remove the runtime directory in */
1353 exec_context_destroy_runtime_directory(&s
->exec_context
, manager_get_runtime_prefix(UNIT(s
)->manager
));
1355 /* Try to delete the pid file. At this point it will be
1356 * out-of-date, and some software might be confused by it, so
1357 * let's remove it. */
1359 unlink_noerrno(s
->pid_file
);
1364 log_unit_warning_errno(UNIT(s
), r
, "Failed to run install restart timer: %m");
1365 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1368 static void service_enter_stop_post(Service
*s
, ServiceResult f
) {
1372 if (f
!= SERVICE_SUCCESS
)
1375 service_unwatch_control_pid(s
);
1376 unit_watch_all_pids(UNIT(s
));
1378 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP_POST
];
1379 if (s
->control_command
) {
1380 s
->control_command_id
= SERVICE_EXEC_STOP_POST
;
1382 r
= service_spawn(s
,
1384 s
->timeout_stop_usec
,
1386 !s
->permissions_start_only
,
1387 !s
->root_directory_start_only
,
1394 service_set_state(s
, SERVICE_STOP_POST
);
1396 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_SUCCESS
);
1401 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'stop-post' task: %m");
1402 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1405 static int state_to_kill_operation(ServiceState state
) {
1408 case SERVICE_STOP_SIGABRT
:
1411 case SERVICE_STOP_SIGTERM
:
1412 case SERVICE_FINAL_SIGTERM
:
1413 return KILL_TERMINATE
;
1415 case SERVICE_STOP_SIGKILL
:
1416 case SERVICE_FINAL_SIGKILL
:
1420 return _KILL_OPERATION_INVALID
;
1424 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
) {
1429 if (f
!= SERVICE_SUCCESS
)
1432 unit_watch_all_pids(UNIT(s
));
1434 r
= unit_kill_context(
1437 state_to_kill_operation(state
),
1446 if (s
->timeout_stop_usec
> 0) {
1447 r
= service_arm_timer(s
, s
->timeout_stop_usec
);
1452 service_set_state(s
, state
);
1453 } else if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
) && s
->kill_context
.send_sigkill
)
1454 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_SUCCESS
);
1455 else if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
))
1456 service_enter_stop_post(s
, SERVICE_SUCCESS
);
1457 else if (state
== SERVICE_FINAL_SIGTERM
&& s
->kill_context
.send_sigkill
)
1458 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_SUCCESS
);
1460 service_enter_dead(s
, SERVICE_SUCCESS
, true);
1465 log_unit_warning_errno(UNIT(s
), r
, "Failed to kill processes: %m");
1467 if (IN_SET(state
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
))
1468 service_enter_stop_post(s
, SERVICE_FAILURE_RESOURCES
);
1470 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1473 static void service_enter_stop_by_notify(Service
*s
) {
1476 unit_watch_all_pids(UNIT(s
));
1478 if (s
->timeout_stop_usec
> 0)
1479 service_arm_timer(s
, s
->timeout_stop_usec
);
1481 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1482 service_set_state(s
, SERVICE_STOP_SIGTERM
);
1485 static void service_enter_stop(Service
*s
, ServiceResult f
) {
1490 if (f
!= SERVICE_SUCCESS
)
1493 service_unwatch_control_pid(s
);
1494 unit_watch_all_pids(UNIT(s
));
1496 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP
];
1497 if (s
->control_command
) {
1498 s
->control_command_id
= SERVICE_EXEC_STOP
;
1500 r
= service_spawn(s
,
1502 s
->timeout_stop_usec
,
1504 !s
->permissions_start_only
,
1505 !s
->root_directory_start_only
,
1512 service_set_state(s
, SERVICE_STOP
);
1514 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
1519 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'stop' task: %m");
1520 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1523 static bool service_good(Service
*s
) {
1527 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name_good
)
1530 main_pid_ok
= main_pid_good(s
);
1531 if (main_pid_ok
> 0) /* It's alive */
1533 if (main_pid_ok
== 0) /* It's dead */
1536 /* OK, we don't know anything about the main PID, maybe
1537 * because there is none. Let's check the control group
1540 return cgroup_good(s
) != 0;
1543 static void service_enter_running(Service
*s
, ServiceResult f
) {
1546 if (f
!= SERVICE_SUCCESS
)
1549 if (service_good(s
)) {
1551 /* If there are any queued up sd_notify()
1552 * notifications, process them now */
1553 if (s
->notify_state
== NOTIFY_RELOADING
)
1554 service_enter_reload_by_notify(s
);
1555 else if (s
->notify_state
== NOTIFY_STOPPING
)
1556 service_enter_stop_by_notify(s
);
1558 service_set_state(s
, SERVICE_RUNNING
);
1560 } else if (s
->remain_after_exit
)
1561 service_set_state(s
, SERVICE_EXITED
);
1563 service_enter_stop(s
, SERVICE_SUCCESS
);
1566 static void service_enter_start_post(Service
*s
) {
1570 service_unwatch_control_pid(s
);
1571 service_reset_watchdog(s
);
1573 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_POST
];
1574 if (s
->control_command
) {
1575 s
->control_command_id
= SERVICE_EXEC_START_POST
;
1577 r
= service_spawn(s
,
1579 s
->timeout_start_usec
,
1581 !s
->permissions_start_only
,
1582 !s
->root_directory_start_only
,
1589 service_set_state(s
, SERVICE_START_POST
);
1591 service_enter_running(s
, SERVICE_SUCCESS
);
1596 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start-post' task: %m");
1597 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1600 static void service_kill_control_processes(Service
*s
) {
1603 if (!UNIT(s
)->cgroup_path
)
1606 p
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1607 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, p
, SIGKILL
, true, true, true, NULL
);
1610 static void service_enter_start(Service
*s
) {
1617 service_unwatch_control_pid(s
);
1618 service_unwatch_main_pid(s
);
1620 /* We want to ensure that nobody leaks processes from
1621 * START_PRE here, so let's go on a killing spree, People
1622 * should not spawn long running processes from START_PRE. */
1623 service_kill_control_processes(s
);
1625 if (s
->type
== SERVICE_FORKING
) {
1626 s
->control_command_id
= SERVICE_EXEC_START
;
1627 c
= s
->control_command
= s
->exec_command
[SERVICE_EXEC_START
];
1629 s
->main_command
= NULL
;
1631 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
1632 s
->control_command
= NULL
;
1634 c
= s
->main_command
= s
->exec_command
[SERVICE_EXEC_START
];
1638 assert(s
->type
== SERVICE_ONESHOT
);
1639 service_enter_start_post(s
);
1643 r
= service_spawn(s
,
1645 IN_SET(s
->type
, SERVICE_FORKING
, SERVICE_DBUS
, SERVICE_NOTIFY
, SERVICE_ONESHOT
) ? s
->timeout_start_usec
: 0,
1655 if (s
->type
== SERVICE_SIMPLE
|| s
->type
== SERVICE_IDLE
) {
1656 /* For simple services we immediately start
1657 * the START_POST binaries. */
1659 service_set_main_pid(s
, pid
);
1660 service_enter_start_post(s
);
1662 } else if (s
->type
== SERVICE_FORKING
) {
1664 /* For forking services we wait until the start
1665 * process exited. */
1667 s
->control_pid
= pid
;
1668 service_set_state(s
, SERVICE_START
);
1670 } else if (s
->type
== SERVICE_ONESHOT
||
1671 s
->type
== SERVICE_DBUS
||
1672 s
->type
== SERVICE_NOTIFY
) {
1674 /* For oneshot services we wait until the start
1675 * process exited, too, but it is our main process. */
1677 /* For D-Bus services we know the main pid right away,
1678 * but wait for the bus name to appear on the
1679 * bus. Notify services are similar. */
1681 service_set_main_pid(s
, pid
);
1682 service_set_state(s
, SERVICE_START
);
1684 assert_not_reached("Unknown service type");
1689 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start' task: %m");
1690 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1693 static void service_enter_start_pre(Service
*s
) {
1698 service_unwatch_control_pid(s
);
1700 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_PRE
];
1701 if (s
->control_command
) {
1702 /* Before we start anything, let's clear up what might
1703 * be left from previous runs. */
1704 service_kill_control_processes(s
);
1706 s
->control_command_id
= SERVICE_EXEC_START_PRE
;
1708 r
= service_spawn(s
,
1710 s
->timeout_start_usec
,
1712 !s
->permissions_start_only
,
1713 !s
->root_directory_start_only
,
1720 service_set_state(s
, SERVICE_START_PRE
);
1722 service_enter_start(s
);
1727 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'start-pre' task: %m");
1728 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1731 static void service_enter_restart(Service
*s
) {
1732 _cleanup_bus_error_free_ sd_bus_error error
= SD_BUS_ERROR_NULL
;
1737 if (UNIT(s
)->job
&& UNIT(s
)->job
->type
== JOB_STOP
) {
1738 /* Don't restart things if we are going down anyway */
1739 log_unit_info(UNIT(s
), "Stop job pending for unit, delaying automatic restart.");
1741 r
= service_arm_timer(s
, s
->restart_usec
);
1748 /* Any units that are bound to this service must also be
1749 * restarted. We use JOB_RESTART (instead of the more obvious
1750 * JOB_START) here so that those dependency jobs will be added
1752 r
= manager_add_job(UNIT(s
)->manager
, JOB_RESTART
, UNIT(s
), JOB_FAIL
, false, &error
, NULL
);
1756 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
1757 * it will be canceled as part of the service_stop() call that
1758 * is executed as part of JOB_RESTART. */
1760 log_unit_debug(UNIT(s
), "Scheduled restart job.");
1764 log_unit_warning(UNIT(s
), "Failed to schedule restart job: %s", bus_error_message(&error
, -r
));
1765 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1768 static void service_enter_reload_by_notify(Service
*s
) {
1771 if (s
->timeout_start_usec
> 0)
1772 service_arm_timer(s
, s
->timeout_start_usec
);
1774 service_set_state(s
, SERVICE_RELOAD
);
1777 static void service_enter_reload(Service
*s
) {
1782 service_unwatch_control_pid(s
);
1784 s
->control_command
= s
->exec_command
[SERVICE_EXEC_RELOAD
];
1785 if (s
->control_command
) {
1786 s
->control_command_id
= SERVICE_EXEC_RELOAD
;
1788 r
= service_spawn(s
,
1790 s
->timeout_start_usec
,
1792 !s
->permissions_start_only
,
1793 !s
->root_directory_start_only
,
1800 service_set_state(s
, SERVICE_RELOAD
);
1802 service_enter_running(s
, SERVICE_SUCCESS
);
1807 log_unit_warning_errno(UNIT(s
), r
, "Failed to run 'reload' task: %m");
1808 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
1809 service_enter_running(s
, SERVICE_SUCCESS
);
1812 static void service_run_next_control(Service
*s
) {
1816 assert(s
->control_command
);
1817 assert(s
->control_command
->command_next
);
1819 assert(s
->control_command_id
!= SERVICE_EXEC_START
);
1821 s
->control_command
= s
->control_command
->command_next
;
1822 service_unwatch_control_pid(s
);
1824 r
= service_spawn(s
,
1826 IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
) ? s
->timeout_start_usec
: s
->timeout_stop_usec
,
1828 !s
->permissions_start_only
,
1829 !s
->root_directory_start_only
,
1830 s
->control_command_id
== SERVICE_EXEC_START_PRE
||
1831 s
->control_command_id
== SERVICE_EXEC_STOP_POST
,
1840 log_unit_warning_errno(UNIT(s
), r
, "Failed to run next control task: %m");
1842 if (s
->state
== SERVICE_START_PRE
)
1843 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1844 else if (s
->state
== SERVICE_STOP
)
1845 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1846 else if (s
->state
== SERVICE_STOP_POST
)
1847 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1848 else if (s
->state
== SERVICE_RELOAD
) {
1849 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
1850 service_enter_running(s
, SERVICE_SUCCESS
);
1852 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1855 static void service_run_next_main(Service
*s
) {
1860 assert(s
->main_command
);
1861 assert(s
->main_command
->command_next
);
1862 assert(s
->type
== SERVICE_ONESHOT
);
1864 s
->main_command
= s
->main_command
->command_next
;
1865 service_unwatch_main_pid(s
);
1867 r
= service_spawn(s
,
1869 s
->timeout_start_usec
,
1879 service_set_main_pid(s
, pid
);
1884 log_unit_warning_errno(UNIT(s
), r
, "Failed to run next main task: %m");
1885 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1888 static int service_start_limit_test(Service
*s
) {
1891 if (ratelimit_test(&s
->start_limit
))
1894 log_unit_warning(UNIT(s
), "Start request repeated too quickly.");
1896 return failure_action(UNIT(s
)->manager
, s
->start_limit_action
, s
->reboot_arg
);
1899 static int service_start(Unit
*u
) {
1900 Service
*s
= SERVICE(u
);
1905 /* We cannot fulfill this request right now, try again later
1907 if (IN_SET(s
->state
,
1908 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1909 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))
1912 /* Already on it! */
1913 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
))
1916 /* A service that will be restarted must be stopped first to
1917 * trigger BindsTo and/or OnFailure dependencies. If a user
1918 * does not want to wait for the holdoff time to elapse, the
1919 * service should be manually restarted, not started. We
1920 * simply return EAGAIN here, so that any start jobs stay
1921 * queued, and assume that the auto restart timer will
1922 * eventually trigger the restart. */
1923 if (s
->state
== SERVICE_AUTO_RESTART
)
1926 assert(IN_SET(s
->state
, SERVICE_DEAD
, SERVICE_FAILED
));
1928 /* Make sure we don't enter a busy loop of some kind. */
1929 r
= service_start_limit_test(s
);
1931 service_enter_dead(s
, SERVICE_FAILURE_START_LIMIT
, false);
1935 s
->result
= SERVICE_SUCCESS
;
1936 s
->reload_result
= SERVICE_SUCCESS
;
1937 s
->main_pid_known
= false;
1938 s
->main_pid_alien
= false;
1939 s
->forbid_restart
= false;
1940 s
->reset_cpu_usage
= true;
1942 free(s
->status_text
);
1943 s
->status_text
= NULL
;
1944 s
->status_errno
= 0;
1946 s
->notify_state
= NOTIFY_UNKNOWN
;
1948 service_enter_start_pre(s
);
1952 static int service_stop(Unit
*u
) {
1953 Service
*s
= SERVICE(u
);
1957 /* Don't create restart jobs from manual stops. */
1958 s
->forbid_restart
= true;
1961 if (IN_SET(s
->state
,
1962 SERVICE_STOP
, SERVICE_STOP_SIGABRT
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
1963 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))
1966 /* A restart will be scheduled or is in progress. */
1967 if (s
->state
== SERVICE_AUTO_RESTART
) {
1968 service_set_state(s
, SERVICE_DEAD
);
1972 /* If there's already something running we go directly into
1974 if (IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RELOAD
)) {
1975 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
1979 assert(IN_SET(s
->state
, SERVICE_RUNNING
, SERVICE_EXITED
));
1981 service_enter_stop(s
, SERVICE_SUCCESS
);
1985 static int service_reload(Unit
*u
) {
1986 Service
*s
= SERVICE(u
);
1990 assert(s
->state
== SERVICE_RUNNING
|| s
->state
== SERVICE_EXITED
);
1992 service_enter_reload(s
);
1996 _pure_
static bool service_can_reload(Unit
*u
) {
1997 Service
*s
= SERVICE(u
);
2001 return !!s
->exec_command
[SERVICE_EXEC_RELOAD
];
2004 static int service_serialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
2005 Service
*s
= SERVICE(u
);
2012 unit_serialize_item(u
, f
, "state", service_state_to_string(s
->state
));
2013 unit_serialize_item(u
, f
, "result", service_result_to_string(s
->result
));
2014 unit_serialize_item(u
, f
, "reload-result", service_result_to_string(s
->reload_result
));
2016 if (s
->control_pid
> 0)
2017 unit_serialize_item_format(u
, f
, "control-pid", PID_FMT
, s
->control_pid
);
2019 if (s
->main_pid_known
&& s
->main_pid
> 0)
2020 unit_serialize_item_format(u
, f
, "main-pid", PID_FMT
, s
->main_pid
);
2022 unit_serialize_item(u
, f
, "main-pid-known", yes_no(s
->main_pid_known
));
2023 unit_serialize_item(u
, f
, "bus-name-good", yes_no(s
->bus_name_good
));
2025 if (s
->status_text
) {
2026 _cleanup_free_
char *c
= NULL
;
2028 c
= cescape(s
->status_text
);
2029 unit_serialize_item(u
, f
, "status-text", strempty(c
));
2032 /* FIXME: There's a minor uncleanliness here: if there are
2033 * multiple commands attached here, we will start from the
2034 * first one again */
2035 if (s
->control_command_id
>= 0)
2036 unit_serialize_item(u
, f
, "control-command", service_exec_command_to_string(s
->control_command_id
));
2038 if (s
->socket_fd
>= 0) {
2041 copy
= fdset_put_dup(fds
, s
->socket_fd
);
2045 unit_serialize_item_format(u
, f
, "socket-fd", "%i", copy
);
2048 if (s
->bus_endpoint_fd
>= 0) {
2051 copy
= fdset_put_dup(fds
, s
->bus_endpoint_fd
);
2055 unit_serialize_item_format(u
, f
, "endpoint-fd", "%i", copy
);
2058 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
2061 copy
= fdset_put_dup(fds
, fs
->fd
);
2065 unit_serialize_item_format(u
, f
, "fd-store-fd", "%i", copy
);
2068 if (s
->main_exec_status
.pid
> 0) {
2069 unit_serialize_item_format(u
, f
, "main-exec-status-pid", PID_FMT
, s
->main_exec_status
.pid
);
2070 dual_timestamp_serialize(f
, "main-exec-status-start", &s
->main_exec_status
.start_timestamp
);
2071 dual_timestamp_serialize(f
, "main-exec-status-exit", &s
->main_exec_status
.exit_timestamp
);
2073 if (dual_timestamp_is_set(&s
->main_exec_status
.exit_timestamp
)) {
2074 unit_serialize_item_format(u
, f
, "main-exec-status-code", "%i", s
->main_exec_status
.code
);
2075 unit_serialize_item_format(u
, f
, "main-exec-status-status", "%i", s
->main_exec_status
.status
);
2079 if (dual_timestamp_is_set(&s
->watchdog_timestamp
))
2080 dual_timestamp_serialize(f
, "watchdog-timestamp", &s
->watchdog_timestamp
);
2082 if (s
->forbid_restart
)
2083 unit_serialize_item(u
, f
, "forbid-restart", yes_no(s
->forbid_restart
));
2088 static int service_deserialize_item(Unit
*u
, const char *key
, const char *value
, FDSet
*fds
) {
2089 Service
*s
= SERVICE(u
);
2097 if (streq(key
, "state")) {
2100 state
= service_state_from_string(value
);
2102 log_unit_debug(u
, "Failed to parse state value: %s", value
);
2104 s
->deserialized_state
= state
;
2105 } else if (streq(key
, "result")) {
2108 f
= service_result_from_string(value
);
2110 log_unit_debug(u
, "Failed to parse result value: %s", value
);
2111 else if (f
!= SERVICE_SUCCESS
)
2114 } else if (streq(key
, "reload-result")) {
2117 f
= service_result_from_string(value
);
2119 log_unit_debug(u
, "Failed to parse reload result value: %s", value
);
2120 else if (f
!= SERVICE_SUCCESS
)
2121 s
->reload_result
= f
;
2123 } else if (streq(key
, "control-pid")) {
2126 if (parse_pid(value
, &pid
) < 0)
2127 log_unit_debug(u
, "Failed to parse control-pid value: %s", value
);
2129 s
->control_pid
= pid
;
2130 } else if (streq(key
, "main-pid")) {
2133 if (parse_pid(value
, &pid
) < 0)
2134 log_unit_debug(u
, "Failed to parse main-pid value: %s", value
);
2136 service_set_main_pid(s
, pid
);
2137 unit_watch_pid(UNIT(s
), pid
);
2139 } else if (streq(key
, "main-pid-known")) {
2142 b
= parse_boolean(value
);
2144 log_unit_debug(u
, "Failed to parse main-pid-known value: %s", value
);
2146 s
->main_pid_known
= b
;
2147 } else if (streq(key
, "bus-name-good")) {
2150 b
= parse_boolean(value
);
2152 log_unit_debug(u
, "Failed to parse bus-name-good value: %s", value
);
2154 s
->bus_name_good
= b
;
2155 } else if (streq(key
, "status-text")) {
2158 r
= cunescape(value
, 0, &t
);
2160 log_unit_debug_errno(u
, r
, "Failed to unescape status text: %s", value
);
2162 free(s
->status_text
);
2166 } else if (streq(key
, "control-command")) {
2167 ServiceExecCommand id
;
2169 id
= service_exec_command_from_string(value
);
2171 log_unit_debug(u
, "Failed to parse exec-command value: %s", value
);
2173 s
->control_command_id
= id
;
2174 s
->control_command
= s
->exec_command
[id
];
2176 } else if (streq(key
, "socket-fd")) {
2179 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2180 log_unit_debug(u
, "Failed to parse socket-fd value: %s", value
);
2182 asynchronous_close(s
->socket_fd
);
2183 s
->socket_fd
= fdset_remove(fds
, fd
);
2185 } else if (streq(key
, "endpoint-fd")) {
2188 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2189 log_unit_debug(u
, "Failed to parse endpoint-fd value: %s", value
);
2191 safe_close(s
->bus_endpoint_fd
);
2192 s
->bus_endpoint_fd
= fdset_remove(fds
, fd
);
2194 } else if (streq(key
, "fd-store-fd")) {
2197 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2198 log_unit_debug(u
, "Failed to parse fd-store-fd value: %s", value
);
2200 r
= service_add_fd_store(s
, fd
);
2202 log_unit_error_errno(u
, r
, "Failed to add fd to store: %m");
2204 fdset_remove(fds
, fd
);
2207 } else if (streq(key
, "main-exec-status-pid")) {
2210 if (parse_pid(value
, &pid
) < 0)
2211 log_unit_debug(u
, "Failed to parse main-exec-status-pid value: %s", value
);
2213 s
->main_exec_status
.pid
= pid
;
2214 } else if (streq(key
, "main-exec-status-code")) {
2217 if (safe_atoi(value
, &i
) < 0)
2218 log_unit_debug(u
, "Failed to parse main-exec-status-code value: %s", value
);
2220 s
->main_exec_status
.code
= i
;
2221 } else if (streq(key
, "main-exec-status-status")) {
2224 if (safe_atoi(value
, &i
) < 0)
2225 log_unit_debug(u
, "Failed to parse main-exec-status-status value: %s", value
);
2227 s
->main_exec_status
.status
= i
;
2228 } else if (streq(key
, "main-exec-status-start"))
2229 dual_timestamp_deserialize(value
, &s
->main_exec_status
.start_timestamp
);
2230 else if (streq(key
, "main-exec-status-exit"))
2231 dual_timestamp_deserialize(value
, &s
->main_exec_status
.exit_timestamp
);
2232 else if (streq(key
, "watchdog-timestamp"))
2233 dual_timestamp_deserialize(value
, &s
->watchdog_timestamp
);
2234 else if (streq(key
, "forbid-restart")) {
2237 b
= parse_boolean(value
);
2239 log_unit_debug(u
, "Failed to parse forbid-restart value: %s", value
);
2241 s
->forbid_restart
= b
;
2243 log_unit_debug(u
, "Unknown serialization key: %s", key
);
2248 _pure_
static UnitActiveState
service_active_state(Unit
*u
) {
2249 const UnitActiveState
*table
;
2253 table
= SERVICE(u
)->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
2255 return table
[SERVICE(u
)->state
];
2258 static const char *service_sub_state_to_string(Unit
*u
) {
2261 return service_state_to_string(SERVICE(u
)->state
);
2264 static bool service_check_gc(Unit
*u
) {
2265 Service
*s
= SERVICE(u
);
2269 /* Never clean up services that still have a process around,
2270 * even if the service is formally dead. */
2271 if (cgroup_good(s
) > 0 ||
2272 main_pid_good(s
) > 0 ||
2273 control_pid_good(s
) > 0)
2279 _pure_
static bool service_check_snapshot(Unit
*u
) {
2280 Service
*s
= SERVICE(u
);
2284 return s
->socket_fd
< 0;
2287 static int service_retry_pid_file(Service
*s
) {
2290 assert(s
->pid_file
);
2291 assert(s
->state
== SERVICE_START
|| s
->state
== SERVICE_START_POST
);
2293 r
= service_load_pid_file(s
, false);
2297 service_unwatch_pid_file(s
);
2299 service_enter_running(s
, SERVICE_SUCCESS
);
2303 static int service_watch_pid_file(Service
*s
) {
2306 log_unit_debug(UNIT(s
), "Setting watch for PID file %s", s
->pid_file_pathspec
->path
);
2308 r
= path_spec_watch(s
->pid_file_pathspec
, service_dispatch_io
);
2312 /* the pidfile might have appeared just before we set the watch */
2313 log_unit_debug(UNIT(s
), "Trying to read PID file %s in case it changed", s
->pid_file_pathspec
->path
);
2314 service_retry_pid_file(s
);
2318 log_unit_error_errno(UNIT(s
), r
, "Failed to set a watch for PID file %s: %m", s
->pid_file_pathspec
->path
);
2319 service_unwatch_pid_file(s
);
2323 static int service_demand_pid_file(Service
*s
) {
2326 assert(s
->pid_file
);
2327 assert(!s
->pid_file_pathspec
);
2329 ps
= new0(PathSpec
, 1);
2334 ps
->path
= strdup(s
->pid_file
);
2340 path_kill_slashes(ps
->path
);
2342 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2343 * keep their PID file open all the time. */
2344 ps
->type
= PATH_MODIFIED
;
2345 ps
->inotify_fd
= -1;
2347 s
->pid_file_pathspec
= ps
;
2349 return service_watch_pid_file(s
);
2352 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
) {
2353 PathSpec
*p
= userdata
;
2358 s
= SERVICE(p
->unit
);
2362 assert(s
->state
== SERVICE_START
|| s
->state
== SERVICE_START_POST
);
2363 assert(s
->pid_file_pathspec
);
2364 assert(path_spec_owns_inotify_fd(s
->pid_file_pathspec
, fd
));
2366 log_unit_debug(UNIT(s
), "inotify event");
2368 if (path_spec_fd_event(p
, events
) < 0)
2371 if (service_retry_pid_file(s
) == 0)
2374 if (service_watch_pid_file(s
) < 0)
2380 service_unwatch_pid_file(s
);
2381 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2385 static void service_notify_cgroup_empty_event(Unit
*u
) {
2386 Service
*s
= SERVICE(u
);
2390 log_unit_debug(u
, "cgroup is empty");
2394 /* Waiting for SIGCHLD is usually more interesting,
2395 * because it includes return codes/signals. Which is
2396 * why we ignore the cgroup events for most cases,
2397 * except when we don't know pid which to expect the
2401 case SERVICE_START_POST
:
2402 /* If we were hoping for the daemon to write its PID file,
2403 * we can give up now. */
2404 if (s
->pid_file_pathspec
) {
2405 log_unit_warning(u
, "Daemon never wrote its PID file. Failing.");
2407 service_unwatch_pid_file(s
);
2408 if (s
->state
== SERVICE_START
)
2409 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2411 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2415 case SERVICE_RUNNING
:
2416 /* service_enter_running() will figure out what to do */
2417 service_enter_running(s
, SERVICE_SUCCESS
);
2420 case SERVICE_STOP_SIGABRT
:
2421 case SERVICE_STOP_SIGTERM
:
2422 case SERVICE_STOP_SIGKILL
:
2424 if (main_pid_good(s
) <= 0 && !control_pid_good(s
))
2425 service_enter_stop_post(s
, SERVICE_SUCCESS
);
2429 case SERVICE_STOP_POST
:
2430 case SERVICE_FINAL_SIGTERM
:
2431 case SERVICE_FINAL_SIGKILL
:
2432 if (main_pid_good(s
) <= 0 && !control_pid_good(s
))
2433 service_enter_dead(s
, SERVICE_SUCCESS
, true);
2442 static void service_sigchld_event(Unit
*u
, pid_t pid
, int code
, int status
) {
2443 Service
*s
= SERVICE(u
);
2449 if (UNIT(s
)->fragment_path
? is_clean_exit(code
, status
, &s
->success_status
) :
2450 is_clean_exit_lsb(code
, status
, &s
->success_status
))
2451 f
= SERVICE_SUCCESS
;
2452 else if (code
== CLD_EXITED
)
2453 f
= SERVICE_FAILURE_EXIT_CODE
;
2454 else if (code
== CLD_KILLED
)
2455 f
= SERVICE_FAILURE_SIGNAL
;
2456 else if (code
== CLD_DUMPED
)
2457 f
= SERVICE_FAILURE_CORE_DUMP
;
2459 assert_not_reached("Unknown code");
2461 if (s
->main_pid
== pid
) {
2462 /* Forking services may occasionally move to a new PID.
2463 * As long as they update the PID file before exiting the old
2464 * PID, they're fine. */
2465 if (service_load_pid_file(s
, false) == 0)
2469 exec_status_exit(&s
->main_exec_status
, &s
->exec_context
, pid
, code
, status
);
2471 if (s
->main_command
) {
2472 /* If this is not a forking service than the
2473 * main process got started and hence we copy
2474 * the exit status so that it is recorded both
2475 * as main and as control process exit
2478 s
->main_command
->exec_status
= s
->main_exec_status
;
2480 if (s
->main_command
->ignore
)
2481 f
= SERVICE_SUCCESS
;
2482 } else if (s
->exec_command
[SERVICE_EXEC_START
]) {
2484 /* If this is a forked process, then we should
2485 * ignore the return value if this was
2486 * configured for the starter process */
2488 if (s
->exec_command
[SERVICE_EXEC_START
]->ignore
)
2489 f
= SERVICE_SUCCESS
;
2492 log_struct(f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
,
2494 LOG_UNIT_MESSAGE(u
, "Main process exited, code=%s, status=%i/%s",
2495 sigchld_code_to_string(code
), status
,
2496 strna(code
== CLD_EXITED
2497 ? exit_status_to_string(status
, EXIT_STATUS_FULL
)
2498 : signal_to_string(status
))),
2499 "EXIT_CODE=%s", sigchld_code_to_string(code
),
2500 "EXIT_STATUS=%i", status
,
2503 if (f
!= SERVICE_SUCCESS
)
2506 if (s
->main_command
&&
2507 s
->main_command
->command_next
&&
2508 f
== SERVICE_SUCCESS
) {
2510 /* There is another command to *
2511 * execute, so let's do that. */
2513 log_unit_debug(u
, "Running next main command for state %s.", service_state_to_string(s
->state
));
2514 service_run_next_main(s
);
2518 /* The service exited, so the service is officially
2520 s
->main_command
= NULL
;
2524 case SERVICE_START_POST
:
2525 case SERVICE_RELOAD
:
2527 /* Need to wait until the operation is
2532 if (s
->type
== SERVICE_ONESHOT
) {
2533 /* This was our main goal, so let's go on */
2534 if (f
== SERVICE_SUCCESS
)
2535 service_enter_start_post(s
);
2537 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2543 case SERVICE_RUNNING
:
2544 service_enter_running(s
, f
);
2547 case SERVICE_STOP_SIGABRT
:
2548 case SERVICE_STOP_SIGTERM
:
2549 case SERVICE_STOP_SIGKILL
:
2551 if (!control_pid_good(s
))
2552 service_enter_stop_post(s
, f
);
2554 /* If there is still a control process, wait for that first */
2557 case SERVICE_STOP_POST
:
2558 case SERVICE_FINAL_SIGTERM
:
2559 case SERVICE_FINAL_SIGKILL
:
2561 if (!control_pid_good(s
))
2562 service_enter_dead(s
, f
, true);
2566 assert_not_reached("Uh, main process died at wrong time.");
2570 } else if (s
->control_pid
== pid
) {
2573 if (s
->control_command
) {
2574 exec_status_exit(&s
->control_command
->exec_status
, &s
->exec_context
, pid
, code
, status
);
2576 if (s
->control_command
->ignore
)
2577 f
= SERVICE_SUCCESS
;
2580 log_unit_full(u
, f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
, 0,
2581 "Control process exited, code=%s status=%i",
2582 sigchld_code_to_string(code
), status
);
2584 if (f
!= SERVICE_SUCCESS
)
2587 /* Immediately get rid of the cgroup, so that the
2588 * kernel doesn't delay the cgroup empty messages for
2589 * the service cgroup any longer than necessary */
2590 service_kill_control_processes(s
);
2592 if (s
->control_command
&&
2593 s
->control_command
->command_next
&&
2594 f
== SERVICE_SUCCESS
) {
2596 /* There is another command to *
2597 * execute, so let's do that. */
2599 log_unit_debug(u
, "Running next control command for state %s.", service_state_to_string(s
->state
));
2600 service_run_next_control(s
);
2603 /* No further commands for this step, so let's
2604 * figure out what to do next */
2606 s
->control_command
= NULL
;
2607 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
2609 log_unit_debug(u
, "Got final SIGCHLD for state %s.", service_state_to_string(s
->state
));
2613 case SERVICE_START_PRE
:
2614 if (f
== SERVICE_SUCCESS
)
2615 service_enter_start(s
);
2617 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2621 if (s
->type
!= SERVICE_FORKING
)
2622 /* Maybe spurious event due to a reload that changed the type? */
2625 if (f
!= SERVICE_SUCCESS
) {
2626 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2631 bool has_start_post
;
2634 /* Let's try to load the pid file here if we can.
2635 * The PID file might actually be created by a START_POST
2636 * script. In that case don't worry if the loading fails. */
2638 has_start_post
= !!s
->exec_command
[SERVICE_EXEC_START_POST
];
2639 r
= service_load_pid_file(s
, !has_start_post
);
2640 if (!has_start_post
&& r
< 0) {
2641 r
= service_demand_pid_file(s
);
2642 if (r
< 0 || !cgroup_good(s
))
2643 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2647 (void) service_search_main_pid(s
);
2649 service_enter_start_post(s
);
2652 case SERVICE_START_POST
:
2653 if (f
!= SERVICE_SUCCESS
) {
2654 service_enter_stop(s
, f
);
2661 r
= service_load_pid_file(s
, true);
2663 r
= service_demand_pid_file(s
);
2664 if (r
< 0 || !cgroup_good(s
))
2665 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2669 (void) service_search_main_pid(s
);
2671 service_enter_running(s
, SERVICE_SUCCESS
);
2674 case SERVICE_RELOAD
:
2675 if (f
== SERVICE_SUCCESS
) {
2676 service_load_pid_file(s
, true);
2677 (void) service_search_main_pid(s
);
2680 s
->reload_result
= f
;
2681 service_enter_running(s
, SERVICE_SUCCESS
);
2685 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
2688 case SERVICE_STOP_SIGABRT
:
2689 case SERVICE_STOP_SIGTERM
:
2690 case SERVICE_STOP_SIGKILL
:
2691 if (main_pid_good(s
) <= 0)
2692 service_enter_stop_post(s
, f
);
2694 /* If there is still a service
2695 * process around, wait until
2696 * that one quit, too */
2699 case SERVICE_STOP_POST
:
2700 case SERVICE_FINAL_SIGTERM
:
2701 case SERVICE_FINAL_SIGKILL
:
2702 if (main_pid_good(s
) <= 0)
2703 service_enter_dead(s
, f
, true);
2707 assert_not_reached("Uh, control process died at wrong time.");
2712 /* Notify clients about changed exit status */
2713 unit_add_to_dbus_queue(u
);
2715 /* We got one SIGCHLD for the service, let's watch all
2716 * processes that are now running of the service, and watch
2717 * that. Among the PIDs we then watch will be children
2718 * reassigned to us, which hopefully allows us to identify
2719 * when all children are gone */
2720 unit_tidy_watch_pids(u
, s
->main_pid
, s
->control_pid
);
2721 unit_watch_all_pids(u
);
2723 /* If the PID set is empty now, then let's finish this off */
2724 if (set_isempty(u
->pids
))
2725 service_notify_cgroup_empty_event(u
);
2728 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
) {
2729 Service
*s
= SERVICE(userdata
);
2732 assert(source
== s
->timer_event_source
);
2736 case SERVICE_START_PRE
:
2738 log_unit_warning(UNIT(s
), "%s operation timed out. Terminating.", s
->state
== SERVICE_START
? "Start" : "Start-pre");
2739 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2742 case SERVICE_START_POST
:
2743 log_unit_warning(UNIT(s
), "Start-post operation timed out. Stopping.");
2744 service_enter_stop(s
, SERVICE_FAILURE_TIMEOUT
);
2747 case SERVICE_RELOAD
:
2748 log_unit_warning(UNIT(s
), "Reload operation timed out. Stopping.");
2749 s
->reload_result
= SERVICE_FAILURE_TIMEOUT
;
2750 service_enter_running(s
, SERVICE_SUCCESS
);
2754 log_unit_warning(UNIT(s
), "Stopping timed out. Terminating.");
2755 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2758 case SERVICE_STOP_SIGABRT
:
2759 log_unit_warning(UNIT(s
), "State 'stop-sigabrt' timed out. Terminating.");
2760 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2763 case SERVICE_STOP_SIGTERM
:
2764 if (s
->kill_context
.send_sigkill
) {
2765 log_unit_warning(UNIT(s
), "State 'stop-sigterm' timed out. Killing.");
2766 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
2768 log_unit_warning(UNIT(s
), "State 'stop-sigterm' timed out. Skipping SIGKILL.");
2769 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
2774 case SERVICE_STOP_SIGKILL
:
2775 /* Uh, we sent a SIGKILL and it is still not gone?
2776 * Must be something we cannot kill, so let's just be
2777 * weirded out and continue */
2779 log_unit_warning(UNIT(s
), "Processes still around after SIGKILL. Ignoring.");
2780 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
2783 case SERVICE_STOP_POST
:
2784 log_unit_warning(UNIT(s
), "State 'stop-post' timed out. Terminating.");
2785 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2788 case SERVICE_FINAL_SIGTERM
:
2789 if (s
->kill_context
.send_sigkill
) {
2790 log_unit_warning(UNIT(s
), "State 'stop-final-sigterm' timed out. Killing.");
2791 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
2793 log_unit_warning(UNIT(s
), "State 'stop-final-sigterm' timed out. Skipping SIGKILL. Entering failed mode.");
2794 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, false);
2799 case SERVICE_FINAL_SIGKILL
:
2800 log_unit_warning(UNIT(s
), "Processes still around after final SIGKILL. Entering failed mode.");
2801 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, true);
2804 case SERVICE_AUTO_RESTART
:
2805 log_unit_info(UNIT(s
),
2806 s
->restart_usec
> 0 ?
2807 "Service hold-off time over, scheduling restart." :
2808 "Service has no hold-off time, scheduling restart.");
2809 service_enter_restart(s
);
2813 assert_not_reached("Timeout at wrong time.");
2819 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
) {
2820 Service
*s
= SERVICE(userdata
);
2821 char t
[FORMAT_TIMESPAN_MAX
];
2824 assert(source
== s
->watchdog_event_source
);
2826 log_unit_error(UNIT(s
), "Watchdog timeout (limit %s)!",
2827 format_timespan(t
, sizeof(t
), s
->watchdog_usec
, 1));
2829 service_enter_signal(s
, SERVICE_STOP_SIGABRT
, SERVICE_FAILURE_WATCHDOG
);
2834 static void service_notify_message(Unit
*u
, pid_t pid
, char **tags
, FDSet
*fds
) {
2835 Service
*s
= SERVICE(u
);
2836 _cleanup_free_
char *cc
= NULL
;
2837 bool notify_dbus
= false;
2842 cc
= strv_join(tags
, ", ");
2844 if (s
->notify_access
== NOTIFY_NONE
) {
2845 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception is disabled.", pid
);
2847 } else if (s
->notify_access
== NOTIFY_MAIN
&& pid
!= s
->main_pid
) {
2848 if (s
->main_pid
!= 0)
2849 log_unit_warning(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for main PID "PID_FMT
, pid
, s
->main_pid
);
2851 log_unit_debug(u
, "Got notification message from PID "PID_FMT
", but reception only permitted for main PID which is currently not known", pid
);
2854 log_unit_debug(u
, "Got notification message from PID "PID_FMT
" (%s)", pid
, isempty(cc
) ? "n/a" : cc
);
2856 /* Interpret MAINPID= */
2857 e
= strv_find_startswith(tags
, "MAINPID=");
2858 if (e
&& IN_SET(s
->state
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
)) {
2859 if (parse_pid(e
, &pid
) < 0)
2860 log_unit_warning(u
, "Failed to parse MAINPID= field in notification message: %s", e
);
2862 service_set_main_pid(s
, pid
);
2863 unit_watch_pid(UNIT(s
), pid
);
2868 /* Interpret RELOADING= */
2869 if (strv_find(tags
, "RELOADING=1")) {
2871 s
->notify_state
= NOTIFY_RELOADING
;
2873 if (s
->state
== SERVICE_RUNNING
)
2874 service_enter_reload_by_notify(s
);
2879 /* Interpret READY= */
2880 if (strv_find(tags
, "READY=1")) {
2882 s
->notify_state
= NOTIFY_READY
;
2884 /* Type=notify services inform us about completed
2885 * initialization with READY=1 */
2886 if (s
->type
== SERVICE_NOTIFY
&& s
->state
== SERVICE_START
)
2887 service_enter_start_post(s
);
2889 /* Sending READY=1 while we are reloading informs us
2890 * that the reloading is complete */
2891 if (s
->state
== SERVICE_RELOAD
&& s
->control_pid
== 0)
2892 service_enter_running(s
, SERVICE_SUCCESS
);
2897 /* Interpret STOPPING= */
2898 if (strv_find(tags
, "STOPPING=1")) {
2900 s
->notify_state
= NOTIFY_STOPPING
;
2902 if (s
->state
== SERVICE_RUNNING
)
2903 service_enter_stop_by_notify(s
);
2908 /* Interpret STATUS= */
2909 e
= strv_find_startswith(tags
, "STATUS=");
2911 _cleanup_free_
char *t
= NULL
;
2914 if (!utf8_is_valid(e
))
2915 log_unit_warning(u
, "Status message in notification message is not UTF-8 clean.");
2923 if (!streq_ptr(s
->status_text
, t
)) {
2925 free(s
->status_text
);
2933 /* Interpret ERRNO= */
2934 e
= strv_find_startswith(tags
, "ERRNO=");
2938 if (safe_atoi(e
, &status_errno
) < 0 || status_errno
< 0)
2939 log_unit_warning(u
, "Failed to parse ERRNO= field in notification message: %s", e
);
2941 if (s
->status_errno
!= status_errno
) {
2942 s
->status_errno
= status_errno
;
2948 /* Interpret WATCHDOG= */
2949 if (strv_find(tags
, "WATCHDOG=1")) {
2950 service_reset_watchdog(s
);
2953 /* Add the passed fds to the fd store */
2954 if (strv_find(tags
, "FDSTORE=1")) {
2955 service_add_fd_store_set(s
, fds
);
2958 /* Notify clients about changed status or main pid */
2960 unit_add_to_dbus_queue(u
);
2963 static int service_get_timeout(Unit
*u
, uint64_t *timeout
) {
2964 Service
*s
= SERVICE(u
);
2967 if (!s
->timer_event_source
)
2970 r
= sd_event_source_get_time(s
->timer_event_source
, timeout
);
2977 static void service_bus_name_owner_change(
2980 const char *old_owner
,
2981 const char *new_owner
) {
2983 Service
*s
= SERVICE(u
);
2989 assert(streq(s
->bus_name
, name
));
2990 assert(old_owner
|| new_owner
);
2992 if (old_owner
&& new_owner
)
2993 log_unit_debug(u
, "D-Bus name %s changed owner from %s to %s", name
, old_owner
, new_owner
);
2995 log_unit_debug(u
, "D-Bus name %s no longer registered by %s", name
, old_owner
);
2997 log_unit_debug(u
, "D-Bus name %s now registered by %s", name
, new_owner
);
2999 s
->bus_name_good
= !!new_owner
;
3001 if (s
->type
== SERVICE_DBUS
) {
3003 /* service_enter_running() will figure out what to
3005 if (s
->state
== SERVICE_RUNNING
)
3006 service_enter_running(s
, SERVICE_SUCCESS
);
3007 else if (s
->state
== SERVICE_START
&& new_owner
)
3008 service_enter_start_post(s
);
3010 } else if (new_owner
&&
3012 (s
->state
== SERVICE_START
||
3013 s
->state
== SERVICE_START_POST
||
3014 s
->state
== SERVICE_RUNNING
||
3015 s
->state
== SERVICE_RELOAD
)) {
3017 _cleanup_bus_creds_unref_ sd_bus_creds
*creds
= NULL
;
3020 /* Try to acquire PID from bus service */
3022 r
= sd_bus_get_name_creds(u
->manager
->api_bus
, name
, SD_BUS_CREDS_PID
, &creds
);
3024 r
= sd_bus_creds_get_pid(creds
, &pid
);
3026 log_unit_debug(u
, "D-Bus name %s is now owned by process %u", name
, (unsigned) pid
);
3028 service_set_main_pid(s
, pid
);
3029 unit_watch_pid(UNIT(s
), pid
);
3034 int service_set_socket_fd(Service
*s
, int fd
, Socket
*sock
, bool selinux_context_net
) {
3035 _cleanup_free_
char *peer
= NULL
;
3041 /* This is called by the socket code when instantiating a new
3042 * service for a stream socket and the socket needs to be
3045 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
3048 if (s
->socket_fd
>= 0)
3051 if (s
->state
!= SERVICE_DEAD
)
3054 if (getpeername_pretty(fd
, &peer
) >= 0) {
3056 if (UNIT(s
)->description
) {
3057 _cleanup_free_
char *a
;
3059 a
= strjoin(UNIT(s
)->description
, " (", peer
, ")", NULL
);
3063 r
= unit_set_description(UNIT(s
), a
);
3065 r
= unit_set_description(UNIT(s
), peer
);
3072 s
->socket_fd_selinux_context_net
= selinux_context_net
;
3074 unit_ref_set(&s
->accept_socket
, UNIT(sock
));
3076 return unit_add_two_dependencies(UNIT(sock
), UNIT_BEFORE
, UNIT_TRIGGERS
, UNIT(s
), false);
3079 static void service_reset_failed(Unit
*u
) {
3080 Service
*s
= SERVICE(u
);
3084 if (s
->state
== SERVICE_FAILED
)
3085 service_set_state(s
, SERVICE_DEAD
);
3087 s
->result
= SERVICE_SUCCESS
;
3088 s
->reload_result
= SERVICE_SUCCESS
;
3090 RATELIMIT_RESET(s
->start_limit
);
3093 static int service_kill(Unit
*u
, KillWho who
, int signo
, sd_bus_error
*error
) {
3094 Service
*s
= SERVICE(u
);
3096 return unit_kill_common(u
, who
, signo
, s
->main_pid
, s
->control_pid
, error
);
3099 static const char* const service_state_table
[_SERVICE_STATE_MAX
] = {
3100 [SERVICE_DEAD
] = "dead",
3101 [SERVICE_START_PRE
] = "start-pre",
3102 [SERVICE_START
] = "start",
3103 [SERVICE_START_POST
] = "start-post",
3104 [SERVICE_RUNNING
] = "running",
3105 [SERVICE_EXITED
] = "exited",
3106 [SERVICE_RELOAD
] = "reload",
3107 [SERVICE_STOP
] = "stop",
3108 [SERVICE_STOP_SIGABRT
] = "stop-sigabrt",
3109 [SERVICE_STOP_SIGTERM
] = "stop-sigterm",
3110 [SERVICE_STOP_SIGKILL
] = "stop-sigkill",
3111 [SERVICE_STOP_POST
] = "stop-post",
3112 [SERVICE_FINAL_SIGTERM
] = "final-sigterm",
3113 [SERVICE_FINAL_SIGKILL
] = "final-sigkill",
3114 [SERVICE_FAILED
] = "failed",
3115 [SERVICE_AUTO_RESTART
] = "auto-restart",
3118 DEFINE_STRING_TABLE_LOOKUP(service_state
, ServiceState
);
3120 static const char* const service_restart_table
[_SERVICE_RESTART_MAX
] = {
3121 [SERVICE_RESTART_NO
] = "no",
3122 [SERVICE_RESTART_ON_SUCCESS
] = "on-success",
3123 [SERVICE_RESTART_ON_FAILURE
] = "on-failure",
3124 [SERVICE_RESTART_ON_ABNORMAL
] = "on-abnormal",
3125 [SERVICE_RESTART_ON_WATCHDOG
] = "on-watchdog",
3126 [SERVICE_RESTART_ON_ABORT
] = "on-abort",
3127 [SERVICE_RESTART_ALWAYS
] = "always",
3130 DEFINE_STRING_TABLE_LOOKUP(service_restart
, ServiceRestart
);
3132 static const char* const service_type_table
[_SERVICE_TYPE_MAX
] = {
3133 [SERVICE_SIMPLE
] = "simple",
3134 [SERVICE_FORKING
] = "forking",
3135 [SERVICE_ONESHOT
] = "oneshot",
3136 [SERVICE_DBUS
] = "dbus",
3137 [SERVICE_NOTIFY
] = "notify",
3138 [SERVICE_IDLE
] = "idle"
3141 DEFINE_STRING_TABLE_LOOKUP(service_type
, ServiceType
);
3143 static const char* const service_exec_command_table
[_SERVICE_EXEC_COMMAND_MAX
] = {
3144 [SERVICE_EXEC_START_PRE
] = "ExecStartPre",
3145 [SERVICE_EXEC_START
] = "ExecStart",
3146 [SERVICE_EXEC_START_POST
] = "ExecStartPost",
3147 [SERVICE_EXEC_RELOAD
] = "ExecReload",
3148 [SERVICE_EXEC_STOP
] = "ExecStop",
3149 [SERVICE_EXEC_STOP_POST
] = "ExecStopPost",
3152 DEFINE_STRING_TABLE_LOOKUP(service_exec_command
, ServiceExecCommand
);
3154 static const char* const notify_access_table
[_NOTIFY_ACCESS_MAX
] = {
3155 [NOTIFY_NONE
] = "none",
3156 [NOTIFY_MAIN
] = "main",
3157 [NOTIFY_ALL
] = "all"
3160 DEFINE_STRING_TABLE_LOOKUP(notify_access
, NotifyAccess
);
3162 static const char* const notify_state_table
[_NOTIFY_STATE_MAX
] = {
3163 [NOTIFY_UNKNOWN
] = "unknown",
3164 [NOTIFY_READY
] = "ready",
3165 [NOTIFY_RELOADING
] = "reloading",
3166 [NOTIFY_STOPPING
] = "stopping",
3169 DEFINE_STRING_TABLE_LOOKUP(notify_state
, NotifyState
);
3171 static const char* const service_result_table
[_SERVICE_RESULT_MAX
] = {
3172 [SERVICE_SUCCESS
] = "success",
3173 [SERVICE_FAILURE_RESOURCES
] = "resources",
3174 [SERVICE_FAILURE_TIMEOUT
] = "timeout",
3175 [SERVICE_FAILURE_EXIT_CODE
] = "exit-code",
3176 [SERVICE_FAILURE_SIGNAL
] = "signal",
3177 [SERVICE_FAILURE_CORE_DUMP
] = "core-dump",
3178 [SERVICE_FAILURE_WATCHDOG
] = "watchdog",
3179 [SERVICE_FAILURE_START_LIMIT
] = "start-limit"
3182 DEFINE_STRING_TABLE_LOOKUP(service_result
, ServiceResult
);
3184 const UnitVTable service_vtable
= {
3185 .object_size
= sizeof(Service
),
3186 .exec_context_offset
= offsetof(Service
, exec_context
),
3187 .cgroup_context_offset
= offsetof(Service
, cgroup_context
),
3188 .kill_context_offset
= offsetof(Service
, kill_context
),
3189 .exec_runtime_offset
= offsetof(Service
, exec_runtime
),
3195 .private_section
= "Service",
3197 .init
= service_init
,
3198 .done
= service_done
,
3199 .load
= service_load
,
3200 .release_resources
= service_release_resources
,
3202 .coldplug
= service_coldplug
,
3204 .dump
= service_dump
,
3206 .start
= service_start
,
3207 .stop
= service_stop
,
3208 .reload
= service_reload
,
3210 .can_reload
= service_can_reload
,
3212 .kill
= service_kill
,
3214 .serialize
= service_serialize
,
3215 .deserialize_item
= service_deserialize_item
,
3217 .active_state
= service_active_state
,
3218 .sub_state_to_string
= service_sub_state_to_string
,
3220 .check_gc
= service_check_gc
,
3221 .check_snapshot
= service_check_snapshot
,
3223 .sigchld_event
= service_sigchld_event
,
3225 .reset_failed
= service_reset_failed
,
3227 .notify_cgroup_empty
= service_notify_cgroup_empty_event
,
3228 .notify_message
= service_notify_message
,
3230 .bus_name_owner_change
= service_bus_name_owner_change
,
3232 .bus_vtable
= bus_service_vtable
,
3233 .bus_set_property
= bus_service_set_property
,
3234 .bus_commit_properties
= bus_service_commit_properties
,
3236 .get_timeout
= service_get_timeout
,
3237 .can_transient
= true,
3239 .status_message_formats
= {
3240 .starting_stopping
= {
3241 [0] = "Starting %s...",
3242 [1] = "Stopping %s...",
3244 .finished_start_job
= {
3245 [JOB_DONE
] = "Started %s.",
3246 [JOB_FAILED
] = "Failed to start %s.",
3248 .finished_stop_job
= {
3249 [JOB_DONE
] = "Stopped %s.",
3250 [JOB_FAILED
] = "Stopped (with error) %s.",