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"
51 static const UnitActiveState state_translation_table
[_SERVICE_STATE_MAX
] = {
52 [SERVICE_DEAD
] = UNIT_INACTIVE
,
53 [SERVICE_START_PRE
] = UNIT_ACTIVATING
,
54 [SERVICE_START
] = UNIT_ACTIVATING
,
55 [SERVICE_START_POST
] = UNIT_ACTIVATING
,
56 [SERVICE_RUNNING
] = UNIT_ACTIVE
,
57 [SERVICE_EXITED
] = UNIT_ACTIVE
,
58 [SERVICE_RELOAD
] = UNIT_RELOADING
,
59 [SERVICE_STOP
] = UNIT_DEACTIVATING
,
60 [SERVICE_STOP_SIGABRT
] = UNIT_DEACTIVATING
,
61 [SERVICE_STOP_SIGTERM
] = UNIT_DEACTIVATING
,
62 [SERVICE_STOP_SIGKILL
] = UNIT_DEACTIVATING
,
63 [SERVICE_STOP_POST
] = UNIT_DEACTIVATING
,
64 [SERVICE_FINAL_SIGTERM
] = UNIT_DEACTIVATING
,
65 [SERVICE_FINAL_SIGKILL
] = UNIT_DEACTIVATING
,
66 [SERVICE_FAILED
] = UNIT_FAILED
,
67 [SERVICE_AUTO_RESTART
] = UNIT_ACTIVATING
70 /* For Type=idle we never want to delay any other jobs, hence we
71 * consider idle jobs active as soon as we start working on them */
72 static const UnitActiveState state_translation_table_idle
[_SERVICE_STATE_MAX
] = {
73 [SERVICE_DEAD
] = UNIT_INACTIVE
,
74 [SERVICE_START_PRE
] = UNIT_ACTIVE
,
75 [SERVICE_START
] = UNIT_ACTIVE
,
76 [SERVICE_START_POST
] = UNIT_ACTIVE
,
77 [SERVICE_RUNNING
] = UNIT_ACTIVE
,
78 [SERVICE_EXITED
] = UNIT_ACTIVE
,
79 [SERVICE_RELOAD
] = UNIT_RELOADING
,
80 [SERVICE_STOP
] = UNIT_DEACTIVATING
,
81 [SERVICE_STOP_SIGABRT
] = UNIT_DEACTIVATING
,
82 [SERVICE_STOP_SIGTERM
] = UNIT_DEACTIVATING
,
83 [SERVICE_STOP_SIGKILL
] = UNIT_DEACTIVATING
,
84 [SERVICE_STOP_POST
] = UNIT_DEACTIVATING
,
85 [SERVICE_FINAL_SIGTERM
] = UNIT_DEACTIVATING
,
86 [SERVICE_FINAL_SIGKILL
] = UNIT_DEACTIVATING
,
87 [SERVICE_FAILED
] = UNIT_FAILED
,
88 [SERVICE_AUTO_RESTART
] = UNIT_ACTIVATING
91 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
);
92 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
);
93 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
);
95 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
);
96 static void service_enter_reload_by_notify(Service
*s
);
98 static void service_init(Unit
*u
) {
99 Service
*s
= SERVICE(u
);
102 assert(u
->load_state
== UNIT_STUB
);
104 s
->timeout_start_usec
= u
->manager
->default_timeout_start_usec
;
105 s
->timeout_stop_usec
= u
->manager
->default_timeout_stop_usec
;
106 s
->restart_usec
= u
->manager
->default_restart_usec
;
107 s
->type
= _SERVICE_TYPE_INVALID
;
109 s
->bus_endpoint_fd
= -1;
110 s
->guess_main_pid
= true;
112 RATELIMIT_INIT(s
->start_limit
, u
->manager
->default_start_limit_interval
, u
->manager
->default_start_limit_burst
);
114 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
117 static void service_unwatch_control_pid(Service
*s
) {
120 if (s
->control_pid
<= 0)
123 unit_unwatch_pid(UNIT(s
), s
->control_pid
);
127 static void service_unwatch_main_pid(Service
*s
) {
130 if (s
->main_pid
<= 0)
133 unit_unwatch_pid(UNIT(s
), s
->main_pid
);
137 static void service_unwatch_pid_file(Service
*s
) {
138 if (!s
->pid_file_pathspec
)
141 log_unit_debug(UNIT(s
)->id
, "Stopping watch for %s's PID file %s", UNIT(s
)->id
, s
->pid_file_pathspec
->path
);
142 path_spec_unwatch(s
->pid_file_pathspec
);
143 path_spec_done(s
->pid_file_pathspec
);
144 free(s
->pid_file_pathspec
);
145 s
->pid_file_pathspec
= NULL
;
148 static int service_set_main_pid(Service
*s
, pid_t pid
) {
159 if (s
->main_pid
== pid
&& s
->main_pid_known
)
162 if (s
->main_pid
!= pid
) {
163 service_unwatch_main_pid(s
);
164 exec_status_start(&s
->main_exec_status
, pid
);
168 s
->main_pid_known
= true;
170 if (get_parent_of_pid(pid
, &ppid
) >= 0 && ppid
!= getpid()) {
171 log_unit_warning(UNIT(s
)->id
, "%s: Supervising process "PID_FMT
" which is not our child. We'll most likely not notice when it exits.", UNIT(s
)->id
, pid
);
172 s
->main_pid_alien
= true;
174 s
->main_pid_alien
= false;
179 static void service_close_socket_fd(Service
*s
) {
182 s
->socket_fd
= asynchronous_close(s
->socket_fd
);
185 static void service_connection_unref(Service
*s
) {
188 if (!UNIT_ISSET(s
->accept_socket
))
191 socket_connection_unref(SOCKET(UNIT_DEREF(s
->accept_socket
)));
192 unit_ref_unset(&s
->accept_socket
);
195 static void service_stop_watchdog(Service
*s
) {
198 s
->watchdog_event_source
= sd_event_source_unref(s
->watchdog_event_source
);
199 s
->watchdog_timestamp
= DUAL_TIMESTAMP_NULL
;
202 static void service_start_watchdog(Service
*s
) {
207 if (s
->watchdog_usec
<= 0)
210 if (s
->watchdog_event_source
) {
211 r
= sd_event_source_set_time(s
->watchdog_event_source
, s
->watchdog_timestamp
.monotonic
+ s
->watchdog_usec
);
213 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to reset watchdog timer: %m", UNIT(s
)->id
);
217 r
= sd_event_source_set_enabled(s
->watchdog_event_source
, SD_EVENT_ONESHOT
);
219 r
= sd_event_add_time(
220 UNIT(s
)->manager
->event
,
221 &s
->watchdog_event_source
,
223 s
->watchdog_timestamp
.monotonic
+ s
->watchdog_usec
, 0,
224 service_dispatch_watchdog
, s
);
226 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to add watchdog timer: %m", UNIT(s
)->id
);
230 /* Let's process everything else which might be a sign
231 * of living before we consider a service died. */
232 r
= sd_event_source_set_priority(s
->watchdog_event_source
, SD_EVENT_PRIORITY_IDLE
);
236 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to install watchdog timer: %m", UNIT(s
)->id
);
239 static void service_reset_watchdog(Service
*s
) {
242 dual_timestamp_get(&s
->watchdog_timestamp
);
243 service_start_watchdog(s
);
246 static void service_fd_store_unlink(ServiceFDStore
*fs
) {
252 assert(fs
->service
->n_fd_store
> 0);
253 LIST_REMOVE(fd_store
, fs
->service
->fd_store
, fs
);
254 fs
->service
->n_fd_store
--;
257 if (fs
->event_source
) {
258 sd_event_source_set_enabled(fs
->event_source
, SD_EVENT_OFF
);
259 sd_event_source_unref(fs
->event_source
);
266 static void service_release_resources(Unit
*u
) {
267 Service
*s
= SERVICE(u
);
274 log_debug("Releasing all resources for %s", u
->id
);
277 service_fd_store_unlink(s
->fd_store
);
279 assert(s
->n_fd_store
== 0);
282 static void service_done(Unit
*u
) {
283 Service
*s
= SERVICE(u
);
290 free(s
->status_text
);
291 s
->status_text
= NULL
;
294 s
->reboot_arg
= NULL
;
296 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
297 exec_command_free_array(s
->exec_command
, _SERVICE_EXEC_COMMAND_MAX
);
298 s
->control_command
= NULL
;
299 s
->main_command
= NULL
;
301 exit_status_set_free(&s
->restart_prevent_status
);
302 exit_status_set_free(&s
->restart_force_status
);
303 exit_status_set_free(&s
->success_status
);
305 /* This will leak a process, but at least no memory or any of
307 service_unwatch_main_pid(s
);
308 service_unwatch_control_pid(s
);
309 service_unwatch_pid_file(s
);
312 unit_unwatch_bus_name(u
, s
->bus_name
);
317 s
->bus_endpoint_fd
= safe_close(s
->bus_endpoint_fd
);
318 service_close_socket_fd(s
);
319 service_connection_unref(s
);
321 unit_ref_unset(&s
->accept_socket
);
323 service_stop_watchdog(s
);
325 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
327 service_release_resources(u
);
330 static int on_fd_store_io(sd_event_source
*e
, int fd
, uint32_t revents
, void *userdata
) {
331 ServiceFDStore
*fs
= userdata
;
336 /* If we get either EPOLLHUP or EPOLLERR, it's time to remove this entry from the fd store */
337 service_fd_store_unlink(fs
);
341 static int service_add_fd_store(Service
*s
, int fd
) {
348 if (s
->n_fd_store
>= s
->n_fd_store_max
)
351 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
352 r
= same_fd(fs
->fd
, fd
);
356 /* Already included */
362 fs
= new0(ServiceFDStore
, 1);
369 r
= sd_event_add_io(UNIT(s
)->manager
->event
, &fs
->event_source
, fd
, 0, on_fd_store_io
, fs
);
375 LIST_PREPEND(fd_store
, s
->fd_store
, fs
);
381 static int service_add_fd_store_set(Service
*s
, FDSet
*fds
) {
386 if (fdset_size(fds
) <= 0)
389 while (s
->n_fd_store
< s
->n_fd_store_max
) {
390 _cleanup_close_
int fd
= -1;
392 fd
= fdset_steal_first(fds
);
396 r
= service_add_fd_store(s
, fd
);
398 return log_unit_error_errno(UNIT(s
)->id
, r
, "%s: Couldn't add fd to fd store: %m", UNIT(s
)->id
);
401 log_unit_debug(UNIT(s
)->id
, "%s: added fd to fd store.", UNIT(s
)->id
);
406 if (fdset_size(fds
) > 0)
407 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
);
412 static int service_arm_timer(Service
*s
, usec_t usec
) {
417 if (s
->timer_event_source
) {
418 r
= sd_event_source_set_time(s
->timer_event_source
, now(CLOCK_MONOTONIC
) + usec
);
422 return sd_event_source_set_enabled(s
->timer_event_source
, SD_EVENT_ONESHOT
);
425 return sd_event_add_time(
426 UNIT(s
)->manager
->event
,
427 &s
->timer_event_source
,
429 now(CLOCK_MONOTONIC
) + usec
, 0,
430 service_dispatch_timer
, s
);
433 static int service_verify(Service
*s
) {
436 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
439 if (!s
->exec_command
[SERVICE_EXEC_START
] && !s
->exec_command
[SERVICE_EXEC_STOP
]) {
440 log_unit_error(UNIT(s
)->id
, "%s lacks both ExecStart= and ExecStop= setting. Refusing.", UNIT(s
)->id
);
444 if (s
->type
!= SERVICE_ONESHOT
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
445 log_unit_error(UNIT(s
)->id
, "%s has no ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.", UNIT(s
)->id
);
449 if (!s
->remain_after_exit
&& !s
->exec_command
[SERVICE_EXEC_START
]) {
450 log_unit_error(UNIT(s
)->id
, "%s has no ExecStart= setting, which is only allowed for RemainAfterExit=yes services. Refusing.", UNIT(s
)->id
);
454 if (s
->type
!= SERVICE_ONESHOT
&& s
->exec_command
[SERVICE_EXEC_START
]->command_next
) {
455 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
);
459 if (s
->type
== SERVICE_ONESHOT
&& s
->restart
!= SERVICE_RESTART_NO
) {
460 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
);
464 if (s
->type
== SERVICE_ONESHOT
&& !exit_status_set_is_empty(&s
->restart_force_status
)) {
465 log_unit_error(UNIT(s
)->id
, "%s has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.", UNIT(s
)->id
);
469 if (s
->type
== SERVICE_DBUS
&& !s
->bus_name
) {
470 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
);
474 if (s
->bus_name
&& s
->type
!= SERVICE_DBUS
)
475 log_unit_warning(UNIT(s
)->id
, "%s has a D-Bus service name specified, but is not of type dbus. Ignoring.", UNIT(s
)->id
);
477 if (s
->exec_context
.pam_name
&& !(s
->kill_context
.kill_mode
== KILL_CONTROL_GROUP
|| s
->kill_context
.kill_mode
== KILL_MIXED
)) {
478 log_unit_error(UNIT(s
)->id
, "%s has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.", UNIT(s
)->id
);
485 static int service_add_default_dependencies(Service
*s
) {
490 /* Add a number of automatic dependencies useful for the
491 * majority of services. */
493 /* First, pull in base system */
494 r
= unit_add_two_dependencies_by_name(UNIT(s
), UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_BASIC_TARGET
, NULL
, true);
498 /* Second, activate normal shutdown */
499 return unit_add_two_dependencies_by_name(UNIT(s
), UNIT_BEFORE
, UNIT_CONFLICTS
, SPECIAL_SHUTDOWN_TARGET
, NULL
, true);
502 static void service_fix_output(Service
*s
) {
505 /* If nothing has been explicitly configured, patch default
506 * output in. If input is socket/tty we avoid this however,
507 * since in that case we want output to default to the same
508 * place as we read input from. */
510 if (s
->exec_context
.std_error
== EXEC_OUTPUT_INHERIT
&&
511 s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
512 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
513 s
->exec_context
.std_error
= UNIT(s
)->manager
->default_std_error
;
515 if (s
->exec_context
.std_output
== EXEC_OUTPUT_INHERIT
&&
516 s
->exec_context
.std_input
== EXEC_INPUT_NULL
)
517 s
->exec_context
.std_output
= UNIT(s
)->manager
->default_std_output
;
520 static int service_add_extras(Service
*s
) {
525 if (s
->type
== _SERVICE_TYPE_INVALID
) {
526 /* Figure out a type automatically */
528 s
->type
= SERVICE_DBUS
;
529 else if (s
->exec_command
[SERVICE_EXEC_START
])
530 s
->type
= SERVICE_SIMPLE
;
532 s
->type
= SERVICE_ONESHOT
;
535 /* Oneshot services have disabled start timeout by default */
536 if (s
->type
== SERVICE_ONESHOT
&& !s
->start_timeout_defined
)
537 s
->timeout_start_usec
= 0;
539 service_fix_output(s
);
541 r
= unit_patch_contexts(UNIT(s
));
545 r
= unit_add_exec_dependencies(UNIT(s
), &s
->exec_context
);
549 r
= unit_add_default_slice(UNIT(s
), &s
->cgroup_context
);
553 if (s
->type
== SERVICE_NOTIFY
&& s
->notify_access
== NOTIFY_NONE
)
554 s
->notify_access
= NOTIFY_MAIN
;
556 if (s
->watchdog_usec
> 0 && s
->notify_access
== NOTIFY_NONE
)
557 s
->notify_access
= NOTIFY_MAIN
;
563 n
= strjoina(s
->bus_name
, ".busname");
564 r
= unit_add_dependency_by_name(UNIT(s
), UNIT_AFTER
, n
, NULL
, true);
569 r
= unit_watch_bus_name(UNIT(s
), s
->bus_name
);
574 if (UNIT(s
)->default_dependencies
) {
575 r
= service_add_default_dependencies(s
);
583 static int service_load(Unit
*u
) {
584 Service
*s
= SERVICE(u
);
589 /* Load a .service file */
590 r
= unit_load_fragment(u
);
594 /* Still nothing found? Then let's give up */
595 if (u
->load_state
== UNIT_STUB
)
598 /* This is a new unit? Then let's add in some extras */
599 if (u
->load_state
== UNIT_LOADED
) {
601 /* We were able to load something, then let's add in
602 * the dropin directories. */
603 r
= unit_load_dropin(u
);
607 /* This is a new unit? Then let's add in some
609 r
= service_add_extras(s
);
614 return service_verify(s
);
617 static void service_dump(Unit
*u
, FILE *f
, const char *prefix
) {
618 ServiceExecCommand c
;
619 Service
*s
= SERVICE(u
);
624 prefix
= strempty(prefix
);
625 prefix2
= strjoina(prefix
, "\t");
628 "%sService State: %s\n"
630 "%sReload Result: %s\n"
631 "%sPermissionsStartOnly: %s\n"
632 "%sRootDirectoryStartOnly: %s\n"
633 "%sRemainAfterExit: %s\n"
634 "%sGuessMainPID: %s\n"
637 "%sNotifyAccess: %s\n"
638 "%sNotifyState: %s\n",
639 prefix
, service_state_to_string(s
->state
),
640 prefix
, service_result_to_string(s
->result
),
641 prefix
, service_result_to_string(s
->reload_result
),
642 prefix
, yes_no(s
->permissions_start_only
),
643 prefix
, yes_no(s
->root_directory_start_only
),
644 prefix
, yes_no(s
->remain_after_exit
),
645 prefix
, yes_no(s
->guess_main_pid
),
646 prefix
, service_type_to_string(s
->type
),
647 prefix
, service_restart_to_string(s
->restart
),
648 prefix
, notify_access_to_string(s
->notify_access
),
649 prefix
, notify_state_to_string(s
->notify_state
));
651 if (s
->control_pid
> 0)
653 "%sControl PID: "PID_FMT
"\n",
654 prefix
, s
->control_pid
);
658 "%sMain PID: "PID_FMT
"\n"
659 "%sMain PID Known: %s\n"
660 "%sMain PID Alien: %s\n",
662 prefix
, yes_no(s
->main_pid_known
),
663 prefix
, yes_no(s
->main_pid_alien
));
668 prefix
, s
->pid_file
);
673 "%sBus Name Good: %s\n",
675 prefix
, yes_no(s
->bus_name_good
));
677 kill_context_dump(&s
->kill_context
, f
, prefix
);
678 exec_context_dump(&s
->exec_context
, f
, prefix
);
680 for (c
= 0; c
< _SERVICE_EXEC_COMMAND_MAX
; c
++) {
682 if (!s
->exec_command
[c
])
685 fprintf(f
, "%s-> %s:\n",
686 prefix
, service_exec_command_to_string(c
));
688 exec_command_dump_list(s
->exec_command
[c
], f
, prefix2
);
692 fprintf(f
, "%sStatus Text: %s\n",
693 prefix
, s
->status_text
);
695 if (s
->n_fd_store_max
> 0) {
697 "%sFile Descriptor Store Max: %u\n"
698 "%sFile Descriptor Store Current: %u\n",
699 prefix
, s
->n_fd_store_max
,
700 prefix
, s
->n_fd_store
);
704 static int service_load_pid_file(Service
*s
, bool may_warn
) {
705 _cleanup_free_
char *k
= NULL
;
714 r
= read_one_line_file(s
->pid_file
, &k
);
717 log_unit_info(UNIT(s
)->id
, "PID file %s not readable (yet?) after %s.", s
->pid_file
, service_state_to_string(s
->state
));
721 r
= parse_pid(k
, &pid
);
724 log_unit_info_errno(UNIT(s
)->id
, r
, "Failed to read PID from file %s: %m", s
->pid_file
);
728 if (!pid_is_alive(pid
)) {
730 log_unit_info(UNIT(s
)->id
, "PID "PID_FMT
" read from file %s does not exist or is a zombie.", pid
, s
->pid_file
);
734 if (s
->main_pid_known
) {
735 if (pid
== s
->main_pid
)
738 log_unit_debug(UNIT(s
)->id
, "Main PID changing: "PID_FMT
" -> "PID_FMT
, s
->main_pid
, pid
);
740 service_unwatch_main_pid(s
);
741 s
->main_pid_known
= false;
743 log_unit_debug(UNIT(s
)->id
, "Main PID loaded: "PID_FMT
, pid
);
745 r
= service_set_main_pid(s
, pid
);
749 r
= unit_watch_pid(UNIT(s
), pid
);
751 /* FIXME: we need to do something here */
752 log_unit_warning(UNIT(s
)->id
, "Failed to watch PID "PID_FMT
" from service %s", pid
, UNIT(s
)->id
);
759 static int service_search_main_pid(Service
*s
) {
765 /* If we know it anyway, don't ever fallback to unreliable
767 if (s
->main_pid_known
)
770 if (!s
->guess_main_pid
)
773 assert(s
->main_pid
<= 0);
775 pid
= unit_search_main_pid(UNIT(s
));
779 log_unit_debug(UNIT(s
)->id
, "Main PID guessed: "PID_FMT
, pid
);
780 r
= service_set_main_pid(s
, pid
);
784 r
= unit_watch_pid(UNIT(s
), pid
);
786 /* FIXME: we need to do something here */
787 log_unit_warning(UNIT(s
)->id
, "Failed to watch PID "PID_FMT
" from service %s", pid
, UNIT(s
)->id
);
794 static void service_set_state(Service
*s
, ServiceState state
) {
795 ServiceState old_state
;
796 const UnitActiveState
*table
;
800 table
= s
->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
802 old_state
= s
->state
;
805 service_unwatch_pid_file(s
);
808 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
810 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
811 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
812 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
,
813 SERVICE_AUTO_RESTART
))
814 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
817 SERVICE_START
, SERVICE_START_POST
,
818 SERVICE_RUNNING
, SERVICE_RELOAD
,
819 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
820 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
821 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
822 service_unwatch_main_pid(s
);
823 s
->main_command
= NULL
;
827 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
829 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
830 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
831 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
832 service_unwatch_control_pid(s
);
833 s
->control_command
= NULL
;
834 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
837 if (IN_SET(state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
838 unit_unwatch_all_pids(UNIT(s
));
841 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
842 SERVICE_RUNNING
, SERVICE_RELOAD
,
843 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
, SERVICE_STOP_POST
,
844 SERVICE_STOP_SIGABRT
, SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
) &&
845 !(state
== SERVICE_DEAD
&& UNIT(s
)->job
)) {
846 service_close_socket_fd(s
);
847 service_connection_unref(s
);
850 if (!IN_SET(state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
851 service_stop_watchdog(s
);
853 /* For the inactive states unit_notify() will trim the cgroup,
854 * but for exit we have to do that ourselves... */
855 if (state
== SERVICE_EXITED
&& UNIT(s
)->manager
->n_reloading
<= 0)
856 unit_destroy_cgroup_if_empty(UNIT(s
));
858 /* For remain_after_exit services, let's see if we can "release" the
859 * hold on the console, since unit_notify() only does that in case of
861 if (state
== SERVICE_EXITED
&&
862 s
->remain_after_exit
&&
863 UNIT(s
)->manager
->n_on_console
> 0) {
867 ec
= unit_get_exec_context(UNIT(s
));
868 if (ec
&& exec_context_may_touch_console(ec
)) {
869 Manager
*m
= UNIT(s
)->manager
;
872 if (m
->n_on_console
== 0)
873 /* unset no_console_output flag, since the console is free */
874 m
->no_console_output
= false;
878 if (old_state
!= state
)
879 log_unit_debug(UNIT(s
)->id
, "%s changed %s -> %s", UNIT(s
)->id
, service_state_to_string(old_state
), service_state_to_string(state
));
881 unit_notify(UNIT(s
), table
[old_state
], table
[state
], s
->reload_result
== SERVICE_SUCCESS
);
882 s
->reload_result
= SERVICE_SUCCESS
;
885 static int service_coldplug(Unit
*u
, Hashmap
*deferred_work
) {
886 Service
*s
= SERVICE(u
);
890 assert(s
->state
== SERVICE_DEAD
);
892 if (s
->deserialized_state
!= s
->state
) {
894 if (IN_SET(s
->deserialized_state
,
895 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
897 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
898 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
899 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
903 k
= IN_SET(s
->deserialized_state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RELOAD
) ? s
->timeout_start_usec
: s
->timeout_stop_usec
;
905 /* For the start/stop timeouts 0 means off */
907 r
= service_arm_timer(s
, k
);
913 if (s
->deserialized_state
== SERVICE_AUTO_RESTART
) {
915 /* The restart timeouts 0 means immediately */
916 r
= service_arm_timer(s
, s
->restart_usec
);
921 if (pid_is_unwaited(s
->main_pid
) &&
922 ((s
->deserialized_state
== SERVICE_START
&& IN_SET(s
->type
, SERVICE_FORKING
, SERVICE_DBUS
, SERVICE_ONESHOT
, SERVICE_NOTIFY
)) ||
923 IN_SET(s
->deserialized_state
,
924 SERVICE_START
, SERVICE_START_POST
,
925 SERVICE_RUNNING
, SERVICE_RELOAD
,
926 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
927 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
928 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
))) {
929 r
= unit_watch_pid(UNIT(s
), s
->main_pid
);
934 if (pid_is_unwaited(s
->control_pid
) &&
935 IN_SET(s
->deserialized_state
,
936 SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
,
938 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
939 SERVICE_STOP_SIGABRT
, SERVICE_STOP_POST
,
940 SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
)) {
941 r
= unit_watch_pid(UNIT(s
), s
->control_pid
);
946 if (!IN_SET(s
->deserialized_state
, SERVICE_DEAD
, SERVICE_FAILED
, SERVICE_AUTO_RESTART
))
947 unit_watch_all_pids(UNIT(s
));
949 if (IN_SET(s
->deserialized_state
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
))
950 service_start_watchdog(s
);
952 service_set_state(s
, s
->deserialized_state
);
958 static int service_collect_fds(Service
*s
, int **fds
, unsigned *n_fds
) {
959 _cleanup_free_
int *rfds
= NULL
;
969 if (s
->socket_fd
>= 0)
972 SET_FOREACH(u
, UNIT(s
)->dependencies
[UNIT_TRIGGERED_BY
], i
) {
977 if (u
->type
!= UNIT_SOCKET
)
982 r
= socket_collect_fds(sock
, &cfds
, &cn_fds
);
997 t
= realloc(rfds
, (rn_fds
+ cn_fds
) * sizeof(int));
1003 memcpy(t
+ rn_fds
, cfds
, cn_fds
* sizeof(int));
1012 if (s
->n_fd_store
> 0) {
1016 t
= realloc(rfds
, (rn_fds
+ s
->n_fd_store
) * sizeof(int));
1021 LIST_FOREACH(fd_store
, fs
, s
->fd_store
)
1022 rfds
[rn_fds
++] = fs
->fd
;
1032 static int service_spawn(
1037 bool apply_permissions
,
1039 bool apply_tty_stdin
,
1046 _cleanup_free_
int *fdsbuf
= NULL
;
1047 unsigned n_fds
= 0, n_env
= 0;
1048 _cleanup_free_
char *bus_endpoint_path
= NULL
;
1049 _cleanup_strv_free_
char
1050 **argv
= NULL
, **final_env
= NULL
, **our_env
= NULL
;
1052 ExecParameters exec_params
= {
1053 .apply_permissions
= apply_permissions
,
1054 .apply_chroot
= apply_chroot
,
1055 .apply_tty_stdin
= apply_tty_stdin
,
1056 .bus_endpoint_fd
= -1,
1057 .selinux_context_net
= s
->socket_fd_selinux_context_net
1064 (void) unit_realize_cgroup(UNIT(s
));
1065 if (s
->reset_cpu_usage
) {
1066 (void) unit_reset_cpu_usage(UNIT(s
));
1067 s
->reset_cpu_usage
= false;
1070 r
= unit_setup_exec_runtime(UNIT(s
));
1075 s
->exec_context
.std_input
== EXEC_INPUT_SOCKET
||
1076 s
->exec_context
.std_output
== EXEC_OUTPUT_SOCKET
||
1077 s
->exec_context
.std_error
== EXEC_OUTPUT_SOCKET
) {
1079 if (s
->socket_fd
>= 0) {
1080 fds
= &s
->socket_fd
;
1083 r
= service_collect_fds(s
, &fdsbuf
, &n_fds
);
1092 r
= service_arm_timer(s
, timeout
);
1096 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
1098 r
= unit_full_printf_strv(UNIT(s
), c
->argv
, &argv
);
1102 our_env
= new0(char*, 6);
1108 if (is_control
? s
->notify_access
== NOTIFY_ALL
: s
->notify_access
!= NOTIFY_NONE
)
1109 if (asprintf(our_env
+ n_env
++, "NOTIFY_SOCKET=%s", UNIT(s
)->manager
->notify_socket
) < 0) {
1114 if (s
->main_pid
> 0)
1115 if (asprintf(our_env
+ n_env
++, "MAINPID="PID_FMT
, s
->main_pid
) < 0) {
1120 if (UNIT(s
)->manager
->running_as
!= SYSTEMD_SYSTEM
)
1121 if (asprintf(our_env
+ n_env
++, "MANAGERPID="PID_FMT
, getpid()) < 0) {
1126 if (UNIT_DEREF(s
->accept_socket
)) {
1127 union sockaddr_union sa
;
1128 socklen_t salen
= sizeof(sa
);
1130 r
= getpeername(s
->socket_fd
, &sa
.sa
, &salen
);
1136 if (IN_SET(sa
.sa
.sa_family
, AF_INET
, AF_INET6
)) {
1137 _cleanup_free_
char *addr
= NULL
;
1141 r
= sockaddr_pretty(&sa
.sa
, salen
, true, false, &addr
);
1145 t
= strappend("REMOTE_ADDR=", addr
);
1150 our_env
[n_env
++] = t
;
1152 port
= sockaddr_port(&sa
.sa
);
1158 if (asprintf(&t
, "REMOTE_PORT=%u", port
) < 0) {
1162 our_env
[n_env
++] = t
;
1166 final_env
= strv_env_merge(2, UNIT(s
)->manager
->environment
, our_env
, NULL
);
1172 if (is_control
&& UNIT(s
)->cgroup_path
) {
1173 path
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1174 cg_create(SYSTEMD_CGROUP_CONTROLLER
, path
);
1176 path
= UNIT(s
)->cgroup_path
;
1179 if (s
->exec_context
.bus_endpoint
) {
1180 r
= bus_kernel_create_endpoint(UNIT(s
)->manager
->running_as
== SYSTEMD_SYSTEM
? "system" : "user",
1181 UNIT(s
)->id
, &bus_endpoint_path
);
1185 /* Pass the fd to the exec_params so that the child process can upload the policy.
1186 * Keep a reference to the fd in the service, so the endpoint is kept alive as long
1187 * as the service is running. */
1188 exec_params
.bus_endpoint_fd
= s
->bus_endpoint_fd
= r
;
1192 exec_params
.argv
= argv
;
1193 exec_params
.fds
= fds
;
1194 exec_params
.n_fds
= n_fds
;
1195 exec_params
.environment
= final_env
;
1196 exec_params
.confirm_spawn
= UNIT(s
)->manager
->confirm_spawn
;
1197 exec_params
.cgroup_supported
= UNIT(s
)->manager
->cgroup_supported
;
1198 exec_params
.cgroup_path
= path
;
1199 exec_params
.cgroup_delegate
= s
->cgroup_context
.delegate
;
1200 exec_params
.runtime_prefix
= manager_get_runtime_prefix(UNIT(s
)->manager
);
1201 exec_params
.unit_id
= UNIT(s
)->id
;
1202 exec_params
.watchdog_usec
= s
->watchdog_usec
;
1203 exec_params
.bus_endpoint_path
= bus_endpoint_path
;
1204 if (s
->type
== SERVICE_IDLE
)
1205 exec_params
.idle_pipe
= UNIT(s
)->manager
->idle_pipe
;
1215 r
= unit_watch_pid(UNIT(s
), pid
);
1217 /* FIXME: we need to do something here */
1226 s
->timer_event_source
= sd_event_source_unref(s
->timer_event_source
);
1231 static int main_pid_good(Service
*s
) {
1234 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1237 /* If we know the pid file, then lets just check if it is
1239 if (s
->main_pid_known
) {
1241 /* If it's an alien child let's check if it is still
1243 if (s
->main_pid_alien
&& s
->main_pid
> 0)
1244 return pid_is_alive(s
->main_pid
);
1246 /* .. otherwise assume we'll get a SIGCHLD for it,
1247 * which we really should wait for to collect exit
1248 * status and code */
1249 return s
->main_pid
> 0;
1252 /* We don't know the pid */
1256 _pure_
static int control_pid_good(Service
*s
) {
1259 return s
->control_pid
> 0;
1262 static int cgroup_good(Service
*s
) {
1267 if (!UNIT(s
)->cgroup_path
)
1270 r
= cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER
, UNIT(s
)->cgroup_path
, true);
1277 static void service_enter_dead(Service
*s
, ServiceResult f
, bool allow_restart
) {
1281 if (f
!= SERVICE_SUCCESS
)
1284 service_set_state(s
, s
->result
!= SERVICE_SUCCESS
? SERVICE_FAILED
: SERVICE_DEAD
);
1286 if (s
->result
!= SERVICE_SUCCESS
) {
1287 log_unit_warning(UNIT(s
)->id
, "%s failed.", UNIT(s
)->id
);
1288 failure_action(UNIT(s
)->manager
, s
->failure_action
, s
->reboot_arg
);
1291 if (allow_restart
&&
1292 !s
->forbid_restart
&&
1293 (s
->restart
== SERVICE_RESTART_ALWAYS
||
1294 (s
->restart
== SERVICE_RESTART_ON_SUCCESS
&& s
->result
== SERVICE_SUCCESS
) ||
1295 (s
->restart
== SERVICE_RESTART_ON_FAILURE
&& s
->result
!= SERVICE_SUCCESS
) ||
1296 (s
->restart
== SERVICE_RESTART_ON_ABNORMAL
&& !IN_SET(s
->result
, SERVICE_SUCCESS
, SERVICE_FAILURE_EXIT_CODE
)) ||
1297 (s
->restart
== SERVICE_RESTART_ON_WATCHDOG
&& s
->result
== SERVICE_FAILURE_WATCHDOG
) ||
1298 (s
->restart
== SERVICE_RESTART_ON_ABORT
&& IN_SET(s
->result
, SERVICE_FAILURE_SIGNAL
, SERVICE_FAILURE_CORE_DUMP
)) ||
1299 (s
->main_exec_status
.code
== CLD_EXITED
&& set_contains(s
->restart_force_status
.status
, INT_TO_PTR(s
->main_exec_status
.status
))) ||
1300 (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
)))) &&
1301 (s
->main_exec_status
.code
!= CLD_EXITED
|| !set_contains(s
->restart_prevent_status
.status
, INT_TO_PTR(s
->main_exec_status
.status
))) &&
1302 (!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
)))) {
1304 r
= service_arm_timer(s
, s
->restart_usec
);
1308 service_set_state(s
, SERVICE_AUTO_RESTART
);
1311 s
->forbid_restart
= false;
1313 /* We want fresh tmpdirs in case service is started again immediately */
1314 exec_runtime_destroy(s
->exec_runtime
);
1315 s
->exec_runtime
= exec_runtime_unref(s
->exec_runtime
);
1317 /* Also, remove the runtime directory in */
1318 exec_context_destroy_runtime_directory(&s
->exec_context
, manager_get_runtime_prefix(UNIT(s
)->manager
));
1320 /* Try to delete the pid file. At this point it will be
1321 * out-of-date, and some software might be confused by it, so
1322 * let's remove it. */
1324 unlink_noerrno(s
->pid_file
);
1329 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run install restart timer: %m", UNIT(s
)->id
);
1330 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1333 static void service_enter_stop_post(Service
*s
, ServiceResult f
) {
1337 if (f
!= SERVICE_SUCCESS
)
1340 service_unwatch_control_pid(s
);
1341 unit_watch_all_pids(UNIT(s
));
1343 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP_POST
];
1344 if (s
->control_command
) {
1345 s
->control_command_id
= SERVICE_EXEC_STOP_POST
;
1347 r
= service_spawn(s
,
1349 s
->timeout_stop_usec
,
1351 !s
->permissions_start_only
,
1352 !s
->root_directory_start_only
,
1359 service_set_state(s
, SERVICE_STOP_POST
);
1361 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_SUCCESS
);
1366 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'stop-post' task: %m", UNIT(s
)->id
);
1367 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1370 static void service_enter_signal(Service
*s
, ServiceState state
, ServiceResult f
) {
1375 if (f
!= SERVICE_SUCCESS
)
1378 unit_watch_all_pids(UNIT(s
));
1380 r
= unit_kill_context(
1383 (state
!= SERVICE_STOP_SIGTERM
&& state
!= SERVICE_FINAL_SIGTERM
&& state
!= SERVICE_STOP_SIGABRT
) ?
1384 KILL_KILL
: (state
== SERVICE_STOP_SIGABRT
? KILL_ABORT
: KILL_TERMINATE
),
1393 if (s
->timeout_stop_usec
> 0) {
1394 r
= service_arm_timer(s
, s
->timeout_stop_usec
);
1399 service_set_state(s
, state
);
1400 } else if (state
== SERVICE_STOP_SIGTERM
|| state
== SERVICE_STOP_SIGABRT
)
1401 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_SUCCESS
);
1402 else if (state
== SERVICE_STOP_SIGKILL
)
1403 service_enter_stop_post(s
, SERVICE_SUCCESS
);
1404 else if (state
== SERVICE_FINAL_SIGTERM
)
1405 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_SUCCESS
);
1407 service_enter_dead(s
, SERVICE_SUCCESS
, true);
1412 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to kill processes: %m", UNIT(s
)->id
);
1414 if (state
== SERVICE_STOP_SIGTERM
|| state
== SERVICE_STOP_SIGKILL
||
1415 state
== SERVICE_STOP_SIGABRT
)
1416 service_enter_stop_post(s
, SERVICE_FAILURE_RESOURCES
);
1418 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1421 static void service_enter_stop_by_notify(Service
*s
) {
1424 unit_watch_all_pids(UNIT(s
));
1426 if (s
->timeout_stop_usec
> 0)
1427 service_arm_timer(s
, s
->timeout_stop_usec
);
1429 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1430 service_set_state(s
, SERVICE_STOP_SIGTERM
);
1433 static void service_enter_stop(Service
*s
, ServiceResult f
) {
1438 if (f
!= SERVICE_SUCCESS
)
1441 service_unwatch_control_pid(s
);
1442 unit_watch_all_pids(UNIT(s
));
1444 s
->control_command
= s
->exec_command
[SERVICE_EXEC_STOP
];
1445 if (s
->control_command
) {
1446 s
->control_command_id
= SERVICE_EXEC_STOP
;
1448 r
= service_spawn(s
,
1450 s
->timeout_stop_usec
,
1452 !s
->permissions_start_only
,
1453 !s
->root_directory_start_only
,
1460 service_set_state(s
, SERVICE_STOP
);
1462 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
1467 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'stop' task: %m", UNIT(s
)->id
);
1468 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1471 static void service_enter_running(Service
*s
, ServiceResult f
) {
1472 int main_pid_ok
, cgroup_ok
;
1475 if (f
!= SERVICE_SUCCESS
)
1478 main_pid_ok
= main_pid_good(s
);
1479 cgroup_ok
= cgroup_good(s
);
1481 if ((main_pid_ok
> 0 || (main_pid_ok
< 0 && cgroup_ok
!= 0)) &&
1482 (s
->bus_name_good
|| s
->type
!= SERVICE_DBUS
)) {
1484 /* If there are any queued up sd_notify()
1485 * notifications, process them now */
1486 if (s
->notify_state
== NOTIFY_RELOADING
)
1487 service_enter_reload_by_notify(s
);
1488 else if (s
->notify_state
== NOTIFY_STOPPING
)
1489 service_enter_stop_by_notify(s
);
1491 service_set_state(s
, SERVICE_RUNNING
);
1493 } else if (s
->remain_after_exit
)
1494 service_set_state(s
, SERVICE_EXITED
);
1496 service_enter_stop(s
, SERVICE_SUCCESS
);
1499 static void service_enter_start_post(Service
*s
) {
1503 service_unwatch_control_pid(s
);
1504 service_reset_watchdog(s
);
1506 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_POST
];
1507 if (s
->control_command
) {
1508 s
->control_command_id
= SERVICE_EXEC_START_POST
;
1510 r
= service_spawn(s
,
1512 s
->timeout_start_usec
,
1514 !s
->permissions_start_only
,
1515 !s
->root_directory_start_only
,
1522 service_set_state(s
, SERVICE_START_POST
);
1524 service_enter_running(s
, SERVICE_SUCCESS
);
1529 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'start-post' task: %m", UNIT(s
)->id
);
1530 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1533 static void service_kill_control_processes(Service
*s
) {
1536 if (!UNIT(s
)->cgroup_path
)
1539 p
= strjoina(UNIT(s
)->cgroup_path
, "/control");
1540 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, p
, SIGKILL
, true, true, true, NULL
);
1543 static void service_enter_start(Service
*s
) {
1550 service_unwatch_control_pid(s
);
1551 service_unwatch_main_pid(s
);
1553 /* We want to ensure that nobody leaks processes from
1554 * START_PRE here, so let's go on a killing spree, People
1555 * should not spawn long running processes from START_PRE. */
1556 service_kill_control_processes(s
);
1558 if (s
->type
== SERVICE_FORKING
) {
1559 s
->control_command_id
= SERVICE_EXEC_START
;
1560 c
= s
->control_command
= s
->exec_command
[SERVICE_EXEC_START
];
1562 s
->main_command
= NULL
;
1564 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
1565 s
->control_command
= NULL
;
1567 c
= s
->main_command
= s
->exec_command
[SERVICE_EXEC_START
];
1571 assert(s
->type
== SERVICE_ONESHOT
);
1572 service_enter_start_post(s
);
1576 r
= service_spawn(s
,
1578 IN_SET(s
->type
, SERVICE_FORKING
, SERVICE_DBUS
, SERVICE_NOTIFY
, SERVICE_ONESHOT
) ? s
->timeout_start_usec
: 0,
1588 if (s
->type
== SERVICE_SIMPLE
|| s
->type
== SERVICE_IDLE
) {
1589 /* For simple services we immediately start
1590 * the START_POST binaries. */
1592 service_set_main_pid(s
, pid
);
1593 service_enter_start_post(s
);
1595 } else if (s
->type
== SERVICE_FORKING
) {
1597 /* For forking services we wait until the start
1598 * process exited. */
1600 s
->control_pid
= pid
;
1601 service_set_state(s
, SERVICE_START
);
1603 } else if (s
->type
== SERVICE_ONESHOT
||
1604 s
->type
== SERVICE_DBUS
||
1605 s
->type
== SERVICE_NOTIFY
) {
1607 /* For oneshot services we wait until the start
1608 * process exited, too, but it is our main process. */
1610 /* For D-Bus services we know the main pid right away,
1611 * but wait for the bus name to appear on the
1612 * bus. Notify services are similar. */
1614 service_set_main_pid(s
, pid
);
1615 service_set_state(s
, SERVICE_START
);
1617 assert_not_reached("Unknown service type");
1622 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'start' task: %m", UNIT(s
)->id
);
1623 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1626 static void service_enter_start_pre(Service
*s
) {
1631 service_unwatch_control_pid(s
);
1633 s
->control_command
= s
->exec_command
[SERVICE_EXEC_START_PRE
];
1634 if (s
->control_command
) {
1635 /* Before we start anything, let's clear up what might
1636 * be left from previous runs. */
1637 service_kill_control_processes(s
);
1639 s
->control_command_id
= SERVICE_EXEC_START_PRE
;
1641 r
= service_spawn(s
,
1643 s
->timeout_start_usec
,
1645 !s
->permissions_start_only
,
1646 !s
->root_directory_start_only
,
1653 service_set_state(s
, SERVICE_START_PRE
);
1655 service_enter_start(s
);
1660 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'start-pre' task: %m", UNIT(s
)->id
);
1661 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1664 static void service_enter_restart(Service
*s
) {
1665 _cleanup_bus_error_free_ sd_bus_error error
= SD_BUS_ERROR_NULL
;
1670 if (UNIT(s
)->job
&& UNIT(s
)->job
->type
== JOB_STOP
) {
1671 /* Don't restart things if we are going down anyway */
1672 log_unit_info(UNIT(s
)->id
, "Stop job pending for unit, delaying automatic restart.");
1674 r
= service_arm_timer(s
, s
->restart_usec
);
1681 /* Any units that are bound to this service must also be
1682 * restarted. We use JOB_RESTART (instead of the more obvious
1683 * JOB_START) here so that those dependency jobs will be added
1685 r
= manager_add_job(UNIT(s
)->manager
, JOB_RESTART
, UNIT(s
), JOB_FAIL
, false, &error
, NULL
);
1689 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
1690 * it will be canceled as part of the service_stop() call that
1691 * is executed as part of JOB_RESTART. */
1693 log_unit_debug(UNIT(s
)->id
, "%s scheduled restart job.", UNIT(s
)->id
);
1697 log_unit_warning(UNIT(s
)->id
, "%s failed to schedule restart job: %s", UNIT(s
)->id
, bus_error_message(&error
, -r
));
1698 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, false);
1701 static void service_enter_reload_by_notify(Service
*s
) {
1704 if (s
->timeout_start_usec
> 0)
1705 service_arm_timer(s
, s
->timeout_start_usec
);
1707 service_set_state(s
, SERVICE_RELOAD
);
1710 static void service_enter_reload(Service
*s
) {
1715 service_unwatch_control_pid(s
);
1717 s
->control_command
= s
->exec_command
[SERVICE_EXEC_RELOAD
];
1718 if (s
->control_command
) {
1719 s
->control_command_id
= SERVICE_EXEC_RELOAD
;
1721 r
= service_spawn(s
,
1723 s
->timeout_start_usec
,
1725 !s
->permissions_start_only
,
1726 !s
->root_directory_start_only
,
1733 service_set_state(s
, SERVICE_RELOAD
);
1735 service_enter_running(s
, SERVICE_SUCCESS
);
1740 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run 'reload' task: %m", UNIT(s
)->id
);
1741 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
1742 service_enter_running(s
, SERVICE_SUCCESS
);
1745 static void service_run_next_control(Service
*s
) {
1749 assert(s
->control_command
);
1750 assert(s
->control_command
->command_next
);
1752 assert(s
->control_command_id
!= SERVICE_EXEC_START
);
1754 s
->control_command
= s
->control_command
->command_next
;
1755 service_unwatch_control_pid(s
);
1757 r
= service_spawn(s
,
1759 IN_SET(s
->state
, SERVICE_START_PRE
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
) ? s
->timeout_start_usec
: s
->timeout_stop_usec
,
1761 !s
->permissions_start_only
,
1762 !s
->root_directory_start_only
,
1763 s
->control_command_id
== SERVICE_EXEC_START_PRE
||
1764 s
->control_command_id
== SERVICE_EXEC_STOP_POST
,
1773 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run next control task: %m", UNIT(s
)->id
);
1775 if (s
->state
== SERVICE_START_PRE
)
1776 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1777 else if (s
->state
== SERVICE_STOP
)
1778 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
1779 else if (s
->state
== SERVICE_STOP_POST
)
1780 service_enter_dead(s
, SERVICE_FAILURE_RESOURCES
, true);
1781 else if (s
->state
== SERVICE_RELOAD
) {
1782 s
->reload_result
= SERVICE_FAILURE_RESOURCES
;
1783 service_enter_running(s
, SERVICE_SUCCESS
);
1785 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1788 static void service_run_next_main(Service
*s
) {
1793 assert(s
->main_command
);
1794 assert(s
->main_command
->command_next
);
1795 assert(s
->type
== SERVICE_ONESHOT
);
1797 s
->main_command
= s
->main_command
->command_next
;
1798 service_unwatch_main_pid(s
);
1800 r
= service_spawn(s
,
1802 s
->timeout_start_usec
,
1812 service_set_main_pid(s
, pid
);
1817 log_unit_warning_errno(UNIT(s
)->id
, r
, "%s failed to run next main task: %m", UNIT(s
)->id
);
1818 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
1821 static int service_start_limit_test(Service
*s
) {
1824 if (ratelimit_test(&s
->start_limit
))
1827 log_unit_warning(UNIT(s
)->id
, "start request repeated too quickly for %s", UNIT(s
)->id
);
1829 return failure_action(UNIT(s
)->manager
, s
->start_limit_action
, s
->reboot_arg
);
1832 static int service_start(Unit
*u
) {
1833 Service
*s
= SERVICE(u
);
1838 /* We cannot fulfill this request right now, try again later
1840 if (s
->state
== SERVICE_STOP
||
1841 s
->state
== SERVICE_STOP_SIGABRT
||
1842 s
->state
== SERVICE_STOP_SIGTERM
||
1843 s
->state
== SERVICE_STOP_SIGKILL
||
1844 s
->state
== SERVICE_STOP_POST
||
1845 s
->state
== SERVICE_FINAL_SIGTERM
||
1846 s
->state
== SERVICE_FINAL_SIGKILL
)
1849 /* Already on it! */
1850 if (s
->state
== SERVICE_START_PRE
||
1851 s
->state
== SERVICE_START
||
1852 s
->state
== SERVICE_START_POST
)
1855 /* A service that will be restarted must be stopped first to
1856 * trigger BindsTo and/or OnFailure dependencies. If a user
1857 * does not want to wait for the holdoff time to elapse, the
1858 * service should be manually restarted, not started. We
1859 * simply return EAGAIN here, so that any start jobs stay
1860 * queued, and assume that the auto restart timer will
1861 * eventually trigger the restart. */
1862 if (s
->state
== SERVICE_AUTO_RESTART
)
1865 assert(s
->state
== SERVICE_DEAD
|| s
->state
== SERVICE_FAILED
);
1867 /* Make sure we don't enter a busy loop of some kind. */
1868 r
= service_start_limit_test(s
);
1870 service_enter_dead(s
, SERVICE_FAILURE_START_LIMIT
, false);
1874 s
->result
= SERVICE_SUCCESS
;
1875 s
->reload_result
= SERVICE_SUCCESS
;
1876 s
->main_pid_known
= false;
1877 s
->main_pid_alien
= false;
1878 s
->forbid_restart
= false;
1879 s
->reset_cpu_usage
= true;
1881 free(s
->status_text
);
1882 s
->status_text
= NULL
;
1883 s
->status_errno
= 0;
1885 s
->notify_state
= NOTIFY_UNKNOWN
;
1887 service_enter_start_pre(s
);
1891 static int service_stop(Unit
*u
) {
1892 Service
*s
= SERVICE(u
);
1896 /* Don't create restart jobs from here. */
1897 s
->forbid_restart
= true;
1900 if (s
->state
== SERVICE_STOP
||
1901 s
->state
== SERVICE_STOP_SIGABRT
||
1902 s
->state
== SERVICE_STOP_SIGTERM
||
1903 s
->state
== SERVICE_STOP_SIGKILL
||
1904 s
->state
== SERVICE_STOP_POST
||
1905 s
->state
== SERVICE_FINAL_SIGTERM
||
1906 s
->state
== SERVICE_FINAL_SIGKILL
)
1909 /* A restart will be scheduled or is in progress. */
1910 if (s
->state
== SERVICE_AUTO_RESTART
) {
1911 service_set_state(s
, SERVICE_DEAD
);
1915 /* If there's already something running we go directly into
1917 if (s
->state
== SERVICE_START_PRE
||
1918 s
->state
== SERVICE_START
||
1919 s
->state
== SERVICE_START_POST
||
1920 s
->state
== SERVICE_RELOAD
) {
1921 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_SUCCESS
);
1925 assert(s
->state
== SERVICE_RUNNING
||
1926 s
->state
== SERVICE_EXITED
);
1928 service_enter_stop(s
, SERVICE_SUCCESS
);
1932 static int service_reload(Unit
*u
) {
1933 Service
*s
= SERVICE(u
);
1937 assert(s
->state
== SERVICE_RUNNING
|| s
->state
== SERVICE_EXITED
);
1939 service_enter_reload(s
);
1943 _pure_
static bool service_can_reload(Unit
*u
) {
1944 Service
*s
= SERVICE(u
);
1948 return !!s
->exec_command
[SERVICE_EXEC_RELOAD
];
1951 static int service_serialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
1952 Service
*s
= SERVICE(u
);
1959 unit_serialize_item(u
, f
, "state", service_state_to_string(s
->state
));
1960 unit_serialize_item(u
, f
, "result", service_result_to_string(s
->result
));
1961 unit_serialize_item(u
, f
, "reload-result", service_result_to_string(s
->reload_result
));
1963 if (s
->control_pid
> 0)
1964 unit_serialize_item_format(u
, f
, "control-pid", PID_FMT
,
1967 if (s
->main_pid_known
&& s
->main_pid
> 0)
1968 unit_serialize_item_format(u
, f
, "main-pid", PID_FMT
, s
->main_pid
);
1970 unit_serialize_item(u
, f
, "main-pid-known", yes_no(s
->main_pid_known
));
1973 unit_serialize_item(u
, f
, "status-text", s
->status_text
);
1975 /* FIXME: There's a minor uncleanliness here: if there are
1976 * multiple commands attached here, we will start from the
1977 * first one again */
1978 if (s
->control_command_id
>= 0)
1979 unit_serialize_item(u
, f
, "control-command",
1980 service_exec_command_to_string(s
->control_command_id
));
1982 if (s
->socket_fd
>= 0) {
1985 copy
= fdset_put_dup(fds
, s
->socket_fd
);
1989 unit_serialize_item_format(u
, f
, "socket-fd", "%i", copy
);
1992 if (s
->bus_endpoint_fd
>= 0) {
1995 copy
= fdset_put_dup(fds
, s
->bus_endpoint_fd
);
1999 unit_serialize_item_format(u
, f
, "endpoint-fd", "%i", copy
);
2002 LIST_FOREACH(fd_store
, fs
, s
->fd_store
) {
2005 copy
= fdset_put_dup(fds
, fs
->fd
);
2009 unit_serialize_item_format(u
, f
, "fd-store-fd", "%i", copy
);
2012 if (s
->main_exec_status
.pid
> 0) {
2013 unit_serialize_item_format(u
, f
, "main-exec-status-pid", PID_FMT
,
2014 s
->main_exec_status
.pid
);
2015 dual_timestamp_serialize(f
, "main-exec-status-start",
2016 &s
->main_exec_status
.start_timestamp
);
2017 dual_timestamp_serialize(f
, "main-exec-status-exit",
2018 &s
->main_exec_status
.exit_timestamp
);
2020 if (dual_timestamp_is_set(&s
->main_exec_status
.exit_timestamp
)) {
2021 unit_serialize_item_format(u
, f
, "main-exec-status-code", "%i",
2022 s
->main_exec_status
.code
);
2023 unit_serialize_item_format(u
, f
, "main-exec-status-status", "%i",
2024 s
->main_exec_status
.status
);
2027 if (dual_timestamp_is_set(&s
->watchdog_timestamp
))
2028 dual_timestamp_serialize(f
, "watchdog-timestamp", &s
->watchdog_timestamp
);
2030 if (s
->forbid_restart
)
2031 unit_serialize_item(u
, f
, "forbid-restart", yes_no(s
->forbid_restart
));
2036 static int service_deserialize_item(Unit
*u
, const char *key
, const char *value
, FDSet
*fds
) {
2037 Service
*s
= SERVICE(u
);
2045 if (streq(key
, "state")) {
2048 state
= service_state_from_string(value
);
2050 log_unit_debug(u
->id
, "Failed to parse state value %s", value
);
2052 s
->deserialized_state
= state
;
2053 } else if (streq(key
, "result")) {
2056 f
= service_result_from_string(value
);
2058 log_unit_debug(u
->id
, "Failed to parse result value %s", value
);
2059 else if (f
!= SERVICE_SUCCESS
)
2062 } else if (streq(key
, "reload-result")) {
2065 f
= service_result_from_string(value
);
2067 log_unit_debug(u
->id
, "Failed to parse reload result value %s", value
);
2068 else if (f
!= SERVICE_SUCCESS
)
2069 s
->reload_result
= f
;
2071 } else if (streq(key
, "control-pid")) {
2074 if (parse_pid(value
, &pid
) < 0)
2075 log_unit_debug(u
->id
, "Failed to parse control-pid value %s", value
);
2077 s
->control_pid
= pid
;
2078 } else if (streq(key
, "main-pid")) {
2081 if (parse_pid(value
, &pid
) < 0)
2082 log_unit_debug(u
->id
, "Failed to parse main-pid value %s", value
);
2084 service_set_main_pid(s
, pid
);
2085 unit_watch_pid(UNIT(s
), pid
);
2087 } else if (streq(key
, "main-pid-known")) {
2090 b
= parse_boolean(value
);
2092 log_unit_debug(u
->id
, "Failed to parse main-pid-known value %s", value
);
2094 s
->main_pid_known
= b
;
2095 } else if (streq(key
, "status-text")) {
2102 free(s
->status_text
);
2106 } else if (streq(key
, "control-command")) {
2107 ServiceExecCommand id
;
2109 id
= service_exec_command_from_string(value
);
2111 log_unit_debug(u
->id
, "Failed to parse exec-command value %s", value
);
2113 s
->control_command_id
= id
;
2114 s
->control_command
= s
->exec_command
[id
];
2116 } else if (streq(key
, "socket-fd")) {
2119 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2120 log_unit_debug(u
->id
, "Failed to parse socket-fd value %s", value
);
2122 asynchronous_close(s
->socket_fd
);
2123 s
->socket_fd
= fdset_remove(fds
, fd
);
2125 } else if (streq(key
, "endpoint-fd")) {
2128 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2129 log_unit_debug(u
->id
, "Failed to parse endpoint-fd value %s", value
);
2131 safe_close(s
->bus_endpoint_fd
);
2132 s
->bus_endpoint_fd
= fdset_remove(fds
, fd
);
2134 } else if (streq(key
, "fd-store-fd")) {
2137 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
2138 log_unit_debug(u
->id
, "Failed to parse fd-store-fd value %s", value
);
2140 r
= service_add_fd_store(s
, fd
);
2142 log_unit_error_errno(u
->id
, r
, "Failed to add fd to store: %m");
2144 fdset_remove(fds
, fd
);
2147 } else if (streq(key
, "main-exec-status-pid")) {
2150 if (parse_pid(value
, &pid
) < 0)
2151 log_unit_debug(u
->id
, "Failed to parse main-exec-status-pid value %s", value
);
2153 s
->main_exec_status
.pid
= pid
;
2154 } else if (streq(key
, "main-exec-status-code")) {
2157 if (safe_atoi(value
, &i
) < 0)
2158 log_unit_debug(u
->id
, "Failed to parse main-exec-status-code value %s", value
);
2160 s
->main_exec_status
.code
= i
;
2161 } else if (streq(key
, "main-exec-status-status")) {
2164 if (safe_atoi(value
, &i
) < 0)
2165 log_unit_debug(u
->id
, "Failed to parse main-exec-status-status value %s", value
);
2167 s
->main_exec_status
.status
= i
;
2168 } else if (streq(key
, "main-exec-status-start"))
2169 dual_timestamp_deserialize(value
, &s
->main_exec_status
.start_timestamp
);
2170 else if (streq(key
, "main-exec-status-exit"))
2171 dual_timestamp_deserialize(value
, &s
->main_exec_status
.exit_timestamp
);
2172 else if (streq(key
, "watchdog-timestamp"))
2173 dual_timestamp_deserialize(value
, &s
->watchdog_timestamp
);
2174 else if (streq(key
, "forbid-restart")) {
2177 b
= parse_boolean(value
);
2179 log_unit_debug(u
->id
, "Failed to parse forbid-restart value %s", value
);
2181 s
->forbid_restart
= b
;
2183 log_unit_debug(u
->id
, "Unknown serialization key '%s'", key
);
2188 _pure_
static UnitActiveState
service_active_state(Unit
*u
) {
2189 const UnitActiveState
*table
;
2193 table
= SERVICE(u
)->type
== SERVICE_IDLE
? state_translation_table_idle
: state_translation_table
;
2195 return table
[SERVICE(u
)->state
];
2198 static const char *service_sub_state_to_string(Unit
*u
) {
2201 return service_state_to_string(SERVICE(u
)->state
);
2204 static bool service_check_gc(Unit
*u
) {
2205 Service
*s
= SERVICE(u
);
2209 /* Never clean up services that still have a process around,
2210 * even if the service is formally dead. */
2211 if (cgroup_good(s
) > 0 ||
2212 main_pid_good(s
) > 0 ||
2213 control_pid_good(s
) > 0)
2219 _pure_
static bool service_check_snapshot(Unit
*u
) {
2220 Service
*s
= SERVICE(u
);
2224 return s
->socket_fd
< 0;
2227 static int service_retry_pid_file(Service
*s
) {
2230 assert(s
->pid_file
);
2231 assert(s
->state
== SERVICE_START
|| s
->state
== SERVICE_START_POST
);
2233 r
= service_load_pid_file(s
, false);
2237 service_unwatch_pid_file(s
);
2239 service_enter_running(s
, SERVICE_SUCCESS
);
2243 static int service_watch_pid_file(Service
*s
) {
2246 log_unit_debug(UNIT(s
)->id
, "Setting watch for %s's PID file %s", UNIT(s
)->id
, s
->pid_file_pathspec
->path
);
2248 r
= path_spec_watch(s
->pid_file_pathspec
, service_dispatch_io
);
2252 /* the pidfile might have appeared just before we set the watch */
2253 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
);
2254 service_retry_pid_file(s
);
2258 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
);
2259 service_unwatch_pid_file(s
);
2263 static int service_demand_pid_file(Service
*s
) {
2266 assert(s
->pid_file
);
2267 assert(!s
->pid_file_pathspec
);
2269 ps
= new0(PathSpec
, 1);
2274 ps
->path
= strdup(s
->pid_file
);
2280 path_kill_slashes(ps
->path
);
2282 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2283 * keep their PID file open all the time. */
2284 ps
->type
= PATH_MODIFIED
;
2285 ps
->inotify_fd
= -1;
2287 s
->pid_file_pathspec
= ps
;
2289 return service_watch_pid_file(s
);
2292 static int service_dispatch_io(sd_event_source
*source
, int fd
, uint32_t events
, void *userdata
) {
2293 PathSpec
*p
= userdata
;
2298 s
= SERVICE(p
->unit
);
2302 assert(s
->state
== SERVICE_START
|| s
->state
== SERVICE_START_POST
);
2303 assert(s
->pid_file_pathspec
);
2304 assert(path_spec_owns_inotify_fd(s
->pid_file_pathspec
, fd
));
2306 log_unit_debug(UNIT(s
)->id
, "inotify event for %s", UNIT(s
)->id
);
2308 if (path_spec_fd_event(p
, events
) < 0)
2311 if (service_retry_pid_file(s
) == 0)
2314 if (service_watch_pid_file(s
) < 0)
2320 service_unwatch_pid_file(s
);
2321 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2325 static void service_notify_cgroup_empty_event(Unit
*u
) {
2326 Service
*s
= SERVICE(u
);
2330 log_unit_debug(u
->id
, "%s: cgroup is empty", u
->id
);
2334 /* Waiting for SIGCHLD is usually more interesting,
2335 * because it includes return codes/signals. Which is
2336 * why we ignore the cgroup events for most cases,
2337 * except when we don't know pid which to expect the
2341 case SERVICE_START_POST
:
2342 /* If we were hoping for the daemon to write its PID file,
2343 * we can give up now. */
2344 if (s
->pid_file_pathspec
) {
2345 log_unit_warning(u
->id
, "%s never wrote its PID file. Failing.", UNIT(s
)->id
);
2347 service_unwatch_pid_file(s
);
2348 if (s
->state
== SERVICE_START
)
2349 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2351 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2355 case SERVICE_RUNNING
:
2356 /* service_enter_running() will figure out what to do */
2357 service_enter_running(s
, SERVICE_SUCCESS
);
2360 case SERVICE_STOP_SIGABRT
:
2361 case SERVICE_STOP_SIGTERM
:
2362 case SERVICE_STOP_SIGKILL
:
2364 if (main_pid_good(s
) <= 0 && !control_pid_good(s
))
2365 service_enter_stop_post(s
, SERVICE_SUCCESS
);
2369 case SERVICE_STOP_POST
:
2370 case SERVICE_FINAL_SIGTERM
:
2371 case SERVICE_FINAL_SIGKILL
:
2372 if (main_pid_good(s
) <= 0 && !control_pid_good(s
))
2373 service_enter_dead(s
, SERVICE_SUCCESS
, true);
2382 static void service_sigchld_event(Unit
*u
, pid_t pid
, int code
, int status
) {
2383 Service
*s
= SERVICE(u
);
2389 if (UNIT(s
)->fragment_path
? is_clean_exit(code
, status
, &s
->success_status
) :
2390 is_clean_exit_lsb(code
, status
, &s
->success_status
))
2391 f
= SERVICE_SUCCESS
;
2392 else if (code
== CLD_EXITED
)
2393 f
= SERVICE_FAILURE_EXIT_CODE
;
2394 else if (code
== CLD_KILLED
)
2395 f
= SERVICE_FAILURE_SIGNAL
;
2396 else if (code
== CLD_DUMPED
)
2397 f
= SERVICE_FAILURE_CORE_DUMP
;
2399 assert_not_reached("Unknown code");
2401 if (s
->main_pid
== pid
) {
2402 /* Forking services may occasionally move to a new PID.
2403 * As long as they update the PID file before exiting the old
2404 * PID, they're fine. */
2405 if (service_load_pid_file(s
, false) == 0)
2409 exec_status_exit(&s
->main_exec_status
, &s
->exec_context
, pid
, code
, status
);
2411 if (s
->main_command
) {
2412 /* If this is not a forking service than the
2413 * main process got started and hence we copy
2414 * the exit status so that it is recorded both
2415 * as main and as control process exit
2418 s
->main_command
->exec_status
= s
->main_exec_status
;
2420 if (s
->main_command
->ignore
)
2421 f
= SERVICE_SUCCESS
;
2422 } else if (s
->exec_command
[SERVICE_EXEC_START
]) {
2424 /* If this is a forked process, then we should
2425 * ignore the return value if this was
2426 * configured for the starter process */
2428 if (s
->exec_command
[SERVICE_EXEC_START
]->ignore
)
2429 f
= SERVICE_SUCCESS
;
2432 log_unit_struct(u
->id
,
2433 f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
,
2434 LOG_MESSAGE("%s: main process exited, code=%s, status=%i/%s",
2435 u
->id
, sigchld_code_to_string(code
), status
,
2436 strna(code
== CLD_EXITED
2437 ? exit_status_to_string(status
, EXIT_STATUS_FULL
)
2438 : signal_to_string(status
))),
2439 "EXIT_CODE=%s", sigchld_code_to_string(code
),
2440 "EXIT_STATUS=%i", status
,
2443 if (f
!= SERVICE_SUCCESS
)
2446 if (s
->main_command
&&
2447 s
->main_command
->command_next
&&
2448 f
== SERVICE_SUCCESS
) {
2450 /* There is another command to *
2451 * execute, so let's do that. */
2453 log_unit_debug(u
->id
, "%s running next main command for state %s", u
->id
, service_state_to_string(s
->state
));
2454 service_run_next_main(s
);
2458 /* The service exited, so the service is officially
2460 s
->main_command
= NULL
;
2464 case SERVICE_START_POST
:
2465 case SERVICE_RELOAD
:
2467 /* Need to wait until the operation is
2472 if (s
->type
== SERVICE_ONESHOT
) {
2473 /* This was our main goal, so let's go on */
2474 if (f
== SERVICE_SUCCESS
)
2475 service_enter_start_post(s
);
2477 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2483 case SERVICE_RUNNING
:
2484 service_enter_running(s
, f
);
2487 case SERVICE_STOP_SIGABRT
:
2488 case SERVICE_STOP_SIGTERM
:
2489 case SERVICE_STOP_SIGKILL
:
2491 if (!control_pid_good(s
))
2492 service_enter_stop_post(s
, f
);
2494 /* If there is still a control process, wait for that first */
2497 case SERVICE_STOP_POST
:
2498 case SERVICE_FINAL_SIGTERM
:
2499 case SERVICE_FINAL_SIGKILL
:
2501 if (!control_pid_good(s
))
2502 service_enter_dead(s
, f
, true);
2506 assert_not_reached("Uh, main process died at wrong time.");
2510 } else if (s
->control_pid
== pid
) {
2513 if (s
->control_command
) {
2514 exec_status_exit(&s
->control_command
->exec_status
, &s
->exec_context
, pid
, code
, status
);
2516 if (s
->control_command
->ignore
)
2517 f
= SERVICE_SUCCESS
;
2520 log_unit_full(u
->id
,
2521 f
== SERVICE_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
,
2522 "%s: control process exited, code=%s status=%i",
2523 u
->id
, sigchld_code_to_string(code
), status
);
2525 if (f
!= SERVICE_SUCCESS
)
2528 /* Immediately get rid of the cgroup, so that the
2529 * kernel doesn't delay the cgroup empty messages for
2530 * the service cgroup any longer than necessary */
2531 service_kill_control_processes(s
);
2533 if (s
->control_command
&&
2534 s
->control_command
->command_next
&&
2535 f
== SERVICE_SUCCESS
) {
2537 /* There is another command to *
2538 * execute, so let's do that. */
2540 log_unit_debug(u
->id
, "%s running next control command for state %s", u
->id
, service_state_to_string(s
->state
));
2541 service_run_next_control(s
);
2544 /* No further commands for this step, so let's
2545 * figure out what to do next */
2547 s
->control_command
= NULL
;
2548 s
->control_command_id
= _SERVICE_EXEC_COMMAND_INVALID
;
2550 log_unit_debug(u
->id
, "%s got final SIGCHLD for state %s", u
->id
, service_state_to_string(s
->state
));
2554 case SERVICE_START_PRE
:
2555 if (f
== SERVICE_SUCCESS
)
2556 service_enter_start(s
);
2558 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2562 if (s
->type
!= SERVICE_FORKING
)
2563 /* Maybe spurious event due to a reload that changed the type? */
2566 if (f
!= SERVICE_SUCCESS
) {
2567 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, f
);
2572 bool has_start_post
;
2575 /* Let's try to load the pid file here if we can.
2576 * The PID file might actually be created by a START_POST
2577 * script. In that case don't worry if the loading fails. */
2579 has_start_post
= !!s
->exec_command
[SERVICE_EXEC_START_POST
];
2580 r
= service_load_pid_file(s
, !has_start_post
);
2581 if (!has_start_post
&& r
< 0) {
2582 r
= service_demand_pid_file(s
);
2583 if (r
< 0 || !cgroup_good(s
))
2584 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_RESOURCES
);
2588 service_search_main_pid(s
);
2590 service_enter_start_post(s
);
2593 case SERVICE_START_POST
:
2594 if (f
!= SERVICE_SUCCESS
) {
2595 service_enter_stop(s
, f
);
2602 r
= service_load_pid_file(s
, true);
2604 r
= service_demand_pid_file(s
);
2605 if (r
< 0 || !cgroup_good(s
))
2606 service_enter_stop(s
, SERVICE_FAILURE_RESOURCES
);
2610 service_search_main_pid(s
);
2612 service_enter_running(s
, SERVICE_SUCCESS
);
2615 case SERVICE_RELOAD
:
2616 if (f
== SERVICE_SUCCESS
) {
2617 service_load_pid_file(s
, true);
2618 service_search_main_pid(s
);
2621 s
->reload_result
= f
;
2622 service_enter_running(s
, SERVICE_SUCCESS
);
2626 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, f
);
2629 case SERVICE_STOP_SIGABRT
:
2630 case SERVICE_STOP_SIGTERM
:
2631 case SERVICE_STOP_SIGKILL
:
2632 if (main_pid_good(s
) <= 0)
2633 service_enter_stop_post(s
, f
);
2635 /* If there is still a service
2636 * process around, wait until
2637 * that one quit, too */
2640 case SERVICE_STOP_POST
:
2641 case SERVICE_FINAL_SIGTERM
:
2642 case SERVICE_FINAL_SIGKILL
:
2643 if (main_pid_good(s
) <= 0)
2644 service_enter_dead(s
, f
, true);
2648 assert_not_reached("Uh, control process died at wrong time.");
2653 /* Notify clients about changed exit status */
2654 unit_add_to_dbus_queue(u
);
2656 /* We got one SIGCHLD for the service, let's watch all
2657 * processes that are now running of the service, and watch
2658 * that. Among the PIDs we then watch will be children
2659 * reassigned to us, which hopefully allows us to identify
2660 * when all children are gone */
2661 unit_tidy_watch_pids(u
, s
->main_pid
, s
->control_pid
);
2662 unit_watch_all_pids(u
);
2664 /* If the PID set is empty now, then let's finish this off */
2665 if (set_isempty(u
->pids
))
2666 service_notify_cgroup_empty_event(u
);
2669 static int service_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
) {
2670 Service
*s
= SERVICE(userdata
);
2673 assert(source
== s
->timer_event_source
);
2677 case SERVICE_START_PRE
:
2679 log_unit_warning(UNIT(s
)->id
, "%s %s operation timed out. Terminating.", UNIT(s
)->id
, s
->state
== SERVICE_START
? "start" : "start-pre");
2680 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2683 case SERVICE_START_POST
:
2684 log_unit_warning(UNIT(s
)->id
, "%s start-post operation timed out. Stopping.", UNIT(s
)->id
);
2685 service_enter_stop(s
, SERVICE_FAILURE_TIMEOUT
);
2688 case SERVICE_RELOAD
:
2689 log_unit_warning(UNIT(s
)->id
, "%s reload operation timed out. Stopping.", UNIT(s
)->id
);
2690 s
->reload_result
= SERVICE_FAILURE_TIMEOUT
;
2691 service_enter_running(s
, SERVICE_SUCCESS
);
2695 log_unit_warning(UNIT(s
)->id
, "%s stopping timed out. Terminating.", UNIT(s
)->id
);
2696 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2699 case SERVICE_STOP_SIGABRT
:
2700 log_unit_warning(UNIT(s
)->id
,
2701 "%s stop-sigabrt timed out. Terminating.", UNIT(s
)->id
);
2702 service_enter_signal(s
, SERVICE_STOP_SIGTERM
, s
->result
);
2705 case SERVICE_STOP_SIGTERM
:
2706 if (s
->kill_context
.send_sigkill
) {
2707 log_unit_warning(UNIT(s
)->id
, "%s stop-sigterm timed out. Killing.", UNIT(s
)->id
);
2708 service_enter_signal(s
, SERVICE_STOP_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
2710 log_unit_warning(UNIT(s
)->id
, "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s
)->id
);
2711 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
2716 case SERVICE_STOP_SIGKILL
:
2717 /* Uh, we sent a SIGKILL and it is still not gone?
2718 * Must be something we cannot kill, so let's just be
2719 * weirded out and continue */
2721 log_unit_warning(UNIT(s
)->id
, "%s still around after SIGKILL. Ignoring.", UNIT(s
)->id
);
2722 service_enter_stop_post(s
, SERVICE_FAILURE_TIMEOUT
);
2725 case SERVICE_STOP_POST
:
2726 log_unit_warning(UNIT(s
)->id
, "%s stop-post timed out. Terminating.", UNIT(s
)->id
);
2727 service_enter_signal(s
, SERVICE_FINAL_SIGTERM
, SERVICE_FAILURE_TIMEOUT
);
2730 case SERVICE_FINAL_SIGTERM
:
2731 if (s
->kill_context
.send_sigkill
) {
2732 log_unit_warning(UNIT(s
)->id
, "%s stop-final-sigterm timed out. Killing.", UNIT(s
)->id
);
2733 service_enter_signal(s
, SERVICE_FINAL_SIGKILL
, SERVICE_FAILURE_TIMEOUT
);
2735 log_unit_warning(UNIT(s
)->id
, "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.", UNIT(s
)->id
);
2736 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, false);
2741 case SERVICE_FINAL_SIGKILL
:
2742 log_unit_warning(UNIT(s
)->id
, "%s still around after final SIGKILL. Entering failed mode.", UNIT(s
)->id
);
2743 service_enter_dead(s
, SERVICE_FAILURE_TIMEOUT
, true);
2746 case SERVICE_AUTO_RESTART
:
2747 log_unit_info(UNIT(s
)->id
,
2748 s
->restart_usec
> 0 ?
2749 "%s holdoff time over, scheduling restart." :
2750 "%s has no holdoff time, scheduling restart.",
2752 service_enter_restart(s
);
2756 assert_not_reached("Timeout at wrong time.");
2762 static int service_dispatch_watchdog(sd_event_source
*source
, usec_t usec
, void *userdata
) {
2763 Service
*s
= SERVICE(userdata
);
2764 char t
[FORMAT_TIMESPAN_MAX
];
2767 assert(source
== s
->watchdog_event_source
);
2769 log_unit_error(UNIT(s
)->id
, "%s watchdog timeout (limit %s)!", UNIT(s
)->id
,
2770 format_timespan(t
, sizeof(t
), s
->watchdog_usec
, 1));
2772 service_enter_signal(s
, SERVICE_STOP_SIGABRT
, SERVICE_FAILURE_WATCHDOG
);
2777 static void service_notify_message(Unit
*u
, pid_t pid
, char **tags
, FDSet
*fds
) {
2778 Service
*s
= SERVICE(u
);
2779 _cleanup_free_
char *cc
= NULL
;
2780 bool notify_dbus
= false;
2785 cc
= strv_join(tags
, ", ");
2786 log_unit_debug(u
->id
, "%s: Got notification message from PID "PID_FMT
" (%s)",
2787 u
->id
, pid
, isempty(cc
) ? "n/a" : cc
);
2789 if (s
->notify_access
== NOTIFY_NONE
) {
2790 log_unit_warning(u
->id
, "%s: Got notification message from PID "PID_FMT
", but reception is disabled.", u
->id
, pid
);
2794 if (s
->notify_access
== NOTIFY_MAIN
&& pid
!= s
->main_pid
) {
2795 if (s
->main_pid
!= 0)
2796 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
);
2798 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
);
2802 /* Interpret MAINPID= */
2803 e
= strv_find_startswith(tags
, "MAINPID=");
2804 if (e
&& IN_SET(s
->state
, SERVICE_START
, SERVICE_START_POST
, SERVICE_RUNNING
, SERVICE_RELOAD
)) {
2805 if (parse_pid(e
, &pid
) < 0)
2806 log_unit_warning(u
->id
, "Failed to parse MAINPID= field in notification message: %s", e
);
2808 log_unit_debug(u
->id
, "%s: got MAINPID=%s", u
->id
, e
);
2810 service_set_main_pid(s
, pid
);
2811 unit_watch_pid(UNIT(s
), pid
);
2816 /* Interpret RELOADING= */
2817 if (strv_find(tags
, "RELOADING=1")) {
2819 log_unit_debug(u
->id
, "%s: got RELOADING=1", u
->id
);
2820 s
->notify_state
= NOTIFY_RELOADING
;
2822 if (s
->state
== SERVICE_RUNNING
)
2823 service_enter_reload_by_notify(s
);
2828 /* Interpret READY= */
2829 if (strv_find(tags
, "READY=1")) {
2831 log_unit_debug(u
->id
, "%s: got READY=1", u
->id
);
2832 s
->notify_state
= NOTIFY_READY
;
2834 /* Type=notify services inform us about completed
2835 * initialization with READY=1 */
2836 if (s
->type
== SERVICE_NOTIFY
&& s
->state
== SERVICE_START
)
2837 service_enter_start_post(s
);
2839 /* Sending READY=1 while we are reloading informs us
2840 * that the reloading is complete */
2841 if (s
->state
== SERVICE_RELOAD
&& s
->control_pid
== 0)
2842 service_enter_running(s
, SERVICE_SUCCESS
);
2847 /* Interpret STOPPING= */
2848 if (strv_find(tags
, "STOPPING=1")) {
2850 log_unit_debug(u
->id
, "%s: got STOPPING=1", u
->id
);
2851 s
->notify_state
= NOTIFY_STOPPING
;
2853 if (s
->state
== SERVICE_RUNNING
)
2854 service_enter_stop_by_notify(s
);
2859 /* Interpret STATUS= */
2860 e
= strv_find_startswith(tags
, "STATUS=");
2862 _cleanup_free_
char *t
= NULL
;
2865 if (!utf8_is_valid(e
))
2866 log_unit_warning(u
->id
, "Status message in notification is not UTF-8 clean.");
2868 log_unit_debug(u
->id
, "%s: got STATUS=%s", u
->id
, e
);
2876 if (!streq_ptr(s
->status_text
, t
)) {
2878 free(s
->status_text
);
2886 /* Interpret ERRNO= */
2887 e
= strv_find_startswith(tags
, "ERRNO=");
2891 if (safe_atoi(e
, &status_errno
) < 0 || status_errno
< 0)
2892 log_unit_warning(u
->id
, "Failed to parse ERRNO= field in notification message: %s", e
);
2894 log_unit_debug(u
->id
, "%s: got ERRNO=%s", u
->id
, e
);
2896 if (s
->status_errno
!= status_errno
) {
2897 s
->status_errno
= status_errno
;
2903 /* Interpret WATCHDOG= */
2904 if (strv_find(tags
, "WATCHDOG=1")) {
2905 log_unit_debug(u
->id
, "%s: got WATCHDOG=1", u
->id
);
2906 service_reset_watchdog(s
);
2909 /* Add the passed fds to the fd store */
2910 if (strv_find(tags
, "FDSTORE=1")) {
2911 log_unit_debug(u
->id
, "%s: got FDSTORE=1", u
->id
);
2912 service_add_fd_store_set(s
, fds
);
2915 /* Notify clients about changed status or main pid */
2917 unit_add_to_dbus_queue(u
);
2920 static int service_get_timeout(Unit
*u
, uint64_t *timeout
) {
2921 Service
*s
= SERVICE(u
);
2924 if (!s
->timer_event_source
)
2927 r
= sd_event_source_get_time(s
->timer_event_source
, timeout
);
2934 static void service_bus_name_owner_change(
2937 const char *old_owner
,
2938 const char *new_owner
) {
2940 Service
*s
= SERVICE(u
);
2946 assert(streq(s
->bus_name
, name
));
2947 assert(old_owner
|| new_owner
);
2949 if (old_owner
&& new_owner
)
2950 log_unit_debug(u
->id
, "%s's D-Bus name %s changed owner from %s to %s", u
->id
, name
, old_owner
, new_owner
);
2952 log_unit_debug(u
->id
, "%s's D-Bus name %s no longer registered by %s", u
->id
, name
, old_owner
);
2954 log_unit_debug(u
->id
, "%s's D-Bus name %s now registered by %s", u
->id
, name
, new_owner
);
2956 s
->bus_name_good
= !!new_owner
;
2958 if (s
->type
== SERVICE_DBUS
) {
2960 /* service_enter_running() will figure out what to
2962 if (s
->state
== SERVICE_RUNNING
)
2963 service_enter_running(s
, SERVICE_SUCCESS
);
2964 else if (s
->state
== SERVICE_START
&& new_owner
)
2965 service_enter_start_post(s
);
2967 } else if (new_owner
&&
2969 (s
->state
== SERVICE_START
||
2970 s
->state
== SERVICE_START_POST
||
2971 s
->state
== SERVICE_RUNNING
||
2972 s
->state
== SERVICE_RELOAD
)) {
2974 _cleanup_bus_creds_unref_ sd_bus_creds
*creds
= NULL
;
2977 /* Try to acquire PID from bus service */
2979 r
= sd_bus_get_name_creds(u
->manager
->api_bus
, name
, SD_BUS_CREDS_PID
, &creds
);
2981 r
= sd_bus_creds_get_pid(creds
, &pid
);
2983 log_unit_debug(u
->id
, "%s's D-Bus name %s is now owned by process %u", u
->id
, name
, (unsigned) pid
);
2985 service_set_main_pid(s
, pid
);
2986 unit_watch_pid(UNIT(s
), pid
);
2991 int service_set_socket_fd(Service
*s
, int fd
, Socket
*sock
, bool selinux_context_net
) {
2992 _cleanup_free_
char *peer
= NULL
;
2998 /* This is called by the socket code when instantiating a new
2999 * service for a stream socket and the socket needs to be
3002 if (UNIT(s
)->load_state
!= UNIT_LOADED
)
3005 if (s
->socket_fd
>= 0)
3008 if (s
->state
!= SERVICE_DEAD
)
3011 if (getpeername_pretty(fd
, &peer
) >= 0) {
3013 if (UNIT(s
)->description
) {
3014 _cleanup_free_
char *a
;
3016 a
= strjoin(UNIT(s
)->description
, " (", peer
, ")", NULL
);
3020 r
= unit_set_description(UNIT(s
), a
);
3022 r
= unit_set_description(UNIT(s
), peer
);
3029 s
->socket_fd_selinux_context_net
= selinux_context_net
;
3031 unit_ref_set(&s
->accept_socket
, UNIT(sock
));
3033 return unit_add_two_dependencies(UNIT(sock
), UNIT_BEFORE
, UNIT_TRIGGERS
, UNIT(s
), false);
3036 static void service_reset_failed(Unit
*u
) {
3037 Service
*s
= SERVICE(u
);
3041 if (s
->state
== SERVICE_FAILED
)
3042 service_set_state(s
, SERVICE_DEAD
);
3044 s
->result
= SERVICE_SUCCESS
;
3045 s
->reload_result
= SERVICE_SUCCESS
;
3047 RATELIMIT_RESET(s
->start_limit
);
3050 static int service_kill(Unit
*u
, KillWho who
, int signo
, sd_bus_error
*error
) {
3051 Service
*s
= SERVICE(u
);
3053 return unit_kill_common(u
, who
, signo
, s
->main_pid
, s
->control_pid
, error
);
3056 static const char* const service_state_table
[_SERVICE_STATE_MAX
] = {
3057 [SERVICE_DEAD
] = "dead",
3058 [SERVICE_START_PRE
] = "start-pre",
3059 [SERVICE_START
] = "start",
3060 [SERVICE_START_POST
] = "start-post",
3061 [SERVICE_RUNNING
] = "running",
3062 [SERVICE_EXITED
] = "exited",
3063 [SERVICE_RELOAD
] = "reload",
3064 [SERVICE_STOP
] = "stop",
3065 [SERVICE_STOP_SIGABRT
] = "stop-sigabrt",
3066 [SERVICE_STOP_SIGTERM
] = "stop-sigterm",
3067 [SERVICE_STOP_SIGKILL
] = "stop-sigkill",
3068 [SERVICE_STOP_POST
] = "stop-post",
3069 [SERVICE_FINAL_SIGTERM
] = "final-sigterm",
3070 [SERVICE_FINAL_SIGKILL
] = "final-sigkill",
3071 [SERVICE_FAILED
] = "failed",
3072 [SERVICE_AUTO_RESTART
] = "auto-restart",
3075 DEFINE_STRING_TABLE_LOOKUP(service_state
, ServiceState
);
3077 static const char* const service_restart_table
[_SERVICE_RESTART_MAX
] = {
3078 [SERVICE_RESTART_NO
] = "no",
3079 [SERVICE_RESTART_ON_SUCCESS
] = "on-success",
3080 [SERVICE_RESTART_ON_FAILURE
] = "on-failure",
3081 [SERVICE_RESTART_ON_ABNORMAL
] = "on-abnormal",
3082 [SERVICE_RESTART_ON_WATCHDOG
] = "on-watchdog",
3083 [SERVICE_RESTART_ON_ABORT
] = "on-abort",
3084 [SERVICE_RESTART_ALWAYS
] = "always",
3087 DEFINE_STRING_TABLE_LOOKUP(service_restart
, ServiceRestart
);
3089 static const char* const service_type_table
[_SERVICE_TYPE_MAX
] = {
3090 [SERVICE_SIMPLE
] = "simple",
3091 [SERVICE_FORKING
] = "forking",
3092 [SERVICE_ONESHOT
] = "oneshot",
3093 [SERVICE_DBUS
] = "dbus",
3094 [SERVICE_NOTIFY
] = "notify",
3095 [SERVICE_IDLE
] = "idle"
3098 DEFINE_STRING_TABLE_LOOKUP(service_type
, ServiceType
);
3100 static const char* const service_exec_command_table
[_SERVICE_EXEC_COMMAND_MAX
] = {
3101 [SERVICE_EXEC_START_PRE
] = "ExecStartPre",
3102 [SERVICE_EXEC_START
] = "ExecStart",
3103 [SERVICE_EXEC_START_POST
] = "ExecStartPost",
3104 [SERVICE_EXEC_RELOAD
] = "ExecReload",
3105 [SERVICE_EXEC_STOP
] = "ExecStop",
3106 [SERVICE_EXEC_STOP_POST
] = "ExecStopPost",
3109 DEFINE_STRING_TABLE_LOOKUP(service_exec_command
, ServiceExecCommand
);
3111 static const char* const notify_access_table
[_NOTIFY_ACCESS_MAX
] = {
3112 [NOTIFY_NONE
] = "none",
3113 [NOTIFY_MAIN
] = "main",
3114 [NOTIFY_ALL
] = "all"
3117 DEFINE_STRING_TABLE_LOOKUP(notify_access
, NotifyAccess
);
3119 static const char* const notify_state_table
[_NOTIFY_STATE_MAX
] = {
3120 [NOTIFY_UNKNOWN
] = "unknown",
3121 [NOTIFY_READY
] = "ready",
3122 [NOTIFY_RELOADING
] = "reloading",
3123 [NOTIFY_STOPPING
] = "stopping",
3126 DEFINE_STRING_TABLE_LOOKUP(notify_state
, NotifyState
);
3128 static const char* const service_result_table
[_SERVICE_RESULT_MAX
] = {
3129 [SERVICE_SUCCESS
] = "success",
3130 [SERVICE_FAILURE_RESOURCES
] = "resources",
3131 [SERVICE_FAILURE_TIMEOUT
] = "timeout",
3132 [SERVICE_FAILURE_EXIT_CODE
] = "exit-code",
3133 [SERVICE_FAILURE_SIGNAL
] = "signal",
3134 [SERVICE_FAILURE_CORE_DUMP
] = "core-dump",
3135 [SERVICE_FAILURE_WATCHDOG
] = "watchdog",
3136 [SERVICE_FAILURE_START_LIMIT
] = "start-limit"
3139 DEFINE_STRING_TABLE_LOOKUP(service_result
, ServiceResult
);
3141 const UnitVTable service_vtable
= {
3142 .object_size
= sizeof(Service
),
3143 .exec_context_offset
= offsetof(Service
, exec_context
),
3144 .cgroup_context_offset
= offsetof(Service
, cgroup_context
),
3145 .kill_context_offset
= offsetof(Service
, kill_context
),
3146 .exec_runtime_offset
= offsetof(Service
, exec_runtime
),
3152 .private_section
= "Service",
3154 .init
= service_init
,
3155 .done
= service_done
,
3156 .load
= service_load
,
3157 .release_resources
= service_release_resources
,
3159 .coldplug
= service_coldplug
,
3161 .dump
= service_dump
,
3163 .start
= service_start
,
3164 .stop
= service_stop
,
3165 .reload
= service_reload
,
3167 .can_reload
= service_can_reload
,
3169 .kill
= service_kill
,
3171 .serialize
= service_serialize
,
3172 .deserialize_item
= service_deserialize_item
,
3174 .active_state
= service_active_state
,
3175 .sub_state_to_string
= service_sub_state_to_string
,
3177 .check_gc
= service_check_gc
,
3178 .check_snapshot
= service_check_snapshot
,
3180 .sigchld_event
= service_sigchld_event
,
3182 .reset_failed
= service_reset_failed
,
3184 .notify_cgroup_empty
= service_notify_cgroup_empty_event
,
3185 .notify_message
= service_notify_message
,
3187 .bus_name_owner_change
= service_bus_name_owner_change
,
3189 .bus_interface
= "org.freedesktop.systemd1.Service",
3190 .bus_vtable
= bus_service_vtable
,
3191 .bus_set_property
= bus_service_set_property
,
3192 .bus_commit_properties
= bus_service_commit_properties
,
3194 .get_timeout
= service_get_timeout
,
3195 .can_transient
= true,
3197 .status_message_formats
= {
3198 .starting_stopping
= {
3199 [0] = "Starting %s...",
3200 [1] = "Stopping %s...",
3202 .finished_start_job
= {
3203 [JOB_DONE
] = "Started %s.",
3204 [JOB_FAILED
] = "Failed to start %s.",
3205 [JOB_DEPENDENCY
] = "Dependency failed for %s.",
3206 [JOB_TIMEOUT
] = "Timed out starting %s.",
3208 .finished_stop_job
= {
3209 [JOB_DONE
] = "Stopped %s.",
3210 [JOB_FAILED
] = "Stopped (with error) %s.",
3211 [JOB_TIMEOUT
] = "Timed out stopping %s.",