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/>.
31 #include "load-fragment.h"
32 #include "load-dropin.h"
35 #include "unit-name.h"
36 #include "unit-printf.h"
37 #include "dbus-service.h"
39 #include "exit-status.h"
41 #include "path-util.h"
46 #include "bus-error.h"
48 #include "bus-kernel.h"
50 static const UnitActiveState state_translation_table
[_SERVICE_STATE_MAX
] = {
51 [SERVICE_DEAD
] = UNIT_INACTIVE
,
52 [SERVICE_START_PRE
] = UNIT_ACTIVATING
,
53 [SERVICE_START
] = UNIT_ACTIVATING
,
54 [SERVICE_START_POST
] = UNIT_ACTIVATING
,
55 [SERVICE_RUNNING
] = UNIT_ACTIVE
,
56 [SERVICE_EXITED
] = UNIT_ACTIVE
,
57 [SERVICE_RELOAD
] = UNIT_RELOADING
,
58 [SERVICE_STOP
] = UNIT_DEACTIVATING
,
59 [SERVICE_STOP_SIGABRT
] = UNIT_DEACTIVATING
,
60 [SERVICE_STOP_SIGTERM
] = UNIT_DEACTIVATING
,
61 [SERVICE_STOP_SIGKILL
] = UNIT_DEACTIVATING
,
62 [SERVICE_STOP_POST
] = UNIT_DEACTIVATING
,
63 [SERVICE_FINAL_SIGTERM
] = UNIT_DEACTIVATING
,
64 [SERVICE_FINAL_SIGKILL
] = UNIT_DEACTIVATING
,
65 [SERVICE_FAILED
] = UNIT_FAILED
,
66 [SERVICE_AUTO_RESTART
] = UNIT_ACTIVATING
69 /* For Type=idle we never want to delay any other jobs, hence we
70 * consider idle jobs active as soon as we start working on them */
71 static const UnitActiveState state_translation_table_idle
[_SERVICE_STATE_MAX
] = {
72 [SERVICE_DEAD
] = UNIT_INACTIVE
,
73 [SERVICE_START_PRE
] = UNIT_ACTIVE
,
74 [SERVICE_START
] = UNIT_ACTIVE
,
75 [SERVICE_START_POST
] = UNIT_ACTIVE
,
76 [SERVICE_RUNNING
] = UNIT_ACTIVE
,
77 [SERVICE_EXITED
] = UNIT_ACTIVE
,
78 [SERVICE_RELOAD
] = UNIT_RELOADING
,
79 [SERVICE_STOP
] = UNIT_DEACTIVATING
,
80 [SERVICE_STOP_SIGABRT
] = UNIT_DEACTIVATING
,
81 [SERVICE_STOP_SIGTERM
] = UNIT_DEACTIVATING
,
82 [SERVICE_STOP_SIGKILL
] = UNIT_DEACTIVATING
,
83 [SERVICE_STOP_POST
] = UNIT_DEACTIVATING
,
84 [SERVICE_FINAL_SIGTERM
] = UNIT_DEACTIVATING
,
85 [SERVICE_FINAL_SIGKILL
] = UNIT_DEACTIVATING
,
86 [SERVICE_FAILED
] = UNIT_FAILED
,
87 [SERVICE_AUTO_RESTART
] = UNIT_ACTIVATING
90 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
);
91 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
);
92 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
);
94 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
);
95 static void service_enter_reload_by_notify(Service
*s
);
97 static void service_init(Unit
*u
) {
98 Service
*s
= SERVICE(u
);
101 assert(u
->load_state
== UNIT_STUB
);
103 s
->timeout_start_usec
= u
->manager
->default_timeout_start_usec
;
104 s
->timeout_stop_usec
= u
->manager
->default_timeout_stop_usec
;
105 s
->restart_usec
= u
->manager
->default_restart_usec
;
106 s
->type
= _SERVICE_TYPE_INVALID
;
108 s
->bus_endpoint_fd
= -1;
109 s
->guess_main_pid
= true;
111 RATELIMIT_INIT(s
->start_limit
, u
->manager
->default_start_limit_interval
, u
->manager
->default_start_limit_burst
);
113 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
116 static void service_unwatch_control_pid(Service
*s
) {
119 if (s
->control_pid
<= 0)
122 unit_unwatch_pid(UNIT(s
), s
->control_pid
);
126 static void service_unwatch_main_pid(Service
*s
) {
129 if (s
->main_pid
<= 0)
132 unit_unwatch_pid(UNIT(s
), s
->main_pid
);
136 static void service_unwatch_pid_file(Service
*s
) {
137 if (!s
->pid_file_pathspec
)
140 log_unit_debug(UNIT(s
)->id
, "Stopping watch for %s's PID file %s", UNIT(s
)->id
, s
->pid_file_pathspec
->path
);
141 path_spec_unwatch(s
->pid_file_pathspec
);
142 path_spec_done(s
->pid_file_pathspec
);
143 free(s
->pid_file_pathspec
);
144 s
->pid_file_pathspec
= NULL
;
147 static int service_set_main_pid(Service
*s
, pid_t pid
) {
158 if (s
->main_pid
== pid
&& s
->main_pid_known
)
161 if (s
->main_pid
!= pid
) {
162 service_unwatch_main_pid(s
);
163 exec_status_start(&s
->main_exec_status
, pid
);
167 s
->main_pid_known
= true;
169 if (get_parent_of_pid(pid
, &ppid
) >= 0 && ppid
!= getpid()) {
170 log_unit_warning(UNIT(s
)->id
, "%s: Supervising process "PID_FMT
" which is not our child. We'll most likely not notice when it exits.", UNIT(s
)->id
, pid
);
171 s
->main_pid_alien
= true;
173 s
->main_pid_alien
= false;
178 static void service_close_socket_fd(Service
*s
) {
181 s
->socket_fd
= asynchronous_close(s
->socket_fd
);
184 static void service_connection_unref(Service
*s
) {
187 if (!UNIT_ISSET(s
->accept_socket
))
190 socket_connection_unref(SOCKET(UNIT_DEREF(s
->accept_socket
)));
191 unit_ref_unset(&s
->accept_socket
);
194 static void service_stop_watchdog(Service
*s
) {
197 s
->watchdog_event_source
= sd_event_source_unref(s
->watchdog_event_source
);
198 s
->watchdog_timestamp
= DUAL_TIMESTAMP_NULL
;
201 static void service_start_watchdog(Service
*s
) {
206 if (s
->watchdog_usec
<= 0)
209 if (s
->watchdog_event_source
) {
210 r
= sd_event_source_set_time(s
->watchdog_event_source
, s
->watchdog_timestamp
.monotonic
+ s
->watchdog_usec
);
212 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to reset watchdog timer: %m", UNIT(s
)->id
);
216 r
= sd_event_source_set_enabled(s
->watchdog_event_source
, SD_EVENT_ONESHOT
);
218 r
= sd_event_add_time(
219 UNIT(s
)->manager
->event
,
220 &s
->watchdog_event_source
,
222 s
->watchdog_timestamp
.monotonic
+ s
->watchdog_usec
, 0,
223 service_dispatch_watchdog
, s
);
225 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to add watchdog timer: %m", UNIT(s
)->id
);
229 /* Let's process everything else which might be a sign
230 * of living before we consider a service died. */
231 r
= sd_event_source_set_priority(s
->watchdog_event_source
, SD_EVENT_PRIORITY_IDLE
);
235 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to install watchdog timer: %m", UNIT(s
)->id
);
238 static void service_reset_watchdog(Service
*s
) {
241 dual_timestamp_get(&s
->watchdog_timestamp
);
242 service_start_watchdog(s
);
245 static void service_fd_store_unlink(ServiceFDStore
*fs
) {
251 assert(fs
->service
->n_fd_store
> 0);
252 LIST_REMOVE(fd_store
, fs
->service
->fd_store
, fs
);
253 fs
->service
->n_fd_store
--;
256 if (fs
->event_source
) {
257 sd_event_source_set_enabled(fs
->event_source
, SD_EVENT_OFF
);
258 sd_event_source_unref(fs
->event_source
);
265 static void service_release_resources(Unit
*u
) {
266 Service
*s
= SERVICE(u
);
273 log_debug("Releasing all resources for %s", u
->id
);
276 service_fd_store_unlink(s
->fd_store
);
278 assert(s
->n_fd_store
== 0);
281 static void service_done(Unit
*u
) {
282 Service
*s
= SERVICE(u
);
289 free(s
->status_text
);
290 s
->status_text
= NULL
;
293 s
->reboot_arg
= NULL
;
295 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
296 exec_command_free_array(s
->exec_command
, _SERVICE_EXEC_COMMAND_MAX
);
297 s
->control_command
= NULL
;
298 s
->main_command
= NULL
;
300 exit_status_set_free(&s
->restart_prevent_status
);
301 exit_status_set_free(&s
->restart_force_status
);
302 exit_status_set_free(&s
->success_status
);
304 /* This will leak a process, but at least no memory or any of
306 service_unwatch_main_pid(s
);
307 service_unwatch_control_pid(s
);
308 service_unwatch_pid_file(s
);
311 unit_unwatch_bus_name(u
, s
->bus_name
);
316 s
->bus_endpoint_fd
= safe_close(s
->bus_endpoint_fd
);
317 service_close_socket_fd(s
);
318 service_connection_unref(s
);
320 unit_ref_unset(&s
->accept_socket
);
322 service_stop_watchdog(s
);
324 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
326 service_release_resources(u
);
329 static int on_fd_store_io(sd_event_source
*e
, int fd
, uint32_t revents
, void *userdata
) {
330 ServiceFDStore
*fs
= userdata
;
335 /* If we get either EPOLLHUP or EPOLLERR, it's time to remove this entry from the fd store */
336 service_fd_store_unlink(fs
);
340 static int service_add_fd_store(Service
*s
, int fd
) {
347 if (s
->n_fd_store
>= s
->n_fd_store_max
)
350 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
351 r
= same_fd(fs
->fd
, fd
);
355 /* Already included */
361 fs
= new0(ServiceFDStore
, 1);
368 r
= sd_event_add_io(UNIT(s
)->manager
->event
, &fs
->event_source
, fd
, 0, on_fd_store_io
, fs
);
374 LIST_PREPEND(fd_store
, s
->fd_store
, fs
);
380 static int service_add_fd_store_set(Service
*s
, FDSet
*fds
) {
385 if (fdset_size(fds
) <= 0)
388 while (s
->n_fd_store
< s
->n_fd_store_max
) {
389 _cleanup_close_
int fd
= -1;
391 fd
= fdset_steal_first(fds
);
395 r
= service_add_fd_store(s
, fd
);
397 return log_unit_error_errno(UNIT(s
)->id
, r
, "%s: Couldn't add fd to fd store: %m", UNIT(s
)->id
);
400 log_unit_debug(UNIT(s
)->id
, "%s: added fd to fd store.", UNIT(s
)->id
);
405 if (fdset_size(fds
) > 0)
406 log_unit_warning(UNIT(s
)->id
, "%s: tried to store more fds than FDStoreMax=%u allows, closing remaining.", UNIT(s
)->id
, s
->n_fd_store_max
);
411 static int service_arm_timer(Service
*s
, usec_t usec
) {
416 if (s
->timer_event_source
) {
417 r
= sd_event_source_set_time(s
->timer_event_source
, now(CLOCK_MONOTONIC
) + usec
);
421 return sd_event_source_set_enabled(s
->timer_event_source
, SD_EVENT_ONESHOT
);
424 return sd_event_add_time(
425 UNIT(s
)->manager
->event
,
426 &s
->timer_event_source
,
428 now(CLOCK_MONOTONIC
) + usec
, 0,
429 service_dispatch_timer
, s
);
432 static int service_verify(Service
*s
) {
435 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
438 if (!s
->exec_command
[SERVICE_EXEC_START
] && !s
->exec_command
[SERVICE_EXEC_STOP
]) {
439 log_unit_error(UNIT(s
)->id
, "%s lacks both ExecStart= and ExecStop= setting. Refusing.", UNIT(s
)->id
);
443 if (s
->type
!= SERVICE_ONESHOT
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
444 log_unit_error(UNIT(s
)->id
, "%s has no ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.", UNIT(s
)->id
);
448 if (!s
->remain_after_exit
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
449 log_unit_error(UNIT(s
)->id
, "%s has no ExecStart= setting, which is only allowed for RemainAfterExit=yes services. Refusing.", UNIT(s
)->id
);
453 if (s
->type
!= SERVICE_ONESHOT
&& s
->exec_command
[SERVICE_EXEC_START
]->command_next
) {
454 log_unit_error(UNIT(s
)->id
, "%s has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.", UNIT(s
)->id
);
458 if (s
->type
== SERVICE_ONESHOT
&& s
->restart
!= SERVICE_RESTART_NO
) {
459 log_unit_error(UNIT(s
)->id
, "%s has Restart= setting other than no, which isn't allowed for Type=oneshot services. Refusing.", UNIT(s
)->id
);
463 if (s
->type
== SERVICE_ONESHOT
&& !exit_status_set_is_empty(&s
->restart_force_status
)) {
464 log_unit_error(UNIT(s
)->id
, "%s has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.", UNIT(s
)->id
);
468 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name
) {
469 log_unit_error(UNIT(s
)->id
, "%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", UNIT(s
)->id
);
473 if (s
->bus_name
&& s
->type
!= SERVICE_DBUS
)
474 log_unit_warning(UNIT(s
)->id
, "%s has a D-Bus service name specified, but is not of type dbus. Ignoring.", UNIT(s
)->id
);
476 if (s
->exec_context
.pam_name
&& !(s
->kill_context
.kill_mode
== KILL_CONTROL_GROUP
|| s
->kill_context
.kill_mode
== KILL_MIXED
)) {
477 log_unit_error(UNIT(s
)->id
, "%s has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.", UNIT(s
)->id
);
484 static int service_add_default_dependencies(Service
*s
) {
489 /* Add a number of automatic dependencies useful for the
490 * majority of services. */
492 /* First, pull in base system */
493 r
= unit_add_two_dependencies_by_name(UNIT(s
), UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_BASIC_TARGET
, NULL
, true);
497 /* Second, activate normal shutdown */
498 return unit_add_two_dependencies_by_name(UNIT(s
), UNIT_BEFORE
, UNIT_CONFLICTS
, SPECIAL_SHUTDOWN_TARGET
, NULL
, true);
501 static void service_fix_output(Service
*s
) {
504 /* If nothing has been explicitly configured, patch default
505 * output in. If input is socket/tty we avoid this however,
506 * since in that case we want output to default to the same
507 * place as we read input from. */
509 if (s
->exec_context
.std_error
== EXEC_OUTPUT_INHERIT
&&
510 s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
511 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
512 s
->exec_context
.std_error
= UNIT(s
)->manager
->default_std_error
;
514 if (s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
515 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
516 s
->exec_context
.std_output
= UNIT(s
)->manager
->default_std_output
;
519 static int service_add_extras(Service
*s
) {
524 if (s
->type
== _SERVICE_TYPE_INVALID
) {
525 /* Figure out a type automatically */
527 s
->type
= SERVICE_DBUS
;
528 else if (s
->exec_command
[SERVICE_EXEC_START
])
529 s
->type
= SERVICE_SIMPLE
;
531 s
->type
= SERVICE_ONESHOT
;
534 /* Oneshot services have disabled start timeout by default */
535 if (s
->type
== SERVICE_ONESHOT
&& !s
->start_timeout_defined
)
536 s
->timeout_start_usec
= 0;
538 service_fix_output(s
);
540 r
= unit_patch_contexts(UNIT(s
));
544 r
= unit_add_exec_dependencies(UNIT(s
), &s
->exec_context
);
548 r
= unit_add_default_slice(UNIT(s
), &s
->cgroup_context
);
552 if (s
->type
== SERVICE_NOTIFY
&& s
->notify_access
== NOTIFY_NONE
)
553 s
->notify_access
= NOTIFY_MAIN
;
555 if (s
->watchdog_usec
> 0 && s
->notify_access
== NOTIFY_NONE
)
556 s
->notify_access
= NOTIFY_MAIN
;
561 r
= unit_watch_bus_name(UNIT(s
), s
->bus_name
);
565 n
= strjoina(s
->bus_name
, ".busname");
566 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_AFTER
, n
, NULL
, true);
571 if (UNIT(s
)->default_dependencies
) {
572 r
= service_add_default_dependencies(s
);
580 static int service_load(Unit
*u
) {
581 Service
*s
= SERVICE(u
);
586 /* Load a .service file */
587 r
= unit_load_fragment(u
);
591 /* Still nothing found? Then let's give up */
592 if (u
->load_state
== UNIT_STUB
)
595 /* This is a new unit? Then let's add in some extras */
596 if (u
->load_state
== UNIT_LOADED
) {
598 /* We were able to load something, then let's add in
599 * the dropin directories. */
600 r
= unit_load_dropin(u
);
604 /* This is a new unit? Then let's add in some
606 r
= service_add_extras(s
);
611 return service_verify(s
);
614 static void service_dump(Unit
*u
, FILE *f
, const char *prefix
) {
615 ServiceExecCommand c
;
616 Service
*s
= SERVICE(u
);
621 prefix
= strempty(prefix
);
622 prefix2
= strjoina(prefix
, "\t");
625 "%sService State: %s\n"
627 "%sReload Result: %s\n"
628 "%sPermissionsStartOnly: %s\n"
629 "%sRootDirectoryStartOnly: %s\n"
630 "%sRemainAfterExit: %s\n"
631 "%sGuessMainPID: %s\n"
634 "%sNotifyAccess: %s\n"
635 "%sNotifyState: %s\n",
636 prefix
, service_state_to_string(s
->state
),
637 prefix
, service_result_to_string(s
->result
),
638 prefix
, service_result_to_string(s
->reload_result
),
639 prefix
, yes_no(s
->permissions_start_only
),
640 prefix
, yes_no(s
->root_directory_start_only
),
641 prefix
, yes_no(s
->remain_after_exit
),
642 prefix
, yes_no(s
->guess_main_pid
),
643 prefix
, service_type_to_string(s
->type
),
644 prefix
, service_restart_to_string(s
->restart
),
645 prefix
, notify_access_to_string(s
->notify_access
),
646 prefix
, notify_state_to_string(s
->notify_state
));
648 if (s
->control_pid
> 0)
650 "%sControl PID: "PID_FMT
"\n",
651 prefix
, s
->control_pid
);
655 "%sMain PID: "PID_FMT
"\n"
656 "%sMain PID Known: %s\n"
657 "%sMain PID Alien: %s\n",
659 prefix
, yes_no(s
->main_pid_known
),
660 prefix
, yes_no(s
->main_pid_alien
));
665 prefix
, s
->pid_file
);
670 "%sBus Name Good: %s\n",
672 prefix
, yes_no(s
->bus_name_good
));
674 kill_context_dump(&s
->kill_context
, f
, prefix
);
675 exec_context_dump(&s
->exec_context
, f
, prefix
);
677 for (c
= 0; c
< _SERVICE_EXEC_COMMAND_MAX
; c
++) {
679 if (!s
->exec_command
[c
])
682 fprintf(f
, "%s-> %s:\n",
683 prefix
, service_exec_command_to_string(c
));
685 exec_command_dump_list(s
->exec_command
[c
], f
, prefix2
);
689 fprintf(f
, "%sStatus Text: %s\n",
690 prefix
, s
->status_text
);
692 if (s
->n_fd_store_max
> 0) {
694 "%sFile Descriptor Store Max: %u\n"
695 "%sFile Descriptor Store Current: %u\n",
696 prefix
, s
->n_fd_store_max
,
697 prefix
, s
->n_fd_store
);
701 static int service_load_pid_file(Service
*s
, bool may_warn
) {
702 _cleanup_free_
char *k
= NULL
;
711 r
= read_one_line_file(s
->pid_file
, &k
);
714 log_unit_info(UNIT(s
)->id
, "PID file %s not readable (yet?) after %s.", s
->pid_file
, service_state_to_string(s
->state
));
718 r
= parse_pid(k
, &pid
);
721 log_unit_info_errno(UNIT(s
)->id
, r
, "Failed to read PID from file %s: %m", s
->pid_file
);
725 if (!pid_is_alive(pid
)) {
727 log_unit_info(UNIT(s
)->id
, "PID "PID_FMT
" read from file %s does not exist or is a zombie.", pid
, s
->pid_file
);
731 if (s
->main_pid_known
) {
732 if (pid
== s
->main_pid
)
735 log_unit_debug(UNIT(s
)->id
, "Main PID changing: "PID_FMT
" -> "PID_FMT
, s
->main_pid
, pid
);
737 service_unwatch_main_pid(s
);
738 s
->main_pid_known
= false;
740 log_unit_debug(UNIT(s
)->id
, "Main PID loaded: "PID_FMT
, pid
);
742 r
= service_set_main_pid(s
, pid
);
746 r
= unit_watch_pid(UNIT(s
), pid
);
748 /* FIXME: we need to do something here */
749 log_unit_warning(UNIT(s
)->id
, "Failed to watch PID "PID_FMT
" from service %s", pid
, UNIT(s
)->id
);
756 static int service_search_main_pid(Service
*s
) {
762 /* If we know it anyway, don't ever fallback to unreliable
764 if (s
->main_pid_known
)
767 if (!s
->guess_main_pid
)
770 assert(s
->main_pid
<= 0);
772 pid
= unit_search_main_pid(UNIT(s
));
776 log_unit_debug(UNIT(s
)->id
, "Main PID guessed: "PID_FMT
, pid
);
777 r
= service_set_main_pid(s
, pid
);
781 r
= unit_watch_pid(UNIT(s
), pid
);
783 /* FIXME: we need to do something here */
784 log_unit_warning(UNIT(s
)->id
, "Failed to watch PID "PID_FMT
" from service %s", pid
, UNIT(s
)->id
);
791 static void service_set_state(Service
*s
, ServiceState state
) {
792 ServiceState old_state
;
793 const UnitActiveState
*table
;
797 table
= s
->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
799 old_state
= s
->state
;
802 service_unwatch_pid_file(s
);
805 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
807 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
808 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
809 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
,
810 SERVICE_AUTO_RESTART
))
811 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
814 SERVICE_START
, SERVICE_START_POST
,
815 SERVICE_RUNNING
, SERVICE_RELOAD
,
816 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
817 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
818 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
819 service_unwatch_main_pid(s
);
820 s
->main_command
= NULL
;
824 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
826 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
827 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
828 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
829 service_unwatch_control_pid(s
);
830 s
->control_command
= NULL
;
831 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
834 if (IN_SET(state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
835 unit_unwatch_all_pids(UNIT(s
));
838 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
839 SERVICE_RUNNING
, SERVICE_RELOAD
,
840 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
841 SERVICE_STOP_SIGABRT
, SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
) &&
842 !(state
== SERVICE_DEAD
&& UNIT(s
)->job
)) {
843 service_close_socket_fd(s
);
844 service_connection_unref(s
);
847 if (!IN_SET(state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
848 service_stop_watchdog(s
);
850 /* For the inactive states unit_notify() will trim the cgroup,
851 * but for exit we have to do that ourselves... */
852 if (state
== SERVICE_EXITED
&& UNIT(s
)->manager
->n_reloading
<= 0)
853 unit_destroy_cgroup_if_empty(UNIT(s
));
855 /* For remain_after_exit services, let's see if we can "release" the
856 * hold on the console, since unit_notify() only does that in case of
858 if (state
== SERVICE_EXITED
&&
859 s
->remain_after_exit
&&
860 UNIT(s
)->manager
->n_on_console
> 0) {
864 ec
= unit_get_exec_context(UNIT(s
));
865 if (ec
&& exec_context_may_touch_console(ec
)) {
866 Manager
*m
= UNIT(s
)->manager
;
869 if (m
->n_on_console
== 0)
870 /* unset no_console_output flag, since the console is free */
871 m
->no_console_output
= false;
875 if (old_state
!= state
)
876 log_unit_debug(UNIT(s
)->id
, "%s changed %s -> %s", UNIT(s
)->id
, service_state_to_string(old_state
), service_state_to_string(state
));
878 unit_notify(UNIT(s
), table
[old_state
], table
[state
], s
->reload_result
== SERVICE_SUCCESS
);
879 s
->reload_result
= SERVICE_SUCCESS
;
882 static int service_coldplug(Unit
*u
) {
883 Service
*s
= SERVICE(u
);
887 assert(s
->state
== SERVICE_DEAD
);
889 if (s
->deserialized_state
!= s
->state
) {
891 if (IN_SET(s
->deserialized_state
,
892 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
894 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
895 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
896 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
900 k
= IN_SET(s
->deserialized_state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RELOAD
) ? s
->timeout_start_usec
: s
->timeout_stop_usec
;
902 /* For the start/stop timeouts 0 means off */
904 r
= service_arm_timer(s
, k
);
910 if (s
->deserialized_state
== SERVICE_AUTO_RESTART
) {
912 /* The restart timeouts 0 means immediately */
913 r
= service_arm_timer(s
, s
->restart_usec
);
918 if (pid_is_unwaited(s
->main_pid
) &&
919 ((s
->deserialized_state
== SERVICE_START
&& IN_SET(s
->type
, SERVICE_FORKING
, SERVICE_DBUS
, SERVICE_ONESHOT
, SERVICE_NOTIFY
)) ||
920 IN_SET(s
->deserialized_state
,
921 SERVICE_START
, SERVICE_START_POST
,
922 SERVICE_RUNNING
, SERVICE_RELOAD
,
923 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
924 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
925 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))) {
926 r
= unit_watch_pid(UNIT(s
), s
->main_pid
);
931 if (pid_is_unwaited(s
->control_pid
) &&
932 IN_SET(s
->deserialized_state
,
933 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
935 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
936 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
937 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
938 r
= unit_watch_pid(UNIT(s
), s
->control_pid
);
943 if (!IN_SET(s
->deserialized_state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
944 unit_watch_all_pids(UNIT(s
));
946 if (IN_SET(s
->deserialized_state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
947 service_start_watchdog(s
);
949 service_set_state(s
, s
->deserialized_state
);
955 static int service_collect_fds(Service
*s
, int **fds
, unsigned *n_fds
) {
956 _cleanup_free_
int *rfds
= NULL
;
966 if (s
->socket_fd
>= 0)
969 SET_FOREACH(u
, UNIT(s
)->dependencies
[UNIT_TRIGGERED_BY
], i
) {
974 if (u
->type
!= UNIT_SOCKET
)
979 r
= socket_collect_fds(sock
, &cfds
, &cn_fds
);
994 t
= realloc(rfds
, (rn_fds
+ cn_fds
) * sizeof(int));
1000 memcpy(t
+ rn_fds
, cfds
, cn_fds
* sizeof(int));
1009 if (s
->n_fd_store
> 0) {
1013 t
= realloc(rfds
, (rn_fds
+ s
->n_fd_store
) * sizeof(int));
1018 LIST_FOREACH(fd_store
, fs
, s
->fd_store
)
1019 rfds
[rn_fds
++] = fs
->fd
;
1029 static int service_spawn(
1034 bool apply_permissions
,
1036 bool apply_tty_stdin
,
1043 _cleanup_free_
int *fdsbuf
= NULL
;
1044 unsigned n_fds
= 0, n_env
= 0;
1045 _cleanup_free_
char *bus_endpoint_path
= NULL
;
1046 _cleanup_strv_free_
char
1047 **argv
= NULL
, **final_env
= NULL
, **our_env
= NULL
;
1049 ExecParameters exec_params
= {
1050 .apply_permissions
= apply_permissions
,
1051 .apply_chroot
= apply_chroot
,
1052 .apply_tty_stdin
= apply_tty_stdin
,
1053 .bus_endpoint_fd
= -1,
1054 .selinux_context_net
= s
->socket_fd_selinux_context_net
1061 unit_realize_cgroup(UNIT(s
));
1063 r
= unit_setup_exec_runtime(UNIT(s
));
1068 s
->exec_context
.std_input
== EXEC_INPUT_SOCKET
||
1069 s
->exec_context
.std_output
== EXEC_OUTPUT_SOCKET
||
1070 s
->exec_context
.std_error
== EXEC_OUTPUT_SOCKET
) {
1072 if (s
->socket_fd
>= 0) {
1073 fds
= &s
->socket_fd
;
1076 r
= service_collect_fds(s
, &fdsbuf
, &n_fds
);
1085 r
= service_arm_timer(s
, timeout
);
1089 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
1091 r
= unit_full_printf_strv(UNIT(s
), c
->argv
, &argv
);
1095 our_env
= new0(char*, 4);
1101 if (is_control
? s
->notify_access
== NOTIFY_ALL
: s
->notify_access
!= NOTIFY_NONE
)
1102 if (asprintf(our_env
+ n_env
++, "NOTIFY_SOCKET=%s", UNIT(s
)->manager
->notify_socket
) < 0) {
1107 if (s
->main_pid
> 0)
1108 if (asprintf(our_env
+ n_env
++, "MAINPID="PID_FMT
, s
->main_pid
) < 0) {
1113 if (UNIT(s
)->manager
->running_as
!= SYSTEMD_SYSTEM
)
1114 if (asprintf(our_env
+ n_env
++, "MANAGERPID="PID_FMT
, getpid()) < 0) {
1119 final_env
= strv_env_merge(2, UNIT(s
)->manager
->environment
, our_env
, NULL
);
1125 if (is_control
&& UNIT(s
)->cgroup_path
) {
1126 path
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1127 cg_create(SYSTEMD_CGROUP_CONTROLLER
, path
);
1129 path
= UNIT(s
)->cgroup_path
;
1132 if (s
->exec_context
.bus_endpoint
) {
1133 r
= bus_kernel_create_endpoint(UNIT(s
)->manager
->running_as
== SYSTEMD_SYSTEM
? "system" : "user",
1134 UNIT(s
)->id
, &bus_endpoint_path
);
1138 /* Pass the fd to the exec_params so that the child process can upload the policy.
1139 * Keep a reference to the fd in the service, so the endpoint is kept alive as long
1140 * as the service is running. */
1141 exec_params
.bus_endpoint_fd
= s
->bus_endpoint_fd
= r
;
1145 exec_params
.argv
= argv
;
1146 exec_params
.fds
= fds
;
1147 exec_params
.n_fds
= n_fds
;
1148 exec_params
.environment
= final_env
;
1149 exec_params
.confirm_spawn
= UNIT(s
)->manager
->confirm_spawn
;
1150 exec_params
.cgroup_supported
= UNIT(s
)->manager
->cgroup_supported
;
1151 exec_params
.cgroup_path
= path
;
1152 exec_params
.cgroup_delegate
= s
->cgroup_context
.delegate
;
1153 exec_params
.runtime_prefix
= manager_get_runtime_prefix(UNIT(s
)->manager
);
1154 exec_params
.unit_id
= UNIT(s
)->id
;
1155 exec_params
.watchdog_usec
= s
->watchdog_usec
;
1156 exec_params
.bus_endpoint_path
= bus_endpoint_path
;
1157 if (s
->type
== SERVICE_IDLE
)
1158 exec_params
.idle_pipe
= UNIT(s
)->manager
->idle_pipe
;
1168 r
= unit_watch_pid(UNIT(s
), pid
);
1170 /* FIXME: we need to do something here */
1179 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
1184 static int main_pid_good(Service
*s
) {
1187 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1190 /* If we know the pid file, then lets just check if it is
1192 if (s
->main_pid_known
) {
1194 /* If it's an alien child let's check if it is still
1196 if (s
->main_pid_alien
&& s
->main_pid
> 0)
1197 return pid_is_alive(s
->main_pid
);
1199 /* .. otherwise assume we'll get a SIGCHLD for it,
1200 * which we really should wait for to collect exit
1201 * status and code */
1202 return s
->main_pid
> 0;
1205 /* We don't know the pid */
1209 _pure_
static int control_pid_good(Service
*s
) {
1212 return s
->control_pid
> 0;
1215 static int cgroup_good(Service
*s
) {
1220 if (!UNIT(s
)->cgroup_path
)
1223 r
= cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER
, UNIT(s
)->cgroup_path
, true);
1230 static void service_enter_dead(Service
*s
, ServiceResult f
, bool allow_restart
) {
1234 if (f
!= SERVICE_SUCCESS
)
1237 service_set_state(s
, s
->result
!= SERVICE_SUCCESS
? SERVICE_FAILED
: SERVICE_DEAD
);
1239 if (s
->result
!= SERVICE_SUCCESS
) {
1240 log_unit_warning(UNIT(s
)->id
, "%s failed.", UNIT(s
)->id
);
1241 failure_action(UNIT(s
)->manager
, s
->failure_action
, s
->reboot_arg
);
1244 if (allow_restart
&&
1245 !s
->forbid_restart
&&
1246 (s
->restart
== SERVICE_RESTART_ALWAYS
||
1247 (s
->restart
== SERVICE_RESTART_ON_SUCCESS
&& s
->result
== SERVICE_SUCCESS
) ||
1248 (s
->restart
== SERVICE_RESTART_ON_FAILURE
&& s
->result
!= SERVICE_SUCCESS
) ||
1249 (s
->restart
== SERVICE_RESTART_ON_ABNORMAL
&& !IN_SET(s
->result
, SERVICE_SUCCESS
, SERVICE_FAILURE_EXIT_CODE
)) ||
1250 (s
->restart
== SERVICE_RESTART_ON_WATCHDOG
&& s
->result
== SERVICE_FAILURE_WATCHDOG
) ||
1251 (s
->restart
== SERVICE_RESTART_ON_ABORT
&& IN_SET(s
->result
, SERVICE_FAILURE_SIGNAL
, SERVICE_FAILURE_CORE_DUMP
)) ||
1252 (s
->main_exec_status
.code
== CLD_EXITED
&& set_contains(s
->restart_force_status
.status
, INT_TO_PTR(s
->main_exec_status
.status
))) ||
1253 (IN_SET(s
->main_exec_status
.code
, CLD_KILLED
, CLD_DUMPED
) && set_contains(s
->restart_force_status
.signal
, INT_TO_PTR(s
->main_exec_status
.status
)))) &&
1254 (s
->main_exec_status
.code
!= CLD_EXITED
|| !set_contains(s
->restart_prevent_status
.status
, INT_TO_PTR(s
->main_exec_status
.status
))) &&
1255 (!IN_SET(s
->main_exec_status
.code
, CLD_KILLED
, CLD_DUMPED
) || !set_contains(s
->restart_prevent_status
.signal
, INT_TO_PTR(s
->main_exec_status
.status
)))) {
1257 r
= service_arm_timer(s
, s
->restart_usec
);
1261 service_set_state(s
, SERVICE_AUTO_RESTART
);
1264 s
->forbid_restart
= false;
1266 /* We want fresh tmpdirs in case service is started again immediately */
1267 exec_runtime_destroy(s
->exec_runtime
);
1268 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
1270 /* Also, remove the runtime directory in */
1271 exec_context_destroy_runtime_directory(&s
->exec_context
, manager_get_runtime_prefix(UNIT(s
)->manager
));
1273 /* Try to delete the pid file. At this point it will be
1274 * out-of-date, and some software might be confused by it, so
1275 * let's remove it. */
1277 unlink_noerrno(s
->pid_file
);
1282 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run install restart timer: %m", UNIT(s
)->id
);
1283 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1286 static void service_enter_stop_post(Service
*s
, ServiceResult f
) {
1290 if (f
!= SERVICE_SUCCESS
)
1293 service_unwatch_control_pid(s
);
1294 unit_watch_all_pids(UNIT(s
));
1296 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP_POST
];
1297 if (s
->control_command
) {
1298 s
->control_command_id
= SERVICE_EXEC_STOP_POST
;
1300 r
= service_spawn(s
,
1302 s
->timeout_stop_usec
,
1304 !s
->permissions_start_only
,
1305 !s
->root_directory_start_only
,
1312 service_set_state(s
, SERVICE_STOP_POST
);
1314 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_SUCCESS
);
1319 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'stop-post' task: %m", UNIT(s
)->id
);
1320 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1323 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
) {
1328 if (f
!= SERVICE_SUCCESS
)
1331 unit_watch_all_pids(UNIT(s
));
1333 r
= unit_kill_context(
1336 (state
!= SERVICE_STOP_SIGTERM
&& state
!= SERVICE_FINAL_SIGTERM
&& state
!= SERVICE_STOP_SIGABRT
) ?
1337 KILL_KILL
: (state
== SERVICE_STOP_SIGABRT
? KILL_ABORT
: KILL_TERMINATE
),
1346 if (s
->timeout_stop_usec
> 0) {
1347 r
= service_arm_timer(s
, s
->timeout_stop_usec
);
1352 service_set_state(s
, state
);
1353 } else if (state
== SERVICE_STOP_SIGTERM
|| state
== SERVICE_STOP_SIGABRT
)
1354 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_SUCCESS
);
1355 else if (state
== SERVICE_STOP_SIGKILL
)
1356 service_enter_stop_post(s
, SERVICE_SUCCESS
);
1357 else if (state
== SERVICE_FINAL_SIGTERM
)
1358 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_SUCCESS
);
1360 service_enter_dead(s
, SERVICE_SUCCESS
, true);
1365 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to kill processes: %m", UNIT(s
)->id
);
1367 if (state
== SERVICE_STOP_SIGTERM
|| state
== SERVICE_STOP_SIGKILL
||
1368 state
== SERVICE_STOP_SIGABRT
)
1369 service_enter_stop_post(s
, SERVICE_FAILURE_RESOURCES
);
1371 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1374 static void service_enter_stop_by_notify(Service
*s
) {
1377 unit_watch_all_pids(UNIT(s
));
1379 if (s
->timeout_stop_usec
> 0)
1380 service_arm_timer(s
, s
->timeout_stop_usec
);
1382 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1383 service_set_state(s
, SERVICE_STOP_SIGTERM
);
1386 static void service_enter_stop(Service
*s
, ServiceResult f
) {
1391 if (f
!= SERVICE_SUCCESS
)
1394 service_unwatch_control_pid(s
);
1395 unit_watch_all_pids(UNIT(s
));
1397 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP
];
1398 if (s
->control_command
) {
1399 s
->control_command_id
= SERVICE_EXEC_STOP
;
1401 r
= service_spawn(s
,
1403 s
->timeout_stop_usec
,
1405 !s
->permissions_start_only
,
1406 !s
->root_directory_start_only
,
1413 service_set_state(s
, SERVICE_STOP
);
1415 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
1420 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'stop' task: %m", UNIT(s
)->id
);
1421 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1424 static void service_enter_running(Service
*s
, ServiceResult f
) {
1425 int main_pid_ok
, cgroup_ok
;
1428 if (f
!= SERVICE_SUCCESS
)
1431 main_pid_ok
= main_pid_good(s
);
1432 cgroup_ok
= cgroup_good(s
);
1434 if ((main_pid_ok
> 0 || (main_pid_ok
< 0 && cgroup_ok
!= 0)) &&
1435 (s
->bus_name_good
|| s
->type
!= SERVICE_DBUS
)) {
1437 /* If there are any queued up sd_notify()
1438 * notifications, process them now */
1439 if (s
->notify_state
== NOTIFY_RELOADING
)
1440 service_enter_reload_by_notify(s
);
1441 else if (s
->notify_state
== NOTIFY_STOPPING
)
1442 service_enter_stop_by_notify(s
);
1444 service_set_state(s
, SERVICE_RUNNING
);
1446 } else if (s
->remain_after_exit
)
1447 service_set_state(s
, SERVICE_EXITED
);
1449 service_enter_stop(s
, SERVICE_SUCCESS
);
1452 static void service_enter_start_post(Service
*s
) {
1456 service_unwatch_control_pid(s
);
1457 service_reset_watchdog(s
);
1459 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_POST
];
1460 if (s
->control_command
) {
1461 s
->control_command_id
= SERVICE_EXEC_START_POST
;
1463 r
= service_spawn(s
,
1465 s
->timeout_start_usec
,
1467 !s
->permissions_start_only
,
1468 !s
->root_directory_start_only
,
1475 service_set_state(s
, SERVICE_START_POST
);
1477 service_enter_running(s
, SERVICE_SUCCESS
);
1482 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'start-post' task: %m", UNIT(s
)->id
);
1483 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1486 static void service_kill_control_processes(Service
*s
) {
1489 if (!UNIT(s
)->cgroup_path
)
1492 p
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1493 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, p
, SIGKILL
, true, true, true, NULL
);
1496 static void service_enter_start(Service
*s
) {
1503 service_unwatch_control_pid(s
);
1504 service_unwatch_main_pid(s
);
1506 /* We want to ensure that nobody leaks processes from
1507 * START_PRE here, so let's go on a killing spree, People
1508 * should not spawn long running processes from START_PRE. */
1509 service_kill_control_processes(s
);
1511 if (s
->type
== SERVICE_FORKING
) {
1512 s
->control_command_id
= SERVICE_EXEC_START
;
1513 c
= s
->control_command
= s
->exec_command
[SERVICE_EXEC_START
];
1515 s
->main_command
= NULL
;
1517 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
1518 s
->control_command
= NULL
;
1520 c
= s
->main_command
= s
->exec_command
[SERVICE_EXEC_START
];
1524 assert(s
->type
== SERVICE_ONESHOT
);
1525 service_enter_start_post(s
);
1529 r
= service_spawn(s
,
1531 IN_SET(s
->type
, SERVICE_FORKING
, SERVICE_DBUS
, SERVICE_NOTIFY
, SERVICE_ONESHOT
) ? s
->timeout_start_usec
: 0,
1541 if (s
->type
== SERVICE_SIMPLE
|| s
->type
== SERVICE_IDLE
) {
1542 /* For simple services we immediately start
1543 * the START_POST binaries. */
1545 service_set_main_pid(s
, pid
);
1546 service_enter_start_post(s
);
1548 } else if (s
->type
== SERVICE_FORKING
) {
1550 /* For forking services we wait until the start
1551 * process exited. */
1553 s
->control_pid
= pid
;
1554 service_set_state(s
, SERVICE_START
);
1556 } else if (s
->type
== SERVICE_ONESHOT
||
1557 s
->type
== SERVICE_DBUS
||
1558 s
->type
== SERVICE_NOTIFY
) {
1560 /* For oneshot services we wait until the start
1561 * process exited, too, but it is our main process. */
1563 /* For D-Bus services we know the main pid right away,
1564 * but wait for the bus name to appear on the
1565 * bus. Notify services are similar. */
1567 service_set_main_pid(s
, pid
);
1568 service_set_state(s
, SERVICE_START
);
1570 assert_not_reached("Unknown service type");
1575 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'start' task: %m", UNIT(s
)->id
);
1576 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1579 static void service_enter_start_pre(Service
*s
) {
1584 service_unwatch_control_pid(s
);
1586 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_PRE
];
1587 if (s
->control_command
) {
1588 /* Before we start anything, let's clear up what might
1589 * be left from previous runs. */
1590 service_kill_control_processes(s
);
1592 s
->control_command_id
= SERVICE_EXEC_START_PRE
;
1594 r
= service_spawn(s
,
1596 s
->timeout_start_usec
,
1598 !s
->permissions_start_only
,
1599 !s
->root_directory_start_only
,
1606 service_set_state(s
, SERVICE_START_PRE
);
1608 service_enter_start(s
);
1613 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'start-pre' task: %m", UNIT(s
)->id
);
1614 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1617 static void service_enter_restart(Service
*s
) {
1618 _cleanup_bus_error_free_ sd_bus_error error
= SD_BUS_ERROR_NULL
;
1623 if (UNIT(s
)->job
&& UNIT(s
)->job
->type
== JOB_STOP
) {
1624 /* Don't restart things if we are going down anyway */
1625 log_unit_info(UNIT(s
)->id
, "Stop job pending for unit, delaying automatic restart.");
1627 r
= service_arm_timer(s
, s
->restart_usec
);
1634 /* Any units that are bound to this service must also be
1635 * restarted. We use JOB_RESTART (instead of the more obvious
1636 * JOB_START) here so that those dependency jobs will be added
1638 r
= manager_add_job(UNIT(s
)->manager
, JOB_RESTART
, UNIT(s
), JOB_FAIL
, false, &error
, NULL
);
1642 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
1643 * it will be canceled as part of the service_stop() call that
1644 * is executed as part of JOB_RESTART. */
1646 log_unit_debug(UNIT(s
)->id
, "%s scheduled restart job.", UNIT(s
)->id
);
1650 log_unit_warning(UNIT(s
)->id
, "%s failed to schedule restart job: %s", UNIT(s
)->id
, bus_error_message(&error
, -r
));
1651 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1654 static void service_enter_reload_by_notify(Service
*s
) {
1657 if (s
->timeout_start_usec
> 0)
1658 service_arm_timer(s
, s
->timeout_start_usec
);
1660 service_set_state(s
, SERVICE_RELOAD
);
1663 static void service_enter_reload(Service
*s
) {
1668 service_unwatch_control_pid(s
);
1670 s
->control_command
= s
->exec_command
[SERVICE_EXEC_RELOAD
];
1671 if (s
->control_command
) {
1672 s
->control_command_id
= SERVICE_EXEC_RELOAD
;
1674 r
= service_spawn(s
,
1676 s
->timeout_start_usec
,
1678 !s
->permissions_start_only
,
1679 !s
->root_directory_start_only
,
1686 service_set_state(s
, SERVICE_RELOAD
);
1688 service_enter_running(s
, SERVICE_SUCCESS
);
1693 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'reload' task: %m", UNIT(s
)->id
);
1694 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
1695 service_enter_running(s
, SERVICE_SUCCESS
);
1698 static void service_run_next_control(Service
*s
) {
1702 assert(s
->control_command
);
1703 assert(s
->control_command
->command_next
);
1705 assert(s
->control_command_id
!= SERVICE_EXEC_START
);
1707 s
->control_command
= s
->control_command
->command_next
;
1708 service_unwatch_control_pid(s
);
1710 r
= service_spawn(s
,
1712 IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
) ? s
->timeout_start_usec
: s
->timeout_stop_usec
,
1714 !s
->permissions_start_only
,
1715 !s
->root_directory_start_only
,
1716 s
->control_command_id
== SERVICE_EXEC_START_PRE
||
1717 s
->control_command_id
== SERVICE_EXEC_STOP_POST
,
1726 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run next control task: %m", UNIT(s
)->id
);
1728 if (s
->state
== SERVICE_START_PRE
)
1729 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1730 else if (s
->state
== SERVICE_STOP
)
1731 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1732 else if (s
->state
== SERVICE_STOP_POST
)
1733 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1734 else if (s
->state
== SERVICE_RELOAD
) {
1735 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
1736 service_enter_running(s
, SERVICE_SUCCESS
);
1738 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1741 static void service_run_next_main(Service
*s
) {
1746 assert(s
->main_command
);
1747 assert(s
->main_command
->command_next
);
1748 assert(s
->type
== SERVICE_ONESHOT
);
1750 s
->main_command
= s
->main_command
->command_next
;
1751 service_unwatch_main_pid(s
);
1753 r
= service_spawn(s
,
1755 s
->timeout_start_usec
,
1765 service_set_main_pid(s
, pid
);
1770 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run next main task: %m", UNIT(s
)->id
);
1771 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1774 static int service_start_limit_test(Service
*s
) {
1777 if (ratelimit_test(&s
->start_limit
))
1780 log_unit_warning(UNIT(s
)->id
, "start request repeated too quickly for %s", UNIT(s
)->id
);
1782 return failure_action(UNIT(s
)->manager
, s
->start_limit_action
, s
->reboot_arg
);
1785 static int service_start(Unit
*u
) {
1786 Service
*s
= SERVICE(u
);
1791 /* We cannot fulfill this request right now, try again later
1793 if (s
->state
== SERVICE_STOP
||
1794 s
->state
== SERVICE_STOP_SIGABRT
||
1795 s
->state
== SERVICE_STOP_SIGTERM
||
1796 s
->state
== SERVICE_STOP_SIGKILL
||
1797 s
->state
== SERVICE_STOP_POST
||
1798 s
->state
== SERVICE_FINAL_SIGTERM
||
1799 s
->state
== SERVICE_FINAL_SIGKILL
)
1802 /* Already on it! */
1803 if (s
->state
== SERVICE_START_PRE
||
1804 s
->state
== SERVICE_START
||
1805 s
->state
== SERVICE_START_POST
)
1808 /* A service that will be restarted must be stopped first to
1809 * trigger BindsTo and/or OnFailure dependencies. If a user
1810 * does not want to wait for the holdoff time to elapse, the
1811 * service should be manually restarted, not started. We
1812 * simply return EAGAIN here, so that any start jobs stay
1813 * queued, and assume that the auto restart timer will
1814 * eventually trigger the restart. */
1815 if (s
->state
== SERVICE_AUTO_RESTART
)
1818 assert(s
->state
== SERVICE_DEAD
|| s
->state
== SERVICE_FAILED
);
1820 /* Make sure we don't enter a busy loop of some kind. */
1821 r
= service_start_limit_test(s
);
1823 service_enter_dead(s
, SERVICE_FAILURE_START_LIMIT
, false);
1827 s
->result
= SERVICE_SUCCESS
;
1828 s
->reload_result
= SERVICE_SUCCESS
;
1829 s
->main_pid_known
= false;
1830 s
->main_pid_alien
= false;
1831 s
->forbid_restart
= false;
1833 free(s
->status_text
);
1834 s
->status_text
= NULL
;
1835 s
->status_errno
= 0;
1837 s
->notify_state
= NOTIFY_UNKNOWN
;
1839 service_enter_start_pre(s
);
1843 static int service_stop(Unit
*u
) {
1844 Service
*s
= SERVICE(u
);
1848 /* Don't create restart jobs from here. */
1849 s
->forbid_restart
= true;
1852 if (s
->state
== SERVICE_STOP
||
1853 s
->state
== SERVICE_STOP_SIGABRT
||
1854 s
->state
== SERVICE_STOP_SIGTERM
||
1855 s
->state
== SERVICE_STOP_SIGKILL
||
1856 s
->state
== SERVICE_STOP_POST
||
1857 s
->state
== SERVICE_FINAL_SIGTERM
||
1858 s
->state
== SERVICE_FINAL_SIGKILL
)
1861 /* A restart will be scheduled or is in progress. */
1862 if (s
->state
== SERVICE_AUTO_RESTART
) {
1863 service_set_state(s
, SERVICE_DEAD
);
1867 /* If there's already something running we go directly into
1869 if (s
->state
== SERVICE_START_PRE
||
1870 s
->state
== SERVICE_START
||
1871 s
->state
== SERVICE_START_POST
||
1872 s
->state
== SERVICE_RELOAD
) {
1873 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
1877 assert(s
->state
== SERVICE_RUNNING
||
1878 s
->state
== SERVICE_EXITED
);
1880 service_enter_stop(s
, SERVICE_SUCCESS
);
1884 static int service_reload(Unit
*u
) {
1885 Service
*s
= SERVICE(u
);
1889 assert(s
->state
== SERVICE_RUNNING
|| s
->state
== SERVICE_EXITED
);
1891 service_enter_reload(s
);
1895 _pure_
static bool service_can_reload(Unit
*u
) {
1896 Service
*s
= SERVICE(u
);
1900 return !!s
->exec_command
[SERVICE_EXEC_RELOAD
];
1903 static int service_serialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
1904 Service
*s
= SERVICE(u
);
1911 unit_serialize_item(u
, f
, "state", service_state_to_string(s
->state
));
1912 unit_serialize_item(u
, f
, "result", service_result_to_string(s
->result
));
1913 unit_serialize_item(u
, f
, "reload-result", service_result_to_string(s
->reload_result
));
1915 if (s
->control_pid
> 0)
1916 unit_serialize_item_format(u
, f
, "control-pid", PID_FMT
,
1919 if (s
->main_pid_known
&& s
->main_pid
> 0)
1920 unit_serialize_item_format(u
, f
, "main-pid", PID_FMT
, s
->main_pid
);
1922 unit_serialize_item(u
, f
, "main-pid-known", yes_no(s
->main_pid_known
));
1925 unit_serialize_item(u
, f
, "status-text", s
->status_text
);
1927 /* FIXME: There's a minor uncleanliness here: if there are
1928 * multiple commands attached here, we will start from the
1929 * first one again */
1930 if (s
->control_command_id
>= 0)
1931 unit_serialize_item(u
, f
, "control-command",
1932 service_exec_command_to_string(s
->control_command_id
));
1934 if (s
->socket_fd
>= 0) {
1937 copy
= fdset_put_dup(fds
, s
->socket_fd
);
1941 unit_serialize_item_format(u
, f
, "socket-fd", "%i", copy
);
1944 if (s
->bus_endpoint_fd
>= 0) {
1947 copy
= fdset_put_dup(fds
, s
->bus_endpoint_fd
);
1951 unit_serialize_item_format(u
, f
, "endpoint-fd", "%i", copy
);
1954 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
1957 copy
= fdset_put_dup(fds
, fs
->fd
);
1961 unit_serialize_item_format(u
, f
, "fd-store-fd", "%i", copy
);
1964 if (s
->main_exec_status
.pid
> 0) {
1965 unit_serialize_item_format(u
, f
, "main-exec-status-pid", PID_FMT
,
1966 s
->main_exec_status
.pid
);
1967 dual_timestamp_serialize(f
, "main-exec-status-start",
1968 &s
->main_exec_status
.start_timestamp
);
1969 dual_timestamp_serialize(f
, "main-exec-status-exit",
1970 &s
->main_exec_status
.exit_timestamp
);
1972 if (dual_timestamp_is_set(&s
->main_exec_status
.exit_timestamp
)) {
1973 unit_serialize_item_format(u
, f
, "main-exec-status-code", "%i",
1974 s
->main_exec_status
.code
);
1975 unit_serialize_item_format(u
, f
, "main-exec-status-status", "%i",
1976 s
->main_exec_status
.status
);
1979 if (dual_timestamp_is_set(&s
->watchdog_timestamp
))
1980 dual_timestamp_serialize(f
, "watchdog-timestamp", &s
->watchdog_timestamp
);
1982 if (s
->forbid_restart
)
1983 unit_serialize_item(u
, f
, "forbid-restart", yes_no(s
->forbid_restart
));
1988 static int service_deserialize_item(Unit
*u
, const char *key
, const char *value
, FDSet
*fds
) {
1989 Service
*s
= SERVICE(u
);
1997 if (streq(key
, "state")) {
2000 state
= service_state_from_string(value
);
2002 log_unit_debug(u
->id
, "Failed to parse state value %s", value
);
2004 s
->deserialized_state
= state
;
2005 } else if (streq(key
, "result")) {
2008 f
= service_result_from_string(value
);
2010 log_unit_debug(u
->id
, "Failed to parse result value %s", value
);
2011 else if (f
!= SERVICE_SUCCESS
)
2014 } else if (streq(key
, "reload-result")) {
2017 f
= service_result_from_string(value
);
2019 log_unit_debug(u
->id
, "Failed to parse reload result value %s", value
);
2020 else if (f
!= SERVICE_SUCCESS
)
2021 s
->reload_result
= f
;
2023 } else if (streq(key
, "control-pid")) {
2026 if (parse_pid(value
, &pid
) < 0)
2027 log_unit_debug(u
->id
, "Failed to parse control-pid value %s", value
);
2029 s
->control_pid
= pid
;
2030 } else if (streq(key
, "main-pid")) {
2033 if (parse_pid(value
, &pid
) < 0)
2034 log_unit_debug(u
->id
, "Failed to parse main-pid value %s", value
);
2036 service_set_main_pid(s
, pid
);
2037 unit_watch_pid(UNIT(s
), pid
);
2039 } else if (streq(key
, "main-pid-known")) {
2042 b
= parse_boolean(value
);
2044 log_unit_debug(u
->id
, "Failed to parse main-pid-known value %s", value
);
2046 s
->main_pid_known
= b
;
2047 } else if (streq(key
, "status-text")) {
2054 free(s
->status_text
);
2058 } else if (streq(key
, "control-command")) {
2059 ServiceExecCommand id
;
2061 id
= service_exec_command_from_string(value
);
2063 log_unit_debug(u
->id
, "Failed to parse exec-command value %s", value
);
2065 s
->control_command_id
= id
;
2066 s
->control_command
= s
->exec_command
[id
];
2068 } else if (streq(key
, "socket-fd")) {
2071 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2072 log_unit_debug(u
->id
, "Failed to parse socket-fd value %s", value
);
2074 asynchronous_close(s
->socket_fd
);
2075 s
->socket_fd
= fdset_remove(fds
, fd
);
2077 } else if (streq(key
, "endpoint-fd")) {
2080 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2081 log_unit_debug(u
->id
, "Failed to parse endpoint-fd value %s", value
);
2083 safe_close(s
->bus_endpoint_fd
);
2084 s
->bus_endpoint_fd
= fdset_remove(fds
, fd
);
2086 } else if (streq(key
, "fd-store-fd")) {
2089 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2090 log_unit_debug(u
->id
, "Failed to parse fd-store-fd value %s", value
);
2092 r
= service_add_fd_store(s
, fd
);
2094 log_unit_error_errno(u
->id
, r
, "Failed to add fd to store: %m");
2096 fdset_remove(fds
, fd
);
2099 } else if (streq(key
, "main-exec-status-pid")) {
2102 if (parse_pid(value
, &pid
) < 0)
2103 log_unit_debug(u
->id
, "Failed to parse main-exec-status-pid value %s", value
);
2105 s
->main_exec_status
.pid
= pid
;
2106 } else if (streq(key
, "main-exec-status-code")) {
2109 if (safe_atoi(value
, &i
) < 0)
2110 log_unit_debug(u
->id
, "Failed to parse main-exec-status-code value %s", value
);
2112 s
->main_exec_status
.code
= i
;
2113 } else if (streq(key
, "main-exec-status-status")) {
2116 if (safe_atoi(value
, &i
) < 0)
2117 log_unit_debug(u
->id
, "Failed to parse main-exec-status-status value %s", value
);
2119 s
->main_exec_status
.status
= i
;
2120 } else if (streq(key
, "main-exec-status-start"))
2121 dual_timestamp_deserialize(value
, &s
->main_exec_status
.start_timestamp
);
2122 else if (streq(key
, "main-exec-status-exit"))
2123 dual_timestamp_deserialize(value
, &s
->main_exec_status
.exit_timestamp
);
2124 else if (streq(key
, "watchdog-timestamp"))
2125 dual_timestamp_deserialize(value
, &s
->watchdog_timestamp
);
2126 else if (streq(key
, "forbid-restart")) {
2129 b
= parse_boolean(value
);
2131 log_unit_debug(u
->id
, "Failed to parse forbid-restart value %s", value
);
2133 s
->forbid_restart
= b
;
2135 log_unit_debug(u
->id
, "Unknown serialization key '%s'", key
);
2140 _pure_
static UnitActiveState
service_active_state(Unit
*u
) {
2141 const UnitActiveState
*table
;
2145 table
= SERVICE(u
)->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
2147 return table
[SERVICE(u
)->state
];
2150 static const char *service_sub_state_to_string(Unit
*u
) {
2153 return service_state_to_string(SERVICE(u
)->state
);
2156 static bool service_check_gc(Unit
*u
) {
2157 Service
*s
= SERVICE(u
);
2161 /* Never clean up services that still have a process around,
2162 * even if the service is formally dead. */
2163 if (cgroup_good(s
) > 0 ||
2164 main_pid_good(s
) > 0 ||
2165 control_pid_good(s
) > 0)
2171 _pure_
static bool service_check_snapshot(Unit
*u
) {
2172 Service
*s
= SERVICE(u
);
2176 return s
->socket_fd
< 0;
2179 static int service_retry_pid_file(Service
*s
) {
2182 assert(s
->pid_file
);
2183 assert(s
->state
== SERVICE_START
|| s
->state
== SERVICE_START_POST
);
2185 r
= service_load_pid_file(s
, false);
2189 service_unwatch_pid_file(s
);
2191 service_enter_running(s
, SERVICE_SUCCESS
);
2195 static int service_watch_pid_file(Service
*s
) {
2198 log_unit_debug(UNIT(s
)->id
, "Setting watch for %s's PID file %s", UNIT(s
)->id
, s
->pid_file_pathspec
->path
);
2200 r
= path_spec_watch(s
->pid_file_pathspec
, service_dispatch_io
);
2204 /* the pidfile might have appeared just before we set the watch */
2205 log_unit_debug(UNIT(s
)->id
, "Trying to read %s's PID file %s in case it changed", UNIT(s
)->id
, s
->pid_file_pathspec
->path
);
2206 service_retry_pid_file(s
);
2210 log_unit_error_errno(UNIT(s
)->id
, r
, "Failed to set a watch for %s's PID file %s: %m", UNIT(s
)->id
, s
->pid_file_pathspec
->path
);
2211 service_unwatch_pid_file(s
);
2215 static int service_demand_pid_file(Service
*s
) {
2218 assert(s
->pid_file
);
2219 assert(!s
->pid_file_pathspec
);
2221 ps
= new0(PathSpec
, 1);
2226 ps
->path
= strdup(s
->pid_file
);
2232 path_kill_slashes(ps
->path
);
2234 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2235 * keep their PID file open all the time. */
2236 ps
->type
= PATH_MODIFIED
;
2237 ps
->inotify_fd
= -1;
2239 s
->pid_file_pathspec
= ps
;
2241 return service_watch_pid_file(s
);
2244 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
) {
2245 PathSpec
*p
= userdata
;
2250 s
= SERVICE(p
->unit
);
2254 assert(s
->state
== SERVICE_START
|| s
->state
== SERVICE_START_POST
);
2255 assert(s
->pid_file_pathspec
);
2256 assert(path_spec_owns_inotify_fd(s
->pid_file_pathspec
, fd
));
2258 log_unit_debug(UNIT(s
)->id
, "inotify event for %s", UNIT(s
)->id
);
2260 if (path_spec_fd_event(p
, events
) < 0)
2263 if (service_retry_pid_file(s
) == 0)
2266 if (service_watch_pid_file(s
) < 0)
2272 service_unwatch_pid_file(s
);
2273 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2277 static void service_notify_cgroup_empty_event(Unit
*u
) {
2278 Service
*s
= SERVICE(u
);
2282 log_unit_debug(u
->id
, "%s: cgroup is empty", u
->id
);
2286 /* Waiting for SIGCHLD is usually more interesting,
2287 * because it includes return codes/signals. Which is
2288 * why we ignore the cgroup events for most cases,
2289 * except when we don't know pid which to expect the
2293 case SERVICE_START_POST
:
2294 /* If we were hoping for the daemon to write its PID file,
2295 * we can give up now. */
2296 if (s
->pid_file_pathspec
) {
2297 log_unit_warning(u
->id
, "%s never wrote its PID file. Failing.", UNIT(s
)->id
);
2299 service_unwatch_pid_file(s
);
2300 if (s
->state
== SERVICE_START
)
2301 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2303 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2307 case SERVICE_RUNNING
:
2308 /* service_enter_running() will figure out what to do */
2309 service_enter_running(s
, SERVICE_SUCCESS
);
2312 case SERVICE_STOP_SIGABRT
:
2313 case SERVICE_STOP_SIGTERM
:
2314 case SERVICE_STOP_SIGKILL
:
2316 if (main_pid_good(s
) <= 0 && !control_pid_good(s
))
2317 service_enter_stop_post(s
, SERVICE_SUCCESS
);
2321 case SERVICE_STOP_POST
:
2322 case SERVICE_FINAL_SIGTERM
:
2323 case SERVICE_FINAL_SIGKILL
:
2324 if (main_pid_good(s
) <= 0 && !control_pid_good(s
))
2325 service_enter_dead(s
, SERVICE_SUCCESS
, true);
2334 static void service_sigchld_event(Unit
*u
, pid_t pid
, int code
, int status
) {
2335 Service
*s
= SERVICE(u
);
2341 if (UNIT(s
)->fragment_path
? is_clean_exit(code
, status
, &s
->success_status
) :
2342 is_clean_exit_lsb(code
, status
, &s
->success_status
))
2343 f
= SERVICE_SUCCESS
;
2344 else if (code
== CLD_EXITED
)
2345 f
= SERVICE_FAILURE_EXIT_CODE
;
2346 else if (code
== CLD_KILLED
)
2347 f
= SERVICE_FAILURE_SIGNAL
;
2348 else if (code
== CLD_DUMPED
)
2349 f
= SERVICE_FAILURE_CORE_DUMP
;
2351 assert_not_reached("Unknown code");
2353 if (s
->main_pid
== pid
) {
2354 /* Forking services may occasionally move to a new PID.
2355 * As long as they update the PID file before exiting the old
2356 * PID, they're fine. */
2357 if (service_load_pid_file(s
, false) == 0)
2361 exec_status_exit(&s
->main_exec_status
, &s
->exec_context
, pid
, code
, status
);
2363 if (s
->main_command
) {
2364 /* If this is not a forking service than the
2365 * main process got started and hence we copy
2366 * the exit status so that it is recorded both
2367 * as main and as control process exit
2370 s
->main_command
->exec_status
= s
->main_exec_status
;
2372 if (s
->main_command
->ignore
)
2373 f
= SERVICE_SUCCESS
;
2374 } else if (s
->exec_command
[SERVICE_EXEC_START
]) {
2376 /* If this is a forked process, then we should
2377 * ignore the return value if this was
2378 * configured for the starter process */
2380 if (s
->exec_command
[SERVICE_EXEC_START
]->ignore
)
2381 f
= SERVICE_SUCCESS
;
2384 log_unit_struct(u
->id
,
2385 f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
,
2386 LOG_MESSAGE("%s: main process exited, code=%s, status=%i/%s",
2387 u
->id
, sigchld_code_to_string(code
), status
,
2388 strna(code
== CLD_EXITED
2389 ? exit_status_to_string(status
, EXIT_STATUS_FULL
)
2390 : signal_to_string(status
))),
2391 "EXIT_CODE=%s", sigchld_code_to_string(code
),
2392 "EXIT_STATUS=%i", status
,
2395 if (f
!= SERVICE_SUCCESS
)
2398 if (s
->main_command
&&
2399 s
->main_command
->command_next
&&
2400 f
== SERVICE_SUCCESS
) {
2402 /* There is another command to *
2403 * execute, so let's do that. */
2405 log_unit_debug(u
->id
, "%s running next main command for state %s", u
->id
, service_state_to_string(s
->state
));
2406 service_run_next_main(s
);
2410 /* The service exited, so the service is officially
2412 s
->main_command
= NULL
;
2416 case SERVICE_START_POST
:
2417 case SERVICE_RELOAD
:
2419 /* Need to wait until the operation is
2424 if (s
->type
== SERVICE_ONESHOT
) {
2425 /* This was our main goal, so let's go on */
2426 if (f
== SERVICE_SUCCESS
)
2427 service_enter_start_post(s
);
2429 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2435 case SERVICE_RUNNING
:
2436 service_enter_running(s
, f
);
2439 case SERVICE_STOP_SIGABRT
:
2440 case SERVICE_STOP_SIGTERM
:
2441 case SERVICE_STOP_SIGKILL
:
2443 if (!control_pid_good(s
))
2444 service_enter_stop_post(s
, f
);
2446 /* If there is still a control process, wait for that first */
2449 case SERVICE_STOP_POST
:
2450 case SERVICE_FINAL_SIGTERM
:
2451 case SERVICE_FINAL_SIGKILL
:
2453 if (!control_pid_good(s
))
2454 service_enter_dead(s
, f
, true);
2458 assert_not_reached("Uh, main process died at wrong time.");
2462 } else if (s
->control_pid
== pid
) {
2465 if (s
->control_command
) {
2466 exec_status_exit(&s
->control_command
->exec_status
, &s
->exec_context
, pid
, code
, status
);
2468 if (s
->control_command
->ignore
)
2469 f
= SERVICE_SUCCESS
;
2472 log_unit_full(u
->id
,
2473 f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
,
2474 "%s: control process exited, code=%s status=%i",
2475 u
->id
, sigchld_code_to_string(code
), status
);
2477 if (f
!= SERVICE_SUCCESS
)
2480 /* Immediately get rid of the cgroup, so that the
2481 * kernel doesn't delay the cgroup empty messages for
2482 * the service cgroup any longer than necessary */
2483 service_kill_control_processes(s
);
2485 if (s
->control_command
&&
2486 s
->control_command
->command_next
&&
2487 f
== SERVICE_SUCCESS
) {
2489 /* There is another command to *
2490 * execute, so let's do that. */
2492 log_unit_debug(u
->id
, "%s running next control command for state %s", u
->id
, service_state_to_string(s
->state
));
2493 service_run_next_control(s
);
2496 /* No further commands for this step, so let's
2497 * figure out what to do next */
2499 s
->control_command
= NULL
;
2500 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
2502 log_unit_debug(u
->id
, "%s got final SIGCHLD for state %s", u
->id
, service_state_to_string(s
->state
));
2506 case SERVICE_START_PRE
:
2507 if (f
== SERVICE_SUCCESS
)
2508 service_enter_start(s
);
2510 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2514 if (s
->type
!= SERVICE_FORKING
)
2515 /* Maybe spurious event due to a reload that changed the type? */
2518 if (f
!= SERVICE_SUCCESS
) {
2519 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2524 bool has_start_post
;
2527 /* Let's try to load the pid file here if we can.
2528 * The PID file might actually be created by a START_POST
2529 * script. In that case don't worry if the loading fails. */
2531 has_start_post
= !!s
->exec_command
[SERVICE_EXEC_START_POST
];
2532 r
= service_load_pid_file(s
, !has_start_post
);
2533 if (!has_start_post
&& r
< 0) {
2534 r
= service_demand_pid_file(s
);
2535 if (r
< 0 || !cgroup_good(s
))
2536 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2540 service_search_main_pid(s
);
2542 service_enter_start_post(s
);
2545 case SERVICE_START_POST
:
2546 if (f
!= SERVICE_SUCCESS
) {
2547 service_enter_stop(s
, f
);
2554 r
= service_load_pid_file(s
, true);
2556 r
= service_demand_pid_file(s
);
2557 if (r
< 0 || !cgroup_good(s
))
2558 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2562 service_search_main_pid(s
);
2564 service_enter_running(s
, SERVICE_SUCCESS
);
2567 case SERVICE_RELOAD
:
2568 if (f
== SERVICE_SUCCESS
) {
2569 service_load_pid_file(s
, true);
2570 service_search_main_pid(s
);
2573 s
->reload_result
= f
;
2574 service_enter_running(s
, SERVICE_SUCCESS
);
2578 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
2581 case SERVICE_STOP_SIGABRT
:
2582 case SERVICE_STOP_SIGTERM
:
2583 case SERVICE_STOP_SIGKILL
:
2584 if (main_pid_good(s
) <= 0)
2585 service_enter_stop_post(s
, f
);
2587 /* If there is still a service
2588 * process around, wait until
2589 * that one quit, too */
2592 case SERVICE_STOP_POST
:
2593 case SERVICE_FINAL_SIGTERM
:
2594 case SERVICE_FINAL_SIGKILL
:
2595 if (main_pid_good(s
) <= 0)
2596 service_enter_dead(s
, f
, true);
2600 assert_not_reached("Uh, control process died at wrong time.");
2605 /* Notify clients about changed exit status */
2606 unit_add_to_dbus_queue(u
);
2608 /* We got one SIGCHLD for the service, let's watch all
2609 * processes that are now running of the service, and watch
2610 * that. Among the PIDs we then watch will be children
2611 * reassigned to us, which hopefully allows us to identify
2612 * when all children are gone */
2613 unit_tidy_watch_pids(u
, s
->main_pid
, s
->control_pid
);
2614 unit_watch_all_pids(u
);
2616 /* If the PID set is empty now, then let's finish this off */
2617 if (set_isempty(u
->pids
))
2618 service_notify_cgroup_empty_event(u
);
2621 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
) {
2622 Service
*s
= SERVICE(userdata
);
2625 assert(source
== s
->timer_event_source
);
2629 case SERVICE_START_PRE
:
2631 log_unit_warning(UNIT(s
)->id
, "%s %s operation timed out. Terminating.", UNIT(s
)->id
, s
->state
== SERVICE_START
? "start" : "start-pre");
2632 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2635 case SERVICE_START_POST
:
2636 log_unit_warning(UNIT(s
)->id
, "%s start-post operation timed out. Stopping.", UNIT(s
)->id
);
2637 service_enter_stop(s
, SERVICE_FAILURE_TIMEOUT
);
2640 case SERVICE_RELOAD
:
2641 log_unit_warning(UNIT(s
)->id
, "%s reload operation timed out. Stopping.", UNIT(s
)->id
);
2642 s
->reload_result
= SERVICE_FAILURE_TIMEOUT
;
2643 service_enter_running(s
, SERVICE_SUCCESS
);
2647 log_unit_warning(UNIT(s
)->id
, "%s stopping timed out. Terminating.", UNIT(s
)->id
);
2648 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2651 case SERVICE_STOP_SIGABRT
:
2652 log_unit_warning(UNIT(s
)->id
,
2653 "%s stop-sigabrt timed out. Terminating.", UNIT(s
)->id
);
2654 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, s
->result
);
2657 case SERVICE_STOP_SIGTERM
:
2658 if (s
->kill_context
.send_sigkill
) {
2659 log_unit_warning(UNIT(s
)->id
, "%s stop-sigterm timed out. Killing.", UNIT(s
)->id
);
2660 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
2662 log_unit_warning(UNIT(s
)->id
, "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s
)->id
);
2663 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
2668 case SERVICE_STOP_SIGKILL
:
2669 /* Uh, we sent a SIGKILL and it is still not gone?
2670 * Must be something we cannot kill, so let's just be
2671 * weirded out and continue */
2673 log_unit_warning(UNIT(s
)->id
, "%s still around after SIGKILL. Ignoring.", UNIT(s
)->id
);
2674 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
2677 case SERVICE_STOP_POST
:
2678 log_unit_warning(UNIT(s
)->id
, "%s stop-post timed out. Terminating.", UNIT(s
)->id
);
2679 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2682 case SERVICE_FINAL_SIGTERM
:
2683 if (s
->kill_context
.send_sigkill
) {
2684 log_unit_warning(UNIT(s
)->id
, "%s stop-final-sigterm timed out. Killing.", UNIT(s
)->id
);
2685 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
2687 log_unit_warning(UNIT(s
)->id
, "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.", UNIT(s
)->id
);
2688 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, false);
2693 case SERVICE_FINAL_SIGKILL
:
2694 log_unit_warning(UNIT(s
)->id
, "%s still around after final SIGKILL. Entering failed mode.", UNIT(s
)->id
);
2695 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, true);
2698 case SERVICE_AUTO_RESTART
:
2699 log_unit_info(UNIT(s
)->id
,
2700 s
->restart_usec
> 0 ?
2701 "%s holdoff time over, scheduling restart." :
2702 "%s has no holdoff time, scheduling restart.",
2704 service_enter_restart(s
);
2708 assert_not_reached("Timeout at wrong time.");
2714 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
) {
2715 Service
*s
= SERVICE(userdata
);
2716 char t
[FORMAT_TIMESPAN_MAX
];
2719 assert(source
== s
->watchdog_event_source
);
2721 log_unit_error(UNIT(s
)->id
, "%s watchdog timeout (limit %s)!", UNIT(s
)->id
,
2722 format_timespan(t
, sizeof(t
), s
->watchdog_usec
, 1));
2724 service_enter_signal(s
, SERVICE_STOP_SIGABRT
, SERVICE_FAILURE_WATCHDOG
);
2729 static void service_notify_message(Unit
*u
, pid_t pid
, char **tags
, FDSet
*fds
) {
2730 Service
*s
= SERVICE(u
);
2731 _cleanup_free_
char *cc
= NULL
;
2732 bool notify_dbus
= false;
2737 cc
= strv_join(tags
, ", ");
2738 log_unit_debug(u
->id
, "%s: Got notification message from PID "PID_FMT
" (%s)",
2739 u
->id
, pid
, isempty(cc
) ? "n/a" : cc
);
2741 if (s
->notify_access
== NOTIFY_NONE
) {
2742 log_unit_warning(u
->id
, "%s: Got notification message from PID "PID_FMT
", but reception is disabled.", u
->id
, pid
);
2746 if (s
->notify_access
== NOTIFY_MAIN
&& pid
!= s
->main_pid
) {
2747 if (s
->main_pid
!= 0)
2748 log_unit_warning(u
->id
, "%s: Got notification message from PID "PID_FMT
", but reception only permitted for main PID "PID_FMT
, u
->id
, pid
, s
->main_pid
);
2750 log_unit_debug(u
->id
, "%s: Got notification message from PID "PID_FMT
", but reception only permitted for main PID which is currently not known", u
->id
, pid
);
2754 /* Interpret MAINPID= */
2755 e
= strv_find_startswith(tags
, "MAINPID=");
2756 if (e
&& IN_SET(s
->state
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
)) {
2757 if (parse_pid(e
, &pid
) < 0)
2758 log_unit_warning(u
->id
, "Failed to parse MAINPID= field in notification message: %s", e
);
2760 log_unit_debug(u
->id
, "%s: got MAINPID=%s", u
->id
, e
);
2762 service_set_main_pid(s
, pid
);
2763 unit_watch_pid(UNIT(s
), pid
);
2768 /* Interpret RELOADING= */
2769 if (strv_find(tags
, "RELOADING=1")) {
2771 log_unit_debug(u
->id
, "%s: got RELOADING=1", u
->id
);
2772 s
->notify_state
= NOTIFY_RELOADING
;
2774 if (s
->state
== SERVICE_RUNNING
)
2775 service_enter_reload_by_notify(s
);
2780 /* Interpret READY= */
2781 if (strv_find(tags
, "READY=1")) {
2783 log_unit_debug(u
->id
, "%s: got READY=1", u
->id
);
2784 s
->notify_state
= NOTIFY_READY
;
2786 /* Type=notify services inform us about completed
2787 * initialization with READY=1 */
2788 if (s
->type
== SERVICE_NOTIFY
&& s
->state
== SERVICE_START
)
2789 service_enter_start_post(s
);
2791 /* Sending READY=1 while we are reloading informs us
2792 * that the reloading is complete */
2793 if (s
->state
== SERVICE_RELOAD
&& s
->control_pid
== 0)
2794 service_enter_running(s
, SERVICE_SUCCESS
);
2799 /* Interpret STOPPING= */
2800 if (strv_find(tags
, "STOPPING=1")) {
2802 log_unit_debug(u
->id
, "%s: got STOPPING=1", u
->id
);
2803 s
->notify_state
= NOTIFY_STOPPING
;
2805 if (s
->state
== SERVICE_RUNNING
)
2806 service_enter_stop_by_notify(s
);
2811 /* Interpret STATUS= */
2812 e
= strv_find_startswith(tags
, "STATUS=");
2814 _cleanup_free_
char *t
= NULL
;
2817 if (!utf8_is_valid(e
))
2818 log_unit_warning(u
->id
, "Status message in notification is not UTF-8 clean.");
2820 log_unit_debug(u
->id
, "%s: got STATUS=%s", u
->id
, e
);
2828 if (!streq_ptr(s
->status_text
, t
)) {
2830 free(s
->status_text
);
2838 /* Interpret ERRNO= */
2839 e
= strv_find_startswith(tags
, "ERRNO=");
2843 if (safe_atoi(e
, &status_errno
) < 0 || status_errno
< 0)
2844 log_unit_warning(u
->id
, "Failed to parse ERRNO= field in notification message: %s", e
);
2846 log_unit_debug(u
->id
, "%s: got ERRNO=%s", u
->id
, e
);
2848 if (s
->status_errno
!= status_errno
) {
2849 s
->status_errno
= status_errno
;
2855 /* Interpret WATCHDOG= */
2856 if (strv_find(tags
, "WATCHDOG=1")) {
2857 log_unit_debug(u
->id
, "%s: got WATCHDOG=1", u
->id
);
2858 service_reset_watchdog(s
);
2861 /* Add the passed fds to the fd store */
2862 if (strv_find(tags
, "FDSTORE=1")) {
2863 log_unit_debug(u
->id
, "%s: got FDSTORE=1", u
->id
);
2864 service_add_fd_store_set(s
, fds
);
2867 /* Notify clients about changed status or main pid */
2869 unit_add_to_dbus_queue(u
);
2872 static int service_get_timeout(Unit
*u
, uint64_t *timeout
) {
2873 Service
*s
= SERVICE(u
);
2876 if (!s
->timer_event_source
)
2879 r
= sd_event_source_get_time(s
->timer_event_source
, timeout
);
2886 static void service_bus_name_owner_change(
2889 const char *old_owner
,
2890 const char *new_owner
) {
2892 Service
*s
= SERVICE(u
);
2898 assert(streq(s
->bus_name
, name
));
2899 assert(old_owner
|| new_owner
);
2901 if (old_owner
&& new_owner
)
2902 log_unit_debug(u
->id
, "%s's D-Bus name %s changed owner from %s to %s", u
->id
, name
, old_owner
, new_owner
);
2904 log_unit_debug(u
->id
, "%s's D-Bus name %s no longer registered by %s", u
->id
, name
, old_owner
);
2906 log_unit_debug(u
->id
, "%s's D-Bus name %s now registered by %s", u
->id
, name
, new_owner
);
2908 s
->bus_name_good
= !!new_owner
;
2910 if (s
->type
== SERVICE_DBUS
) {
2912 /* service_enter_running() will figure out what to
2914 if (s
->state
== SERVICE_RUNNING
)
2915 service_enter_running(s
, SERVICE_SUCCESS
);
2916 else if (s
->state
== SERVICE_START
&& new_owner
)
2917 service_enter_start_post(s
);
2919 } else if (new_owner
&&
2921 (s
->state
== SERVICE_START
||
2922 s
->state
== SERVICE_START_POST
||
2923 s
->state
== SERVICE_RUNNING
||
2924 s
->state
== SERVICE_RELOAD
)) {
2926 _cleanup_bus_creds_unref_ sd_bus_creds
*creds
= NULL
;
2929 /* Try to acquire PID from bus service */
2931 r
= sd_bus_get_name_creds(u
->manager
->api_bus
, name
, SD_BUS_CREDS_PID
, &creds
);
2933 r
= sd_bus_creds_get_pid(creds
, &pid
);
2935 log_unit_debug(u
->id
, "%s's D-Bus name %s is now owned by process %u", u
->id
, name
, (unsigned) pid
);
2937 service_set_main_pid(s
, pid
);
2938 unit_watch_pid(UNIT(s
), pid
);
2943 int service_set_socket_fd(Service
*s
, int fd
, Socket
*sock
, bool selinux_context_net
) {
2944 _cleanup_free_
char *peer
= NULL
;
2950 /* This is called by the socket code when instantiating a new
2951 * service for a stream socket and the socket needs to be
2954 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
2957 if (s
->socket_fd
>= 0)
2960 if (s
->state
!= SERVICE_DEAD
)
2963 if (getpeername_pretty(fd
, &peer
) >= 0) {
2965 if (UNIT(s
)->description
) {
2966 _cleanup_free_
char *a
;
2968 a
= strjoin(UNIT(s
)->description
, " (", peer
, ")", NULL
);
2972 r
= unit_set_description(UNIT(s
), a
);
2974 r
= unit_set_description(UNIT(s
), peer
);
2981 s
->socket_fd_selinux_context_net
= selinux_context_net
;
2983 unit_ref_set(&s
->accept_socket
, UNIT(sock
));
2985 return unit_add_two_dependencies(UNIT(sock
), UNIT_BEFORE
, UNIT_TRIGGERS
, UNIT(s
), false);
2988 static void service_reset_failed(Unit
*u
) {
2989 Service
*s
= SERVICE(u
);
2993 if (s
->state
== SERVICE_FAILED
)
2994 service_set_state(s
, SERVICE_DEAD
);
2996 s
->result
= SERVICE_SUCCESS
;
2997 s
->reload_result
= SERVICE_SUCCESS
;
2999 RATELIMIT_RESET(s
->start_limit
);
3002 static int service_kill(Unit
*u
, KillWho who
, int signo
, sd_bus_error
*error
) {
3003 Service
*s
= SERVICE(u
);
3005 return unit_kill_common(u
, who
, signo
, s
->main_pid
, s
->control_pid
, error
);
3008 static const char* const service_state_table
[_SERVICE_STATE_MAX
] = {
3009 [SERVICE_DEAD
] = "dead",
3010 [SERVICE_START_PRE
] = "start-pre",
3011 [SERVICE_START
] = "start",
3012 [SERVICE_START_POST
] = "start-post",
3013 [SERVICE_RUNNING
] = "running",
3014 [SERVICE_EXITED
] = "exited",
3015 [SERVICE_RELOAD
] = "reload",
3016 [SERVICE_STOP
] = "stop",
3017 [SERVICE_STOP_SIGABRT
] = "stop-sigabrt",
3018 [SERVICE_STOP_SIGTERM
] = "stop-sigterm",
3019 [SERVICE_STOP_SIGKILL
] = "stop-sigkill",
3020 [SERVICE_STOP_POST
] = "stop-post",
3021 [SERVICE_FINAL_SIGTERM
] = "final-sigterm",
3022 [SERVICE_FINAL_SIGKILL
] = "final-sigkill",
3023 [SERVICE_FAILED
] = "failed",
3024 [SERVICE_AUTO_RESTART
] = "auto-restart",
3027 DEFINE_STRING_TABLE_LOOKUP(service_state
, ServiceState
);
3029 static const char* const service_restart_table
[_SERVICE_RESTART_MAX
] = {
3030 [SERVICE_RESTART_NO
] = "no",
3031 [SERVICE_RESTART_ON_SUCCESS
] = "on-success",
3032 [SERVICE_RESTART_ON_FAILURE
] = "on-failure",
3033 [SERVICE_RESTART_ON_ABNORMAL
] = "on-abnormal",
3034 [SERVICE_RESTART_ON_WATCHDOG
] = "on-watchdog",
3035 [SERVICE_RESTART_ON_ABORT
] = "on-abort",
3036 [SERVICE_RESTART_ALWAYS
] = "always",
3039 DEFINE_STRING_TABLE_LOOKUP(service_restart
, ServiceRestart
);
3041 static const char* const service_type_table
[_SERVICE_TYPE_MAX
] = {
3042 [SERVICE_SIMPLE
] = "simple",
3043 [SERVICE_FORKING
] = "forking",
3044 [SERVICE_ONESHOT
] = "oneshot",
3045 [SERVICE_DBUS
] = "dbus",
3046 [SERVICE_NOTIFY
] = "notify",
3047 [SERVICE_IDLE
] = "idle"
3050 DEFINE_STRING_TABLE_LOOKUP(service_type
, ServiceType
);
3052 static const char* const service_exec_command_table
[_SERVICE_EXEC_COMMAND_MAX
] = {
3053 [SERVICE_EXEC_START_PRE
] = "ExecStartPre",
3054 [SERVICE_EXEC_START
] = "ExecStart",
3055 [SERVICE_EXEC_START_POST
] = "ExecStartPost",
3056 [SERVICE_EXEC_RELOAD
] = "ExecReload",
3057 [SERVICE_EXEC_STOP
] = "ExecStop",
3058 [SERVICE_EXEC_STOP_POST
] = "ExecStopPost",
3061 DEFINE_STRING_TABLE_LOOKUP(service_exec_command
, ServiceExecCommand
);
3063 static const char* const notify_access_table
[_NOTIFY_ACCESS_MAX
] = {
3064 [NOTIFY_NONE
] = "none",
3065 [NOTIFY_MAIN
] = "main",
3066 [NOTIFY_ALL
] = "all"
3069 DEFINE_STRING_TABLE_LOOKUP(notify_access
, NotifyAccess
);
3071 static const char* const notify_state_table
[_NOTIFY_STATE_MAX
] = {
3072 [NOTIFY_UNKNOWN
] = "unknown",
3073 [NOTIFY_READY
] = "ready",
3074 [NOTIFY_RELOADING
] = "reloading",
3075 [NOTIFY_STOPPING
] = "stopping",
3078 DEFINE_STRING_TABLE_LOOKUP(notify_state
, NotifyState
);
3080 static const char* const service_result_table
[_SERVICE_RESULT_MAX
] = {
3081 [SERVICE_SUCCESS
] = "success",
3082 [SERVICE_FAILURE_RESOURCES
] = "resources",
3083 [SERVICE_FAILURE_TIMEOUT
] = "timeout",
3084 [SERVICE_FAILURE_EXIT_CODE
] = "exit-code",
3085 [SERVICE_FAILURE_SIGNAL
] = "signal",
3086 [SERVICE_FAILURE_CORE_DUMP
] = "core-dump",
3087 [SERVICE_FAILURE_WATCHDOG
] = "watchdog",
3088 [SERVICE_FAILURE_START_LIMIT
] = "start-limit"
3091 DEFINE_STRING_TABLE_LOOKUP(service_result
, ServiceResult
);
3093 const UnitVTable service_vtable
= {
3094 .object_size
= sizeof(Service
),
3095 .exec_context_offset
= offsetof(Service
, exec_context
),
3096 .cgroup_context_offset
= offsetof(Service
, cgroup_context
),
3097 .kill_context_offset
= offsetof(Service
, kill_context
),
3098 .exec_runtime_offset
= offsetof(Service
, exec_runtime
),
3104 .private_section
= "Service",
3106 .init
= service_init
,
3107 .done
= service_done
,
3108 .load
= service_load
,
3109 .release_resources
= service_release_resources
,
3111 .coldplug
= service_coldplug
,
3113 .dump
= service_dump
,
3115 .start
= service_start
,
3116 .stop
= service_stop
,
3117 .reload
= service_reload
,
3119 .can_reload
= service_can_reload
,
3121 .kill
= service_kill
,
3123 .serialize
= service_serialize
,
3124 .deserialize_item
= service_deserialize_item
,
3126 .active_state
= service_active_state
,
3127 .sub_state_to_string
= service_sub_state_to_string
,
3129 .check_gc
= service_check_gc
,
3130 .check_snapshot
= service_check_snapshot
,
3132 .sigchld_event
= service_sigchld_event
,
3134 .reset_failed
= service_reset_failed
,
3136 .notify_cgroup_empty
= service_notify_cgroup_empty_event
,
3137 .notify_message
= service_notify_message
,
3139 .bus_name_owner_change
= service_bus_name_owner_change
,
3141 .bus_interface
= "org.freedesktop.systemd1.Service",
3142 .bus_vtable
= bus_service_vtable
,
3143 .bus_set_property
= bus_service_set_property
,
3144 .bus_commit_properties
= bus_service_commit_properties
,
3146 .get_timeout
= service_get_timeout
,
3147 .can_transient
= true,
3149 .status_message_formats
= {
3150 .starting_stopping
= {
3151 [0] = "Starting %s...",
3152 [1] = "Stopping %s...",
3154 .finished_start_job
= {
3155 [JOB_DONE
] = "Started %s.",
3156 [JOB_FAILED
] = "Failed to start %s.",
3157 [JOB_DEPENDENCY
] = "Dependency failed for %s.",
3158 [JOB_TIMEOUT
] = "Timed out starting %s.",
3160 .finished_stop_job
= {
3161 [JOB_DONE
] = "Stopped %s.",
3162 [JOB_FAILED
] = "Stopped (with error) %s.",
3163 [JOB_TIMEOUT
] = "Timed out stopping %s.",