]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/service.c
shared: wtmp-utmp - don't clear store_wtmp in utmp_put_dead_process()
[thirdparty/systemd.git] / src / core / service.c
CommitLineData
d6c9574f 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
5cb5a6ff 2
a7334b09
LP
3/***
4 This file is part of systemd.
5
6 Copyright 2010 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
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
a7334b09
LP
11 (at your option) any later version.
12
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
5430f7f2 16 Lesser General Public License for more details.
a7334b09 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
5cb5a6ff 22#include <errno.h>
034c6ed7 23#include <signal.h>
2c4104f0
LP
24#include <dirent.h>
25#include <unistd.h>
5cb5a6ff 26
574634bc 27#include "async.h"
4b939747 28#include "manager.h"
87f0e418 29#include "unit.h"
5cb5a6ff
LP
30#include "service.h"
31#include "load-fragment.h"
32#include "load-dropin.h"
034c6ed7 33#include "log.h"
2c4104f0 34#include "strv.h"
9e2f7c11 35#include "unit-name.h"
41f9172f 36#include "unit-printf.h"
4139c1b2 37#include "dbus-service.h"
514f4ef5 38#include "special.h"
9a57c629 39#include "exit-status.h"
f6a6225e 40#include "def.h"
9eb977db 41#include "path-util.h"
f6a6225e 42#include "util.h"
7f110ff9 43#include "utf8.h"
4d1a6904 44#include "env-util.h"
a5c32cff 45#include "fileio.h"
718db961
LP
46#include "bus-error.h"
47#include "bus-util.h"
e44da745 48#include "bus-kernel.h"
034c6ed7 49
acbb0225 50static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
87f0e418
LP
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,
80876c20 56 [SERVICE_EXITED] = UNIT_ACTIVE,
032ff4af 57 [SERVICE_RELOAD] = UNIT_RELOADING,
87f0e418
LP
58 [SERVICE_STOP] = UNIT_DEACTIVATING,
59 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
60 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
61 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
62 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
63 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
fdf20a31 64 [SERVICE_FAILED] = UNIT_FAILED,
6124958c 65 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
034c6ed7 66};
5cb5a6ff 67
e056b01d
LP
68/* For Type=idle we never want to delay any other jobs, hence we
69 * consider idle jobs active as soon as we start working on them */
70static const UnitActiveState state_translation_table_idle[_SERVICE_STATE_MAX] = {
71 [SERVICE_DEAD] = UNIT_INACTIVE,
72 [SERVICE_START_PRE] = UNIT_ACTIVE,
73 [SERVICE_START] = UNIT_ACTIVE,
74 [SERVICE_START_POST] = UNIT_ACTIVE,
75 [SERVICE_RUNNING] = UNIT_ACTIVE,
76 [SERVICE_EXITED] = UNIT_ACTIVE,
77 [SERVICE_RELOAD] = UNIT_RELOADING,
78 [SERVICE_STOP] = UNIT_DEACTIVATING,
79 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
80 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
81 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
82 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
83 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
84 [SERVICE_FAILED] = UNIT_FAILED,
85 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
86};
87
718db961
LP
88static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata);
89static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata);
90static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata);
91
842129f5 92static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
308d72dc 93static void service_enter_reload_by_notify(Service *s);
842129f5 94
a16e1123
LP
95static void service_init(Unit *u) {
96 Service *s = SERVICE(u);
97
98 assert(u);
ac155bb8 99 assert(u->load_state == UNIT_STUB);
a16e1123 100
1f19a534
OS
101 s->timeout_start_usec = u->manager->default_timeout_start_usec;
102 s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
103 s->restart_usec = u->manager->default_restart_usec;
0b86feac 104 s->type = _SERVICE_TYPE_INVALID;
a16e1123 105 s->socket_fd = -1;
e44da745 106 s->bus_endpoint_fd = -1;
3185a36b 107 s->guess_main_pid = true;
a16e1123 108
085afe36 109 RATELIMIT_INIT(s->start_limit, u->manager->default_start_limit_interval, u->manager->default_start_limit_burst);
a16e1123
LP
110
111 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
112}
113
5e94833f
LP
114static void service_unwatch_control_pid(Service *s) {
115 assert(s);
116
117 if (s->control_pid <= 0)
118 return;
119
120 unit_unwatch_pid(UNIT(s), s->control_pid);
121 s->control_pid = 0;
122}
123
124static void service_unwatch_main_pid(Service *s) {
125 assert(s);
126
127 if (s->main_pid <= 0)
128 return;
129
130 unit_unwatch_pid(UNIT(s), s->main_pid);
131 s->main_pid = 0;
132}
133
3e52541e
MS
134static void service_unwatch_pid_file(Service *s) {
135 if (!s->pid_file_pathspec)
136 return;
137
8bb2d17d 138 log_debug_unit(UNIT(s)->id, "Stopping watch for %s's PID file %s", UNIT(s)->id, s->pid_file_pathspec->path);
718db961 139 path_spec_unwatch(s->pid_file_pathspec);
3e52541e
MS
140 path_spec_done(s->pid_file_pathspec);
141 free(s->pid_file_pathspec);
142 s->pid_file_pathspec = NULL;
143}
144
5925dd3c 145static int service_set_main_pid(Service *s, pid_t pid) {
e55224ca
LP
146 pid_t ppid;
147
5925dd3c
LP
148 assert(s);
149
150 if (pid <= 1)
151 return -EINVAL;
152
153 if (pid == getpid())
154 return -EINVAL;
155
7400b9d2
LP
156 if (s->main_pid == pid && s->main_pid_known)
157 return 0;
158
159 if (s->main_pid != pid) {
160 service_unwatch_main_pid(s);
161 exec_status_start(&s->main_exec_status, pid);
162 }
41efeaec 163
6dfa5494
LP
164 s->main_pid = pid;
165 s->main_pid_known = true;
166
167 if (get_parent_of_pid(pid, &ppid) >= 0 && ppid != getpid()) {
8bb2d17d 168 log_warning_unit(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);
6dfa5494
LP
169 s->main_pid_alien = true;
170 } else
171 s->main_pid_alien = false;
5925dd3c
LP
172
173 return 0;
174}
175
4f2d528d
LP
176static void service_close_socket_fd(Service *s) {
177 assert(s);
178
574634bc 179 s->socket_fd = asynchronous_close(s->socket_fd);
4f2d528d
LP
180}
181
6cf6bbc2
LP
182static void service_connection_unref(Service *s) {
183 assert(s);
184
9444b1f2 185 if (!UNIT_ISSET(s->accept_socket))
6cf6bbc2
LP
186 return;
187
57020a3a
LP
188 socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
189 unit_ref_unset(&s->accept_socket);
6cf6bbc2
LP
190}
191
a6927d7f
MO
192static void service_stop_watchdog(Service *s) {
193 assert(s);
194
718db961 195 s->watchdog_event_source = sd_event_source_unref(s->watchdog_event_source);
842129f5 196 s->watchdog_timestamp = DUAL_TIMESTAMP_NULL;
a6927d7f
MO
197}
198
842129f5 199static void service_start_watchdog(Service *s) {
bb242b7b
MO
200 int r;
201
202 assert(s);
203
842129f5 204 if (s->watchdog_usec <= 0)
bb242b7b
MO
205 return;
206
718db961
LP
207 if (s->watchdog_event_source) {
208 r = sd_event_source_set_time(s->watchdog_event_source, s->watchdog_timestamp.monotonic + s->watchdog_usec);
209 if (r < 0) {
210 log_warning_unit(UNIT(s)->id, "%s failed to reset watchdog timer: %s", UNIT(s)->id, strerror(-r));
211 return;
212 }
213
842129f5 214 r = sd_event_source_set_enabled(s->watchdog_event_source, SD_EVENT_ONESHOT);
c4ef3317 215 } else {
6a0f1f6d
LP
216 r = sd_event_add_time(
217 UNIT(s)->manager->event,
218 &s->watchdog_event_source,
219 CLOCK_MONOTONIC,
220 s->watchdog_timestamp.monotonic + s->watchdog_usec, 0,
221 service_dispatch_watchdog, s);
c4ef3317
LP
222 if (r < 0) {
223 log_warning_unit(UNIT(s)->id, "%s failed to add watchdog timer: %s", UNIT(s)->id, strerror(-r));
224 return;
225 }
226
227 /* Let's process everything else which might be a sign
228 * of living before we consider a service died. */
229 r = sd_event_source_set_priority(s->watchdog_event_source, SD_EVENT_PRIORITY_IDLE);
230 }
718db961 231
bb242b7b 232 if (r < 0)
842129f5 233 log_warning_unit(UNIT(s)->id, "%s failed to install watchdog timer: %s", UNIT(s)->id, strerror(-r));
bb242b7b
MO
234}
235
a6927d7f
MO
236static void service_reset_watchdog(Service *s) {
237 assert(s);
238
239 dual_timestamp_get(&s->watchdog_timestamp);
842129f5 240 service_start_watchdog(s);
a6927d7f
MO
241}
242
87f0e418
LP
243static void service_done(Unit *u) {
244 Service *s = SERVICE(u);
44d8db9e
LP
245
246 assert(s);
247
248 free(s->pid_file);
249 s->pid_file = NULL;
250
8c47c732
LP
251 free(s->status_text);
252 s->status_text = NULL;
253
efe6e7d3
MO
254 free(s->reboot_arg);
255 s->reboot_arg = NULL;
256
613b411c 257 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
e537352b 258 exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
44d8db9e 259 s->control_command = NULL;
867b3b7d 260 s->main_command = NULL;
44d8db9e 261
37520c1b
LP
262 exit_status_set_free(&s->restart_prevent_status);
263 exit_status_set_free(&s->restart_force_status);
264 exit_status_set_free(&s->success_status);
96342de6 265
44d8db9e
LP
266 /* This will leak a process, but at least no memory or any of
267 * our resources */
5e94833f
LP
268 service_unwatch_main_pid(s);
269 service_unwatch_control_pid(s);
3e52541e 270 service_unwatch_pid_file(s);
44d8db9e 271
05e343b7 272 if (s->bus_name) {
ac155bb8 273 unit_unwatch_bus_name(u, s->bus_name);
05e343b7
LP
274 free(s->bus_name);
275 s->bus_name = NULL;
276 }
277
e44da745 278 s->bus_endpoint_fd = safe_close(s->bus_endpoint_fd);
4f2d528d 279 service_close_socket_fd(s);
6cf6bbc2 280 service_connection_unref(s);
4f2d528d 281
57020a3a 282 unit_ref_unset(&s->accept_socket);
f976f3f6 283
bb242b7b
MO
284 service_stop_watchdog(s);
285
718db961
LP
286 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
287}
288
289static int service_arm_timer(Service *s, usec_t usec) {
290 int r;
291
292 assert(s);
293
718db961
LP
294 if (s->timer_event_source) {
295 r = sd_event_source_set_time(s->timer_event_source, now(CLOCK_MONOTONIC) + usec);
296 if (r < 0)
297 return r;
298
299 return sd_event_source_set_enabled(s->timer_event_source, SD_EVENT_ONESHOT);
300 }
301
6a0f1f6d
LP
302 return sd_event_add_time(
303 UNIT(s)->manager->event,
304 &s->timer_event_source,
305 CLOCK_MONOTONIC,
306 now(CLOCK_MONOTONIC) + usec, 0,
307 service_dispatch_timer, s);
44d8db9e
LP
308}
309
243b1432
LP
310static int service_verify(Service *s) {
311 assert(s);
312
1124fe6f 313 if (UNIT(s)->load_state != UNIT_LOADED)
243b1432
LP
314 return 0;
315
96fb8242
LP
316 if (!s->exec_command[SERVICE_EXEC_START] && !s->exec_command[SERVICE_EXEC_STOP]) {
317 log_error_unit(UNIT(s)->id, "%s lacks both ExecStart= and ExecStop= setting. Refusing.", UNIT(s)->id);
243b1432
LP
318 return -EINVAL;
319 }
320
96fb8242
LP
321 if (s->type != SERVICE_ONESHOT && !s->exec_command[SERVICE_EXEC_START]) {
322 log_error_unit(UNIT(s)->id, "%s has no ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
323 return -EINVAL;
324 }
325
326 if (!s->remain_after_exit && !s->exec_command[SERVICE_EXEC_START]) {
327 log_error_unit(UNIT(s)->id, "%s has no ExecStart= setting, which is only allowed for RemainAfterExit=yes services. Refusing.", UNIT(s)->id);
328 return -EINVAL;
329 }
330
331 if (s->type != SERVICE_ONESHOT && s->exec_command[SERVICE_EXEC_START]->command_next) {
332 log_error_unit(UNIT(s)->id, "%s has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
6cf6bbc2
LP
333 return -EINVAL;
334 }
335
b0693d30 336 if (s->type == SERVICE_ONESHOT && s->restart != SERVICE_RESTART_NO) {
37520c1b
LP
337 log_error_unit(UNIT(s)->id, "%s has Restart= setting other than no, which isn't allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
338 return -EINVAL;
339 }
340
55ebf98c 341 if (s->type == SERVICE_ONESHOT && !exit_status_set_is_empty(&s->restart_force_status)) {
37520c1b 342 log_error_unit(UNIT(s)->id, "%s has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
b0693d30
MW
343 return -EINVAL;
344 }
345
05e343b7 346 if (s->type == SERVICE_DBUS && !s->bus_name) {
ebc2259d 347 log_error_unit(UNIT(s)->id, "%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", UNIT(s)->id);
4d0e5dbd
LP
348 return -EINVAL;
349 }
350
7e2668c6 351 if (s->bus_name && s->type != SERVICE_DBUS)
ebc2259d 352 log_warning_unit(UNIT(s)->id, "%s has a D-Bus service name specified, but is not of type dbus. Ignoring.", UNIT(s)->id);
7e2668c6 353
ebc2259d
LP
354 if (s->exec_context.pam_name && !(s->kill_context.kill_mode == KILL_CONTROL_GROUP || s->kill_context.kill_mode == KILL_MIXED)) {
355 log_error_unit(UNIT(s)->id, "%s has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.", UNIT(s)->id);
05e343b7
LP
356 return -EINVAL;
357 }
358
243b1432
LP
359 return 0;
360}
361
a40eb732
LP
362static int service_add_default_dependencies(Service *s) {
363 int r;
364
365 assert(s);
366
367 /* Add a number of automatic dependencies useful for the
368 * majority of services. */
369
370 /* First, pull in base system */
8bb2d17d 371 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_BASIC_TARGET, NULL, true);
fccd44ec
KS
372 if (r < 0)
373 return r;
a40eb732
LP
374
375 /* Second, activate normal shutdown */
8bb2d17d 376 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
117dcc57 377 return r;
a40eb732
LP
378}
379
4dfc092a
LP
380static void service_fix_output(Service *s) {
381 assert(s);
382
383 /* If nothing has been explicitly configured, patch default
384 * output in. If input is socket/tty we avoid this however,
385 * since in that case we want output to default to the same
386 * place as we read input from. */
387
388 if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
389 s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
390 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 391 s->exec_context.std_error = UNIT(s)->manager->default_std_error;
4dfc092a
LP
392
393 if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
394 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 395 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
4dfc092a
LP
396}
397
e537352b 398static int service_load(Unit *u) {
e537352b 399 Service *s = SERVICE(u);
8bb2d17d 400 int r;
e537352b
LP
401
402 assert(s);
1e2e8133 403
5cb5a6ff 404 /* Load a .service file */
c2756a68
LP
405 r = unit_load_fragment(u);
406 if (r < 0)
5cb5a6ff
LP
407 return r;
408
23a177ef 409 /* Still nothing found? Then let's give up */
ac155bb8 410 if (u->load_state == UNIT_STUB)
23a177ef 411 return -ENOENT;
034c6ed7 412
23a177ef 413 /* This is a new unit? Then let's add in some extras */
ac155bb8 414 if (u->load_state == UNIT_LOADED) {
c2756a68
LP
415
416 /* We were able to load something, then let's add in
417 * the dropin directories. */
418 r = unit_load_dropin(u);
419 if (r < 0)
420 return r;
421
96fb8242
LP
422 if (s->type == _SERVICE_TYPE_INVALID) {
423 /* Figure out a type automatically */
424 if (s->bus_name)
425 s->type = SERVICE_DBUS;
426 else if (s->exec_command[SERVICE_EXEC_START])
427 s->type = SERVICE_SIMPLE;
428 else
429 s->type = SERVICE_ONESHOT;
430 }
0b86feac 431
d568a335
MS
432 /* Oneshot services have disabled start timeout by default */
433 if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
434 s->timeout_start_usec = 0;
98709151 435
4e2b0f9b
LP
436 service_fix_output(s);
437
598459ce
LP
438 r = unit_patch_contexts(u);
439 if (r < 0)
440 return r;
441
117dcc57
ZJS
442 r = unit_add_exec_dependencies(u, &s->exec_context);
443 if (r < 0)
23a177ef
LP
444 return r;
445
598459ce 446 r = unit_add_default_slice(u, &s->cgroup_context);
a016b922
LP
447 if (r < 0)
448 return r;
449
c952c6ec
LP
450 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
451 s->notify_access = NOTIFY_MAIN;
a40eb732 452
02c4ef9c
LP
453 if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
454 s->notify_access = NOTIFY_MAIN;
455
598459ce
LP
456 if (s->bus_name) {
457 r = unit_watch_bus_name(u, s->bus_name);
117dcc57 458 if (r < 0)
a40eb732 459 return r;
117dcc57 460 }
e06c73cc 461
598459ce
LP
462 if (u->default_dependencies) {
463 r = service_add_default_dependencies(s);
464 if (r < 0)
817e224b 465
598459ce
LP
466 return r;
467 }
8e274523
LP
468 }
469
243b1432 470 return service_verify(s);
034c6ed7
LP
471}
472
87f0e418 473static void service_dump(Unit *u, FILE *f, const char *prefix) {
5cb5a6ff 474 ServiceExecCommand c;
87f0e418 475 Service *s = SERVICE(u);
47be870b 476 const char *prefix2;
5cb5a6ff
LP
477
478 assert(s);
479
4c940960
LP
480 prefix = strempty(prefix);
481 prefix2 = strappenda(prefix, "\t");
44d8db9e 482
5cb5a6ff 483 fprintf(f,
81a2b7ce 484 "%sService State: %s\n"
f42806df
LP
485 "%sResult: %s\n"
486 "%sReload Result: %s\n"
81a2b7ce 487 "%sPermissionsStartOnly: %s\n"
8e274523 488 "%sRootDirectoryStartOnly: %s\n"
02ee865a 489 "%sRemainAfterExit: %s\n"
3185a36b 490 "%sGuessMainPID: %s\n"
c952c6ec 491 "%sType: %s\n"
2cf3143a 492 "%sRestart: %s\n"
308d72dc
LP
493 "%sNotifyAccess: %s\n"
494 "%sNotifyState: %s\n",
81a2b7ce 495 prefix, service_state_to_string(s->state),
f42806df
LP
496 prefix, service_result_to_string(s->result),
497 prefix, service_result_to_string(s->reload_result),
81a2b7ce 498 prefix, yes_no(s->permissions_start_only),
8e274523 499 prefix, yes_no(s->root_directory_start_only),
02ee865a 500 prefix, yes_no(s->remain_after_exit),
3185a36b 501 prefix, yes_no(s->guess_main_pid),
c952c6ec 502 prefix, service_type_to_string(s->type),
2cf3143a 503 prefix, service_restart_to_string(s->restart),
308d72dc
LP
504 prefix, notify_access_to_string(s->notify_access),
505 prefix, notify_state_to_string(s->notify_state));
5cb5a6ff 506
70123e68
LP
507 if (s->control_pid > 0)
508 fprintf(f,
ccd06097
ZJS
509 "%sControl PID: "PID_FMT"\n",
510 prefix, s->control_pid);
70123e68
LP
511
512 if (s->main_pid > 0)
513 fprintf(f,
ccd06097 514 "%sMain PID: "PID_FMT"\n"
6dfa5494
LP
515 "%sMain PID Known: %s\n"
516 "%sMain PID Alien: %s\n",
ccd06097 517 prefix, s->main_pid,
6dfa5494
LP
518 prefix, yes_no(s->main_pid_known),
519 prefix, yes_no(s->main_pid_alien));
70123e68 520
034c6ed7
LP
521 if (s->pid_file)
522 fprintf(f,
523 "%sPIDFile: %s\n",
524 prefix, s->pid_file);
525
05e343b7
LP
526 if (s->bus_name)
527 fprintf(f,
528 "%sBusName: %s\n"
529 "%sBus Name Good: %s\n",
530 prefix, s->bus_name,
531 prefix, yes_no(s->bus_name_good));
532
4819ff03 533 kill_context_dump(&s->kill_context, f, prefix);
5cb5a6ff
LP
534 exec_context_dump(&s->exec_context, f, prefix);
535
e537352b 536 for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
5cb5a6ff 537
44d8db9e
LP
538 if (!s->exec_command[c])
539 continue;
540
40d50879 541 fprintf(f, "%s-> %s:\n",
94f04347 542 prefix, service_exec_command_to_string(c));
44d8db9e
LP
543
544 exec_command_dump_list(s->exec_command[c], f, prefix2);
5cb5a6ff 545 }
44d8db9e 546
07459bb6 547#ifdef HAVE_SYSV_COMPAT
2c4104f0
LP
548 if (s->sysv_start_priority >= 0)
549 fprintf(f,
9fff8a1f
LP
550 "%sSysVStartPriority: %i\n",
551 prefix, s->sysv_start_priority);
07459bb6 552#endif
23a177ef 553
8c47c732
LP
554 if (s->status_text)
555 fprintf(f, "%sStatus Text: %s\n",
556 prefix, s->status_text);
5cb5a6ff
LP
557}
558
c5419d42 559static int service_load_pid_file(Service *s, bool may_warn) {
7fd1b19b 560 _cleanup_free_ char *k = NULL;
034c6ed7 561 int r;
5925dd3c 562 pid_t pid;
034c6ed7
LP
563
564 assert(s);
565
034c6ed7 566 if (!s->pid_file)
13230d5d 567 return -ENOENT;
034c6ed7 568
117dcc57
ZJS
569 r = read_one_line_file(s->pid_file, &k);
570 if (r < 0) {
c5419d42 571 if (may_warn)
8bb2d17d 572 log_info_unit(UNIT(s)->id, "PID file %s not readable (yet?) after %s.", s->pid_file, service_state_to_string(s->state));
034c6ed7 573 return r;
5375410b 574 }
034c6ed7 575
5925dd3c 576 r = parse_pid(k, &pid);
bc41f93e
ZJS
577 if (r < 0) {
578 if (may_warn)
8bb2d17d 579 log_info_unit(UNIT(s)->id, "Failed to read PID from file %s: %s", s->pid_file, strerror(-r));
5925dd3c 580 return r;
bc41f93e 581 }
406eaf93 582
9f5650ae 583 if (!pid_is_alive(pid)) {
c5419d42 584 if (may_warn)
9f5650ae 585 log_info_unit(UNIT(s)->id, "PID "PID_FMT" read from file %s does not exist or is a zombie.", pid, s->pid_file);
e10c9985
YS
586 return -ESRCH;
587 }
588
db01f8b3
MS
589 if (s->main_pid_known) {
590 if (pid == s->main_pid)
591 return 0;
592
8bb2d17d
LP
593 log_debug_unit(UNIT(s)->id, "Main PID changing: "PID_FMT" -> "PID_FMT, s->main_pid, pid);
594
db01f8b3
MS
595 service_unwatch_main_pid(s);
596 s->main_pid_known = false;
3a111838 597 } else
8bb2d17d 598 log_debug_unit(UNIT(s)->id, "Main PID loaded: "PID_FMT, pid);
db01f8b3 599
117dcc57
ZJS
600 r = service_set_main_pid(s, pid);
601 if (r < 0)
16f6025e
LP
602 return r;
603
117dcc57 604 r = unit_watch_pid(UNIT(s), pid);
bc41f93e 605 if (r < 0) {
5925dd3c 606 /* FIXME: we need to do something here */
8bb2d17d 607 log_warning_unit(UNIT(s)->id, "Failed to watch PID "PID_FMT" from service %s", pid, UNIT(s)->id);
5925dd3c 608 return r;
bc41f93e 609 }
034c6ed7
LP
610
611 return 0;
612}
613
4fbf50b3
LP
614static int service_search_main_pid(Service *s) {
615 pid_t pid;
616 int r;
617
618 assert(s);
619
3185a36b
LP
620 /* If we know it anyway, don't ever fallback to unreliable
621 * heuristics */
4fbf50b3
LP
622 if (s->main_pid_known)
623 return 0;
624
3185a36b
LP
625 if (!s->guess_main_pid)
626 return 0;
627
4fbf50b3
LP
628 assert(s->main_pid <= 0);
629
4ad49000 630 pid = unit_search_main_pid(UNIT(s));
117dcc57 631 if (pid <= 0)
4fbf50b3
LP
632 return -ENOENT;
633
8bb2d17d 634 log_debug_unit(UNIT(s)->id, "Main PID guessed: "PID_FMT, pid);
117dcc57
ZJS
635 r = service_set_main_pid(s, pid);
636 if (r < 0)
4fbf50b3
LP
637 return r;
638
117dcc57 639 r = unit_watch_pid(UNIT(s), pid);
8bb2d17d 640 if (r < 0) {
4fbf50b3 641 /* FIXME: we need to do something here */
8bb2d17d
LP
642 log_warning_unit(UNIT(s)->id, "Failed to watch PID "PID_FMT" from service %s", pid, UNIT(s)->id);
643 return r;
644 }
645
646 return 0;
4fbf50b3
LP
647}
648
034c6ed7
LP
649static void service_set_state(Service *s, ServiceState state) {
650 ServiceState old_state;
e056b01d 651 const UnitActiveState *table;
842129f5 652
5cb5a6ff
LP
653 assert(s);
654
e056b01d
LP
655 table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
656
034c6ed7 657 old_state = s->state;
5cb5a6ff 658 s->state = state;
034c6ed7 659
3a111838
MS
660 service_unwatch_pid_file(s);
661
842129f5
LP
662 if (!IN_SET(state,
663 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
664 SERVICE_RELOAD,
bf108e55
LP
665 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
666 SERVICE_STOP_POST,
842129f5
LP
667 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
668 SERVICE_AUTO_RESTART))
718db961 669 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 670
842129f5
LP
671 if (!IN_SET(state,
672 SERVICE_START, SERVICE_START_POST,
673 SERVICE_RUNNING, SERVICE_RELOAD,
bf108e55
LP
674 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
675 SERVICE_STOP_POST,
676 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 677 service_unwatch_main_pid(s);
867b3b7d
LP
678 s->main_command = NULL;
679 }
034c6ed7 680
842129f5
LP
681 if (!IN_SET(state,
682 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
683 SERVICE_RELOAD,
bf108e55
LP
684 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
685 SERVICE_STOP_POST,
842129f5 686 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 687 service_unwatch_control_pid(s);
034c6ed7 688 s->control_command = NULL;
a16e1123 689 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
e537352b 690 }
034c6ed7 691
a911bb9a
LP
692 if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
693 unit_unwatch_all_pids(UNIT(s));
694
842129f5
LP
695 if (!IN_SET(state,
696 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
697 SERVICE_RUNNING, SERVICE_RELOAD,
698 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
699 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
1124fe6f 700 !(state == SERVICE_DEAD && UNIT(s)->job)) {
4f2d528d 701 service_close_socket_fd(s);
6cf6bbc2
LP
702 service_connection_unref(s);
703 }
4f2d528d 704
7596e9e1 705 if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
a6927d7f
MO
706 service_stop_watchdog(s);
707
f6023656
LP
708 /* For the inactive states unit_notify() will trim the cgroup,
709 * but for exit we have to do that ourselves... */
1124fe6f 710 if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
4ad49000 711 unit_destroy_cgroup(UNIT(s));
f6023656 712
9cd86184
OB
713 /* For remain_after_exit services, let's see if we can "release" the
714 * hold on the console, since unit_notify() only does that in case of
715 * change of state */
f49650ce
LP
716 if (state == SERVICE_EXITED &&
717 s->remain_after_exit &&
9cd86184 718 UNIT(s)->manager->n_on_console > 0) {
f49650ce
LP
719
720 ExecContext *ec;
721
722 ec = unit_get_exec_context(UNIT(s));
9cd86184
OB
723 if (ec && exec_context_may_touch_console(ec)) {
724 Manager *m = UNIT(s)->manager;
725
726 m->n_on_console --;
727 if (m->n_on_console == 0)
728 /* unset no_console_output flag, since the console is free */
729 m->no_console_output = false;
730 }
731 }
732
e537352b 733 if (old_state != state)
842129f5 734 log_debug_unit(UNIT(s)->id, "%s changed %s -> %s", UNIT(s)->id, service_state_to_string(old_state), service_state_to_string(state));
acbb0225 735
e056b01d 736 unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
f42806df 737 s->reload_result = SERVICE_SUCCESS;
034c6ed7
LP
738}
739
a16e1123
LP
740static int service_coldplug(Unit *u) {
741 Service *s = SERVICE(u);
742 int r;
743
744 assert(s);
745 assert(s->state == SERVICE_DEAD);
746
747 if (s->deserialized_state != s->state) {
748
bf108e55
LP
749 if (IN_SET(s->deserialized_state,
750 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
751 SERVICE_RELOAD,
752 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
753 SERVICE_STOP_POST,
754 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
92c1622e
LP
755
756 usec_t k;
6c12b52e 757
bf108e55 758 k = IN_SET(s->deserialized_state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec;
e558336f 759
92c1622e
LP
760 /* For the start/stop timeouts 0 means off */
761 if (k > 0) {
762 r = service_arm_timer(s, k);
36697dc0 763 if (r < 0)
e558336f
LP
764 return r;
765 }
766 }
a16e1123 767
92c1622e
LP
768 if (s->deserialized_state == SERVICE_AUTO_RESTART) {
769
770 /* The restart timeouts 0 means immediately */
771 r = service_arm_timer(s, s->restart_usec);
772 if (r < 0)
773 return r;
774 }
775
9f5650ae 776 if (pid_is_unwaited(s->main_pid) &&
bf108e55
LP
777 ((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
778 IN_SET(s->deserialized_state,
779 SERVICE_START, SERVICE_START_POST,
780 SERVICE_RUNNING, SERVICE_RELOAD,
781 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
782 SERVICE_STOP_POST,
783 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
784 r = unit_watch_pid(UNIT(s), s->main_pid);
785 if (r < 0)
786 return r;
787 }
a16e1123 788
9f5650ae 789 if (pid_is_unwaited(s->control_pid) &&
bf108e55
LP
790 IN_SET(s->deserialized_state,
791 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
792 SERVICE_RELOAD,
793 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
794 SERVICE_STOP_POST,
795 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
796 r = unit_watch_pid(UNIT(s), s->control_pid);
797 if (r < 0)
798 return r;
799 }
a16e1123 800
a911bb9a
LP
801 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
802 unit_watch_all_pids(UNIT(s));
803
842129f5
LP
804 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
805 service_start_watchdog(s);
bb242b7b 806
a16e1123
LP
807 service_set_state(s, s->deserialized_state);
808 }
92c1622e 809
a16e1123
LP
810 return 0;
811}
812
44d8db9e
LP
813static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
814 Iterator i;
815 int r;
816 int *rfds = NULL;
817 unsigned rn_fds = 0;
57020a3a 818 Unit *u;
44d8db9e
LP
819
820 assert(s);
821 assert(fds);
822 assert(n_fds);
823
6cf6bbc2
LP
824 if (s->socket_fd >= 0)
825 return 0;
826
1124fe6f 827 SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
44d8db9e
LP
828 int *cfds;
829 unsigned cn_fds;
57020a3a
LP
830 Socket *sock;
831
ac155bb8 832 if (u->type != UNIT_SOCKET)
57020a3a
LP
833 continue;
834
835 sock = SOCKET(u);
44d8db9e 836
117dcc57
ZJS
837 r = socket_collect_fds(sock, &cfds, &cn_fds);
838 if (r < 0)
44d8db9e
LP
839 goto fail;
840
841 if (!cfds)
842 continue;
843
844 if (!rfds) {
845 rfds = cfds;
846 rn_fds = cn_fds;
847 } else {
848 int *t;
849
117dcc57
ZJS
850 t = new(int, rn_fds+cn_fds);
851 if (!t) {
44d8db9e
LP
852 free(cfds);
853 r = -ENOMEM;
854 goto fail;
855 }
856
9c1b183c
LP
857 memcpy(t, rfds, rn_fds * sizeof(int));
858 memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
44d8db9e
LP
859 free(rfds);
860 free(cfds);
861
862 rfds = t;
863 rn_fds = rn_fds+cn_fds;
864 }
865 }
866
867 *fds = rfds;
868 *n_fds = rn_fds;
3e33402a 869
44d8db9e
LP
870 return 0;
871
872fail:
873 free(rfds);
3e33402a 874
44d8db9e
LP
875 return r;
876}
877
81a2b7ce
LP
878static int service_spawn(
879 Service *s,
880 ExecCommand *c,
21b2ce39 881 usec_t timeout,
81a2b7ce
LP
882 bool pass_fds,
883 bool apply_permissions,
884 bool apply_chroot,
1e3ad081 885 bool apply_tty_stdin,
c952c6ec 886 bool set_notify_socket,
ecedd90f 887 bool is_control,
81a2b7ce
LP
888 pid_t *_pid) {
889
034c6ed7
LP
890 pid_t pid;
891 int r;
117dcc57 892 int *fds = NULL;
7fd1b19b 893 _cleanup_free_ int *fdsbuf = NULL;
2105e76a 894 unsigned n_fds = 0, n_env = 0;
e44da745 895 _cleanup_free_ char *bus_endpoint_path = NULL;
7fd1b19b 896 _cleanup_strv_free_ char
117dcc57 897 **argv = NULL, **final_env = NULL, **our_env = NULL;
4ad49000 898 const char *path;
9fa95f85
DM
899 ExecParameters exec_params = {
900 .apply_permissions = apply_permissions,
901 .apply_chroot = apply_chroot,
902 .apply_tty_stdin = apply_tty_stdin,
e44da745 903 .bus_endpoint_fd = -1,
9fa95f85 904 };
034c6ed7
LP
905
906 assert(s);
907 assert(c);
908 assert(_pid);
909
4ad49000
LP
910 unit_realize_cgroup(UNIT(s));
911
613b411c
LP
912 r = unit_setup_exec_runtime(UNIT(s));
913 if (r < 0)
914 goto fail;
915
6cf6bbc2
LP
916 if (pass_fds ||
917 s->exec_context.std_input == EXEC_INPUT_SOCKET ||
918 s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
919 s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
920
4f2d528d
LP
921 if (s->socket_fd >= 0) {
922 fds = &s->socket_fd;
923 n_fds = 1;
6cf6bbc2 924 } else {
117dcc57
ZJS
925 r = service_collect_fds(s, &fdsbuf, &n_fds);
926 if (r < 0)
6cf6bbc2
LP
927 goto fail;
928
929 fds = fdsbuf;
930 }
4f2d528d 931 }
44d8db9e 932
21b2ce39
LP
933 if (timeout > 0) {
934 r = service_arm_timer(s, timeout);
92c1622e
LP
935 if (r < 0)
936 goto fail;
937 } else
938 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 939
19f6d710
LP
940 r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
941 if (r < 0)
9e2f7c11 942 goto fail;
9e2f7c11 943
09812eb7 944 our_env = new0(char*, 4);
97ae63e2 945 if (!our_env) {
2105e76a
LP
946 r = -ENOMEM;
947 goto fail;
948 }
c952c6ec 949
2105e76a 950 if (set_notify_socket)
1124fe6f 951 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
c952c6ec
LP
952 r = -ENOMEM;
953 goto fail;
954 }
955
2105e76a 956 if (s->main_pid > 0)
ccd06097 957 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
c952c6ec
LP
958 r = -ENOMEM;
959 goto fail;
960 }
2105e76a 961
4ad49000 962 if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
ccd06097 963 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
97ae63e2
LP
964 r = -ENOMEM;
965 goto fail;
966 }
967
968 final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
969 if (!final_env) {
2105e76a
LP
970 r = -ENOMEM;
971 goto fail;
972 }
c952c6ec 973
4ad49000
LP
974 if (is_control && UNIT(s)->cgroup_path) {
975 path = strappenda(UNIT(s)->cgroup_path, "/control");
976 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
977 } else
978 path = UNIT(s)->cgroup_path;
979
e44da745
DM
980#ifdef ENABLE_KDBUS
981 if (s->exec_context.bus_endpoint) {
982 r = bus_kernel_create_endpoint(UNIT(s)->manager->running_as == SYSTEMD_SYSTEM ? "system" : "user",
983 UNIT(s)->id, &bus_endpoint_path);
984 if (r < 0)
985 goto fail;
986
987 /* Pass the fd to the exec_params so that the child process can upload the policy.
988 * Keep a reference to the fd in the service, so the endpoint is kept alive as long
989 * as the service is running. */
990 exec_params.bus_endpoint_fd = s->bus_endpoint_fd = r;
991 }
992#endif
993
9fa95f85
DM
994 exec_params.argv = argv;
995 exec_params.fds = fds;
996 exec_params.n_fds = n_fds;
997 exec_params.environment = final_env;
998 exec_params.confirm_spawn = UNIT(s)->manager->confirm_spawn;
999 exec_params.cgroup_supported = UNIT(s)->manager->cgroup_supported;
1000 exec_params.cgroup_path = path;
1001 exec_params.runtime_prefix = manager_get_runtime_prefix(UNIT(s)->manager);
1002 exec_params.unit_id = UNIT(s)->id;
1003 exec_params.watchdog_usec = s->watchdog_usec;
e44da745 1004 exec_params.bus_endpoint_path = bus_endpoint_path;
9fa95f85
DM
1005 if (s->type == SERVICE_IDLE)
1006 exec_params.idle_pipe = UNIT(s)->manager->idle_pipe;
1007
9e2f7c11 1008 r = exec_spawn(c,
9e2f7c11 1009 &s->exec_context,
9fa95f85 1010 &exec_params,
613b411c 1011 s->exec_runtime,
9e2f7c11 1012 &pid);
9e2f7c11 1013 if (r < 0)
034c6ed7
LP
1014 goto fail;
1015
117dcc57
ZJS
1016 r = unit_watch_pid(UNIT(s), pid);
1017 if (r < 0)
034c6ed7
LP
1018 /* FIXME: we need to do something here */
1019 goto fail;
1020
1021 *_pid = pid;
1022
5cb5a6ff 1023 return 0;
034c6ed7
LP
1024
1025fail:
1026 if (timeout)
718db961 1027 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7
LP
1028
1029 return r;
1030}
1031
80876c20
LP
1032static int main_pid_good(Service *s) {
1033 assert(s);
1034
1035 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1036 * don't know */
1037
1038 /* If we know the pid file, then lets just check if it is
1039 * still valid */
6dfa5494
LP
1040 if (s->main_pid_known) {
1041
1042 /* If it's an alien child let's check if it is still
1043 * alive ... */
62220cf7 1044 if (s->main_pid_alien && s->main_pid > 0)
9f5650ae 1045 return pid_is_alive(s->main_pid);
6dfa5494
LP
1046
1047 /* .. otherwise assume we'll get a SIGCHLD for it,
1048 * which we really should wait for to collect exit
1049 * status and code */
80876c20 1050 return s->main_pid > 0;
6dfa5494 1051 }
80876c20
LP
1052
1053 /* We don't know the pid */
1054 return -EAGAIN;
1055}
1056
44a6b1b6 1057_pure_ static int control_pid_good(Service *s) {
80876c20
LP
1058 assert(s);
1059
1060 return s->control_pid > 0;
1061}
1062
1063static int cgroup_good(Service *s) {
1064 int r;
1065
1066 assert(s);
1067
4ad49000
LP
1068 if (!UNIT(s)->cgroup_path)
1069 return 0;
1070
1071 r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
117dcc57 1072 if (r < 0)
80876c20
LP
1073 return r;
1074
1075 return !r;
1076}
1077
f42806df 1078static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
034c6ed7
LP
1079 int r;
1080 assert(s);
1081
f42806df
LP
1082 if (f != SERVICE_SUCCESS)
1083 s->result = f;
034c6ed7 1084
0c7f15b3
MS
1085 service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1086
2928b0a8
LP
1087 if (s->result != SERVICE_SUCCESS) {
1088 log_warning_unit(UNIT(s)->id, "%s failed.", UNIT(s)->id);
1089 failure_action(UNIT(s)->manager, s->failure_action, s->reboot_arg);
1090 }
93ae25e6 1091
034c6ed7 1092 if (allow_restart &&
47342320 1093 !s->forbid_restart &&
034c6ed7 1094 (s->restart == SERVICE_RESTART_ALWAYS ||
f42806df
LP
1095 (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1096 (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
6cfe2fde 1097 (s->restart == SERVICE_RESTART_ON_ABNORMAL && !IN_SET(s->result, SERVICE_SUCCESS, SERVICE_FAILURE_EXIT_CODE)) ||
dc99a976 1098 (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
37520c1b 1099 (s->restart == SERVICE_RESTART_ON_ABORT && IN_SET(s->result, SERVICE_FAILURE_SIGNAL, SERVICE_FAILURE_CORE_DUMP)) ||
3e2d435b 1100 (s->main_exec_status.code == CLD_EXITED && set_contains(s->restart_force_status.status, INT_TO_PTR(s->main_exec_status.status))) ||
37520c1b 1101 (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)))) &&
3e2d435b 1102 (s->main_exec_status.code != CLD_EXITED || !set_contains(s->restart_prevent_status.status, INT_TO_PTR(s->main_exec_status.status))) &&
37520c1b 1103 (!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)))) {
034c6ed7 1104
718db961 1105 r = service_arm_timer(s, s->restart_usec);
f42806df 1106 if (r < 0)
034c6ed7
LP
1107 goto fail;
1108
1109 service_set_state(s, SERVICE_AUTO_RESTART);
0c7f15b3 1110 }
034c6ed7 1111
47342320
LP
1112 s->forbid_restart = false;
1113
e66cf1a3 1114 /* We want fresh tmpdirs in case service is started again immediately */
613b411c
LP
1115 exec_runtime_destroy(s->exec_runtime);
1116 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
c17ec25e 1117
e66cf1a3
LP
1118 /* Also, remove the runtime directory in */
1119 exec_context_destroy_runtime_directory(&s->exec_context, manager_get_runtime_prefix(UNIT(s)->manager));
1120
9285c9ff
LN
1121 /* Try to delete the pid file. At this point it will be
1122 * out-of-date, and some software might be confused by it, so
1123 * let's remove it. */
1124 if (s->pid_file)
1125 unlink_noerrno(s->pid_file);
1126
034c6ed7
LP
1127 return;
1128
1129fail:
8bb2d17d 1130 log_warning_unit(UNIT(s)->id, "%s failed to run install restart timer: %s", UNIT(s)->id, strerror(-r));
f42806df 1131 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1132}
1133
f42806df 1134static void service_enter_stop_post(Service *s, ServiceResult f) {
034c6ed7
LP
1135 int r;
1136 assert(s);
1137
f42806df
LP
1138 if (f != SERVICE_SUCCESS)
1139 s->result = f;
034c6ed7 1140
5e94833f 1141 service_unwatch_control_pid(s);
a911bb9a 1142 unit_watch_all_pids(UNIT(s));
5e94833f 1143
117dcc57
ZJS
1144 s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1145 if (s->control_command) {
867b3b7d
LP
1146 s->control_command_id = SERVICE_EXEC_STOP_POST;
1147
ecedd90f
LP
1148 r = service_spawn(s,
1149 s->control_command,
21b2ce39 1150 s->timeout_stop_usec,
ecedd90f
LP
1151 false,
1152 !s->permissions_start_only,
1153 !s->root_directory_start_only,
1154 true,
1155 false,
1156 true,
1157 &s->control_pid);
1158 if (r < 0)
034c6ed7
LP
1159 goto fail;
1160
80876c20
LP
1161 service_set_state(s, SERVICE_STOP_POST);
1162 } else
ac84d1fb 1163 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1164
1165 return;
1166
1167fail:
8bb2d17d 1168 log_warning_unit(UNIT(s)->id, "%s failed to run 'stop-post' task: %s", UNIT(s)->id, strerror(-r));
f42806df 1169 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1170}
1171
f42806df 1172static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
034c6ed7 1173 int r;
034c6ed7
LP
1174
1175 assert(s);
1176
f42806df
LP
1177 if (f != SERVICE_SUCCESS)
1178 s->result = f;
034c6ed7 1179
a911bb9a
LP
1180 unit_watch_all_pids(UNIT(s));
1181
cd2086fe
LP
1182 r = unit_kill_context(
1183 UNIT(s),
1184 &s->kill_context,
1185 state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
1186 s->main_pid,
1187 s->control_pid,
1188 s->main_pid_alien);
ac84d1fb 1189
cd2086fe
LP
1190 if (r < 0)
1191 goto fail;
034c6ed7 1192
cd2086fe 1193 if (r > 0) {
d568a335 1194 if (s->timeout_stop_usec > 0) {
718db961 1195 r = service_arm_timer(s, s->timeout_stop_usec);
d568a335 1196 if (r < 0)
e558336f 1197 goto fail;
d568a335 1198 }
d6ea93e3 1199
80876c20 1200 service_set_state(s, state);
ac84d1fb
LP
1201 } else if (state == SERVICE_STOP_SIGTERM)
1202 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1203 else if (state == SERVICE_STOP_SIGKILL)
f42806df 1204 service_enter_stop_post(s, SERVICE_SUCCESS);
ac84d1fb
LP
1205 else if (state == SERVICE_FINAL_SIGTERM)
1206 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
80876c20 1207 else
f42806df 1208 service_enter_dead(s, SERVICE_SUCCESS, true);
034c6ed7
LP
1209
1210 return;
1211
1212fail:
8bb2d17d 1213 log_warning_unit(UNIT(s)->id, "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
034c6ed7 1214
80876c20 1215 if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
f42806df 1216 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
034c6ed7 1217 else
f42806df 1218 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1219}
1220
308d72dc
LP
1221static void service_enter_stop_by_notify(Service *s) {
1222 assert(s);
1223
1224 unit_watch_all_pids(UNIT(s));
1225
1226 if (s->timeout_stop_usec > 0)
1227 service_arm_timer(s, s->timeout_stop_usec);
1228
1229 service_set_state(s, SERVICE_STOP);
1230}
1231
f42806df 1232static void service_enter_stop(Service *s, ServiceResult f) {
034c6ed7 1233 int r;
5925dd3c 1234
034c6ed7
LP
1235 assert(s);
1236
f42806df
LP
1237 if (f != SERVICE_SUCCESS)
1238 s->result = f;
034c6ed7 1239
5e94833f 1240 service_unwatch_control_pid(s);
a911bb9a 1241 unit_watch_all_pids(UNIT(s));
5e94833f 1242
117dcc57
ZJS
1243 s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1244 if (s->control_command) {
867b3b7d
LP
1245 s->control_command_id = SERVICE_EXEC_STOP;
1246
ecedd90f
LP
1247 r = service_spawn(s,
1248 s->control_command,
21b2ce39 1249 s->timeout_stop_usec,
ecedd90f
LP
1250 false,
1251 !s->permissions_start_only,
1252 !s->root_directory_start_only,
1253 false,
1254 false,
1255 true,
1256 &s->control_pid);
1257 if (r < 0)
034c6ed7
LP
1258 goto fail;
1259
80876c20
LP
1260 service_set_state(s, SERVICE_STOP);
1261 } else
f42806df 1262 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1263
1264 return;
1265
1266fail:
8bb2d17d 1267 log_warning_unit(UNIT(s)->id, "%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
f42806df 1268 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1269}
1270
f42806df 1271static void service_enter_running(Service *s, ServiceResult f) {
4eab639f 1272 int main_pid_ok, cgroup_ok;
80876c20
LP
1273 assert(s);
1274
f42806df
LP
1275 if (f != SERVICE_SUCCESS)
1276 s->result = f;
80876c20 1277
4eab639f
LP
1278 main_pid_ok = main_pid_good(s);
1279 cgroup_ok = cgroup_good(s);
1280
1281 if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
308d72dc
LP
1282 (s->bus_name_good || s->type != SERVICE_DBUS)) {
1283
1284 /* If there are any queued up sd_notify()
1285 * notifications, process them now */
1286 if (s->notify_state == NOTIFY_RELOADING)
1287 service_enter_reload_by_notify(s);
1288 else if (s->notify_state == NOTIFY_STOPPING)
1289 service_enter_stop_by_notify(s);
1290 else
1291 service_set_state(s, SERVICE_RUNNING);
1292
1293 } else if (s->remain_after_exit)
80876c20
LP
1294 service_set_state(s, SERVICE_EXITED);
1295 else
f42806df 1296 service_enter_stop(s, SERVICE_SUCCESS);
80876c20
LP
1297}
1298
034c6ed7
LP
1299static void service_enter_start_post(Service *s) {
1300 int r;
1301 assert(s);
1302
5e94833f 1303 service_unwatch_control_pid(s);
842129f5 1304 service_reset_watchdog(s);
bb242b7b 1305
117dcc57
ZJS
1306 s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
1307 if (s->control_command) {
867b3b7d
LP
1308 s->control_command_id = SERVICE_EXEC_START_POST;
1309
ecedd90f
LP
1310 r = service_spawn(s,
1311 s->control_command,
21b2ce39 1312 s->timeout_start_usec,
ecedd90f
LP
1313 false,
1314 !s->permissions_start_only,
1315 !s->root_directory_start_only,
1316 false,
1317 false,
1318 true,
1319 &s->control_pid);
1320 if (r < 0)
034c6ed7
LP
1321 goto fail;
1322
80876c20
LP
1323 service_set_state(s, SERVICE_START_POST);
1324 } else
f42806df 1325 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1326
1327 return;
1328
1329fail:
8bb2d17d 1330 log_warning_unit(UNIT(s)->id, "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
f42806df 1331 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1332}
1333
4ad49000
LP
1334static void service_kill_control_processes(Service *s) {
1335 char *p;
1336
1337 if (!UNIT(s)->cgroup_path)
1338 return;
1339
1340 p = strappenda(UNIT(s)->cgroup_path, "/control");
4ad49000
LP
1341 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
1342}
1343
034c6ed7 1344static void service_enter_start(Service *s) {
4ad49000 1345 ExecCommand *c;
034c6ed7
LP
1346 pid_t pid;
1347 int r;
1348
1349 assert(s);
1350
41efeaec
LP
1351 service_unwatch_control_pid(s);
1352 service_unwatch_main_pid(s);
80876c20 1353
8f53a7b8
LP
1354 /* We want to ensure that nobody leaks processes from
1355 * START_PRE here, so let's go on a killing spree, People
1356 * should not spawn long running processes from START_PRE. */
4ad49000 1357 service_kill_control_processes(s);
8f53a7b8 1358
867b3b7d
LP
1359 if (s->type == SERVICE_FORKING) {
1360 s->control_command_id = SERVICE_EXEC_START;
1361 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
1362
1363 s->main_command = NULL;
1364 } else {
1365 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1366 s->control_command = NULL;
1367
1368 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
1369 }
34e9ba66 1370
96fb8242
LP
1371 if (!c) {
1372 assert(s->type == SERVICE_ONESHOT);
1373 service_enter_start_post(s);
1374 return;
1375 }
1376
ecedd90f
LP
1377 r = service_spawn(s,
1378 c,
21b2ce39 1379 IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_NOTIFY, SERVICE_ONESHOT) ? s->timeout_start_usec : 0,
ecedd90f
LP
1380 true,
1381 true,
1382 true,
1383 true,
1384 s->notify_access != NOTIFY_NONE,
1385 false,
1386 &pid);
1387 if (r < 0)
034c6ed7
LP
1388 goto fail;
1389
f2b68789 1390 if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
034c6ed7
LP
1391 /* For simple services we immediately start
1392 * the START_POST binaries. */
1393
5925dd3c 1394 service_set_main_pid(s, pid);
034c6ed7
LP
1395 service_enter_start_post(s);
1396
1397 } else if (s->type == SERVICE_FORKING) {
1398
1399 /* For forking services we wait until the start
1400 * process exited. */
1401
e55224ca 1402 s->control_pid = pid;
80876c20
LP
1403 service_set_state(s, SERVICE_START);
1404
34e9ba66 1405 } else if (s->type == SERVICE_ONESHOT ||
8c47c732
LP
1406 s->type == SERVICE_DBUS ||
1407 s->type == SERVICE_NOTIFY) {
7d55e835 1408
34e9ba66 1409 /* For oneshot services we wait until the start
7d55e835
LP
1410 * process exited, too, but it is our main process. */
1411
05e343b7 1412 /* For D-Bus services we know the main pid right away,
8c47c732
LP
1413 * but wait for the bus name to appear on the
1414 * bus. Notify services are similar. */
05e343b7 1415
5925dd3c 1416 service_set_main_pid(s, pid);
80876c20 1417 service_set_state(s, SERVICE_START);
034c6ed7
LP
1418 } else
1419 assert_not_reached("Unknown service type");
1420
1421 return;
1422
1423fail:
8bb2d17d 1424 log_warning_unit(UNIT(s)->id, "%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
f42806df 1425 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1426}
1427
1428static void service_enter_start_pre(Service *s) {
1429 int r;
1430
1431 assert(s);
1432
5e94833f
LP
1433 service_unwatch_control_pid(s);
1434
117dcc57
ZJS
1435 s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
1436 if (s->control_command) {
8f53a7b8
LP
1437 /* Before we start anything, let's clear up what might
1438 * be left from previous runs. */
4ad49000 1439 service_kill_control_processes(s);
8f53a7b8 1440
867b3b7d
LP
1441 s->control_command_id = SERVICE_EXEC_START_PRE;
1442
ecedd90f
LP
1443 r = service_spawn(s,
1444 s->control_command,
21b2ce39 1445 s->timeout_start_usec,
ecedd90f
LP
1446 false,
1447 !s->permissions_start_only,
1448 !s->root_directory_start_only,
1449 true,
1450 false,
1451 true,
1452 &s->control_pid);
1453 if (r < 0)
034c6ed7
LP
1454 goto fail;
1455
80876c20
LP
1456 service_set_state(s, SERVICE_START_PRE);
1457 } else
034c6ed7
LP
1458 service_enter_start(s);
1459
1460 return;
1461
1462fail:
37520c1b 1463 log_warning_unit(UNIT(s)->id, "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
f42806df 1464 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1465}
1466
1467static void service_enter_restart(Service *s) {
718db961 1468 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
034c6ed7 1469 int r;
398ef8ba 1470
034c6ed7
LP
1471 assert(s);
1472
a8bb2e65
LP
1473 if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
1474 /* Don't restart things if we are going down anyway */
37520c1b 1475 log_info_unit(UNIT(s)->id, "Stop job pending for unit, delaying automatic restart.");
2edfa366 1476
718db961 1477 r = service_arm_timer(s, s->restart_usec);
a8bb2e65 1478 if (r < 0)
2edfa366 1479 goto fail;
feae8adb
DW
1480
1481 return;
2edfa366
LP
1482 }
1483
48bb5876
DW
1484 /* Any units that are bound to this service must also be
1485 * restarted. We use JOB_RESTART (instead of the more obvious
1486 * JOB_START) here so that those dependency jobs will be added
1487 * as well. */
1488 r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
1489 if (r < 0)
034c6ed7
LP
1490 goto fail;
1491
a8bb2e65
LP
1492 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
1493 * it will be canceled as part of the service_stop() call that
1494 * is executed as part of JOB_RESTART. */
1495
37520c1b 1496 log_debug_unit(UNIT(s)->id, "%s scheduled restart job.", UNIT(s)->id);
034c6ed7
LP
1497 return;
1498
1499fail:
308d72dc 1500 log_warning_unit(UNIT(s)->id, "%s failed to schedule restart job: %s", UNIT(s)->id, bus_error_message(&error, -r));
f42806df 1501 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1502}
1503
308d72dc
LP
1504static void service_enter_reload_by_notify(Service *s) {
1505 assert(s);
1506
1507 if (s->timeout_start_usec > 0)
1508 service_arm_timer(s, s->timeout_start_usec);
1509
1510 service_set_state(s, SERVICE_RELOAD);
1511}
1512
034c6ed7
LP
1513static void service_enter_reload(Service *s) {
1514 int r;
1515
1516 assert(s);
1517
5e94833f
LP
1518 service_unwatch_control_pid(s);
1519
117dcc57
ZJS
1520 s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
1521 if (s->control_command) {
867b3b7d
LP
1522 s->control_command_id = SERVICE_EXEC_RELOAD;
1523
ecedd90f
LP
1524 r = service_spawn(s,
1525 s->control_command,
21b2ce39 1526 s->timeout_start_usec,
ecedd90f
LP
1527 false,
1528 !s->permissions_start_only,
1529 !s->root_directory_start_only,
1530 false,
1531 false,
1532 true,
1533 &s->control_pid);
1534 if (r < 0)
034c6ed7
LP
1535 goto fail;
1536
80876c20
LP
1537 service_set_state(s, SERVICE_RELOAD);
1538 } else
f42806df 1539 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1540
1541 return;
1542
1543fail:
8bb2d17d 1544 log_warning_unit(UNIT(s)->id, "%s failed to run 'reload' task: %s", UNIT(s)->id, strerror(-r));
f42806df
LP
1545 s->reload_result = SERVICE_FAILURE_RESOURCES;
1546 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1547}
1548
f42806df 1549static void service_run_next_control(Service *s) {
034c6ed7
LP
1550 int r;
1551
1552 assert(s);
1553 assert(s->control_command);
1554 assert(s->control_command->command_next);
1555
34e9ba66 1556 assert(s->control_command_id != SERVICE_EXEC_START);
034c6ed7 1557
34e9ba66 1558 s->control_command = s->control_command->command_next;
5e94833f
LP
1559 service_unwatch_control_pid(s);
1560
ecedd90f
LP
1561 r = service_spawn(s,
1562 s->control_command,
21b2ce39 1563 IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec,
ecedd90f
LP
1564 false,
1565 !s->permissions_start_only,
1566 !s->root_directory_start_only,
1567 s->control_command_id == SERVICE_EXEC_START_PRE ||
1568 s->control_command_id == SERVICE_EXEC_STOP_POST,
1569 false,
1570 true,
1571 &s->control_pid);
1572 if (r < 0)
034c6ed7
LP
1573 goto fail;
1574
1575 return;
1576
1577fail:
8bb2d17d 1578 log_warning_unit(UNIT(s)->id, "%s failed to run next control task: %s", UNIT(s)->id, strerror(-r));
034c6ed7 1579
80876c20 1580 if (s->state == SERVICE_START_PRE)
f42806df 1581 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
80876c20 1582 else if (s->state == SERVICE_STOP)
f42806df 1583 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7 1584 else if (s->state == SERVICE_STOP_POST)
f42806df 1585 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
e2f3b44c 1586 else if (s->state == SERVICE_RELOAD) {
f42806df
LP
1587 s->reload_result = SERVICE_FAILURE_RESOURCES;
1588 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c 1589 } else
f42806df 1590 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
5cb5a6ff
LP
1591}
1592
f42806df 1593static void service_run_next_main(Service *s) {
34e9ba66
LP
1594 pid_t pid;
1595 int r;
1596
1597 assert(s);
867b3b7d
LP
1598 assert(s->main_command);
1599 assert(s->main_command->command_next);
1600 assert(s->type == SERVICE_ONESHOT);
34e9ba66 1601
867b3b7d 1602 s->main_command = s->main_command->command_next;
34e9ba66
LP
1603 service_unwatch_main_pid(s);
1604
ecedd90f
LP
1605 r = service_spawn(s,
1606 s->main_command,
21b2ce39 1607 s->timeout_start_usec,
ecedd90f
LP
1608 true,
1609 true,
1610 true,
1611 true,
1612 s->notify_access != NOTIFY_NONE,
1613 false,
1614 &pid);
1615 if (r < 0)
34e9ba66
LP
1616 goto fail;
1617
1618 service_set_main_pid(s, pid);
1619
1620 return;
1621
1622fail:
8bb2d17d 1623 log_warning_unit(UNIT(s)->id, "%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
f42806df 1624 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
34e9ba66
LP
1625}
1626
93ae25e6
MO
1627static int service_start_limit_test(Service *s) {
1628 assert(s);
1629
1630 if (ratelimit_test(&s->start_limit))
1631 return 0;
1632
2928b0a8
LP
1633 log_warning_unit(UNIT(s)->id, "start request repeated too quickly for %s", UNIT(s)->id);
1634
1635 return failure_action(UNIT(s)->manager, s->start_limit_action, s->reboot_arg);
93ae25e6
MO
1636}
1637
87f0e418
LP
1638static int service_start(Unit *u) {
1639 Service *s = SERVICE(u);
4b939747 1640 int r;
5cb5a6ff
LP
1641
1642 assert(s);
1643
034c6ed7
LP
1644 /* We cannot fulfill this request right now, try again later
1645 * please! */
1646 if (s->state == SERVICE_STOP ||
1647 s->state == SERVICE_STOP_SIGTERM ||
1648 s->state == SERVICE_STOP_SIGKILL ||
1649 s->state == SERVICE_STOP_POST ||
1650 s->state == SERVICE_FINAL_SIGTERM ||
1651 s->state == SERVICE_FINAL_SIGKILL)
5cb5a6ff
LP
1652 return -EAGAIN;
1653
034c6ed7
LP
1654 /* Already on it! */
1655 if (s->state == SERVICE_START_PRE ||
1656 s->state == SERVICE_START ||
1657 s->state == SERVICE_START_POST)
1658 return 0;
1659
2e9d6c12 1660 /* A service that will be restarted must be stopped first to
7f2cddae 1661 * trigger BindsTo and/or OnFailure dependencies. If a user
2e9d6c12 1662 * does not want to wait for the holdoff time to elapse, the
d4943dc7
LP
1663 * service should be manually restarted, not started. We
1664 * simply return EAGAIN here, so that any start jobs stay
1665 * queued, and assume that the auto restart timer will
1666 * eventually trigger the restart. */
1667 if (s->state == SERVICE_AUTO_RESTART)
a8bb2e65 1668 return -EAGAIN;
2e9d6c12
DW
1669
1670 assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
5cb5a6ff 1671
1e2e8133 1672 /* Make sure we don't enter a busy loop of some kind. */
4b939747 1673 r = service_start_limit_test(s);
c2f34808 1674 if (r < 0) {
8d1b002a 1675 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
4b939747 1676 return r;
c2f34808 1677 }
1e2e8133 1678
f42806df
LP
1679 s->result = SERVICE_SUCCESS;
1680 s->reload_result = SERVICE_SUCCESS;
034c6ed7 1681 s->main_pid_known = false;
6dfa5494 1682 s->main_pid_alien = false;
47342320 1683 s->forbid_restart = false;
034c6ed7 1684
8cfdb077
LP
1685 free(s->status_text);
1686 s->status_text = NULL;
1687 s->status_errno = 0;
1688
308d72dc
LP
1689 s->notify_state = NOTIFY_UNKNOWN;
1690
034c6ed7
LP
1691 service_enter_start_pre(s);
1692 return 0;
5cb5a6ff
LP
1693}
1694
87f0e418
LP
1695static int service_stop(Unit *u) {
1696 Service *s = SERVICE(u);
5cb5a6ff
LP
1697
1698 assert(s);
1699
f0c7b229 1700 /* Don't create restart jobs from here. */
47342320 1701 s->forbid_restart = true;
034c6ed7 1702
e537352b
LP
1703 /* Already on it */
1704 if (s->state == SERVICE_STOP ||
1705 s->state == SERVICE_STOP_SIGTERM ||
1706 s->state == SERVICE_STOP_SIGKILL ||
1707 s->state == SERVICE_STOP_POST ||
1708 s->state == SERVICE_FINAL_SIGTERM ||
1709 s->state == SERVICE_FINAL_SIGKILL)
1710 return 0;
1711
f0c7b229 1712 /* A restart will be scheduled or is in progress. */
034c6ed7 1713 if (s->state == SERVICE_AUTO_RESTART) {
0c7f15b3 1714 service_set_state(s, SERVICE_DEAD);
034c6ed7
LP
1715 return 0;
1716 }
1717
3f6c78dc
LP
1718 /* If there's already something running we go directly into
1719 * kill mode. */
1720 if (s->state == SERVICE_START_PRE ||
1721 s->state == SERVICE_START ||
1722 s->state == SERVICE_START_POST ||
1723 s->state == SERVICE_RELOAD) {
f42806df 1724 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
3f6c78dc
LP
1725 return 0;
1726 }
5cb5a6ff 1727
3f6c78dc
LP
1728 assert(s->state == SERVICE_RUNNING ||
1729 s->state == SERVICE_EXITED);
3a762661 1730
f42806df 1731 service_enter_stop(s, SERVICE_SUCCESS);
5cb5a6ff
LP
1732 return 0;
1733}
1734
87f0e418
LP
1735static int service_reload(Unit *u) {
1736 Service *s = SERVICE(u);
034c6ed7
LP
1737
1738 assert(s);
1739
80876c20 1740 assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
034c6ed7
LP
1741
1742 service_enter_reload(s);
5cb5a6ff
LP
1743 return 0;
1744}
1745
44a6b1b6 1746_pure_ static bool service_can_reload(Unit *u) {
87f0e418 1747 Service *s = SERVICE(u);
034c6ed7
LP
1748
1749 assert(s);
1750
1751 return !!s->exec_command[SERVICE_EXEC_RELOAD];
1752}
1753
a16e1123
LP
1754static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
1755 Service *s = SERVICE(u);
1756
1757 assert(u);
1758 assert(f);
1759 assert(fds);
1760
1761 unit_serialize_item(u, f, "state", service_state_to_string(s->state));
f42806df
LP
1762 unit_serialize_item(u, f, "result", service_result_to_string(s->result));
1763 unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
a16e1123
LP
1764
1765 if (s->control_pid > 0)
ccd06097
ZJS
1766 unit_serialize_item_format(u, f, "control-pid", PID_FMT,
1767 s->control_pid);
a16e1123 1768
5925dd3c 1769 if (s->main_pid_known && s->main_pid > 0)
ccd06097 1770 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
a16e1123
LP
1771
1772 unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
1773
3a2776bc
LP
1774 if (s->status_text)
1775 unit_serialize_item(u, f, "status-text", s->status_text);
1776
cfc4eb4c
LP
1777 /* FIXME: There's a minor uncleanliness here: if there are
1778 * multiple commands attached here, we will start from the
1779 * first one again */
a16e1123 1780 if (s->control_command_id >= 0)
117dcc57
ZJS
1781 unit_serialize_item(u, f, "control-command",
1782 service_exec_command_to_string(s->control_command_id));
a16e1123
LP
1783
1784 if (s->socket_fd >= 0) {
1785 int copy;
1786
1787 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
1788 return copy;
1789
1790 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
1791 }
1792
e44da745
DM
1793 if (s->bus_endpoint_fd >= 0) {
1794 int copy;
1795
1796 if ((copy = fdset_put_dup(fds, s->bus_endpoint_fd)) < 0)
1797 return copy;
1798
1799 unit_serialize_item_format(u, f, "endpoint-fd", "%i", copy);
1800 }
1801
ecdbca40 1802 if (s->main_exec_status.pid > 0) {
ccd06097
ZJS
1803 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT,
1804 s->main_exec_status.pid);
117dcc57
ZJS
1805 dual_timestamp_serialize(f, "main-exec-status-start",
1806 &s->main_exec_status.start_timestamp);
1807 dual_timestamp_serialize(f, "main-exec-status-exit",
1808 &s->main_exec_status.exit_timestamp);
ecdbca40 1809
799fd0fd 1810 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
117dcc57
ZJS
1811 unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
1812 s->main_exec_status.code);
1813 unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
1814 s->main_exec_status.status);
ecdbca40
LP
1815 }
1816 }
a6927d7f 1817 if (dual_timestamp_is_set(&s->watchdog_timestamp))
842129f5 1818 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
ecdbca40 1819
6aca9a58 1820 if (s->forbid_restart)
8d1a2802 1821 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
6aca9a58 1822
a16e1123
LP
1823 return 0;
1824}
1825
1826static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
1827 Service *s = SERVICE(u);
a16e1123
LP
1828
1829 assert(u);
1830 assert(key);
1831 assert(value);
1832 assert(fds);
1833
1834 if (streq(key, "state")) {
1835 ServiceState state;
1836
117dcc57
ZJS
1837 state = service_state_from_string(value);
1838 if (state < 0)
66870f90 1839 log_debug_unit(u->id, "Failed to parse state value %s", value);
a16e1123
LP
1840 else
1841 s->deserialized_state = state;
f42806df
LP
1842 } else if (streq(key, "result")) {
1843 ServiceResult f;
1844
1845 f = service_result_from_string(value);
1846 if (f < 0)
66870f90 1847 log_debug_unit(u->id, "Failed to parse result value %s", value);
f42806df
LP
1848 else if (f != SERVICE_SUCCESS)
1849 s->result = f;
1850
1851 } else if (streq(key, "reload-result")) {
1852 ServiceResult f;
1853
1854 f = service_result_from_string(value);
1855 if (f < 0)
66870f90 1856 log_debug_unit(u->id, "Failed to parse reload result value %s", value);
f42806df
LP
1857 else if (f != SERVICE_SUCCESS)
1858 s->reload_result = f;
a16e1123 1859
a16e1123 1860 } else if (streq(key, "control-pid")) {
5925dd3c 1861 pid_t pid;
a16e1123 1862
e364ad06 1863 if (parse_pid(value, &pid) < 0)
66870f90 1864 log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
a16e1123 1865 else
e55224ca 1866 s->control_pid = pid;
a16e1123 1867 } else if (streq(key, "main-pid")) {
5925dd3c 1868 pid_t pid;
a16e1123 1869
e364ad06 1870 if (parse_pid(value, &pid) < 0)
66870f90 1871 log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
7400b9d2
LP
1872 else {
1873 service_set_main_pid(s, pid);
1874 unit_watch_pid(UNIT(s), pid);
1875 }
a16e1123
LP
1876 } else if (streq(key, "main-pid-known")) {
1877 int b;
1878
117dcc57
ZJS
1879 b = parse_boolean(value);
1880 if (b < 0)
66870f90 1881 log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
a16e1123
LP
1882 else
1883 s->main_pid_known = b;
3a2776bc
LP
1884 } else if (streq(key, "status-text")) {
1885 char *t;
1886
117dcc57
ZJS
1887 t = strdup(value);
1888 if (!t)
1889 log_oom();
1890 else {
3a2776bc
LP
1891 free(s->status_text);
1892 s->status_text = t;
1893 }
1894
a16e1123
LP
1895 } else if (streq(key, "control-command")) {
1896 ServiceExecCommand id;
1897
117dcc57
ZJS
1898 id = service_exec_command_from_string(value);
1899 if (id < 0)
66870f90 1900 log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
a16e1123
LP
1901 else {
1902 s->control_command_id = id;
1903 s->control_command = s->exec_command[id];
1904 }
1905 } else if (streq(key, "socket-fd")) {
1906 int fd;
1907
1908 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
66870f90 1909 log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
a16e1123 1910 else {
574634bc 1911 asynchronous_close(s->socket_fd);
a16e1123
LP
1912 s->socket_fd = fdset_remove(fds, fd);
1913 }
e44da745
DM
1914 } else if (streq(key, "endpoint-fd")) {
1915 int fd;
1916
1917 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
1918 log_debug_unit(u->id, "Failed to parse endpoint-fd value %s", value);
1919 else {
1920 safe_close(s->bus_endpoint_fd);
1921 s->bus_endpoint_fd = fdset_remove(fds, fd);
1922 }
ecdbca40
LP
1923 } else if (streq(key, "main-exec-status-pid")) {
1924 pid_t pid;
1925
e364ad06 1926 if (parse_pid(value, &pid) < 0)
66870f90 1927 log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
ecdbca40
LP
1928 else
1929 s->main_exec_status.pid = pid;
1930 } else if (streq(key, "main-exec-status-code")) {
1931 int i;
1932
e364ad06 1933 if (safe_atoi(value, &i) < 0)
66870f90 1934 log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
ecdbca40
LP
1935 else
1936 s->main_exec_status.code = i;
1937 } else if (streq(key, "main-exec-status-status")) {
1938 int i;
1939
e364ad06 1940 if (safe_atoi(value, &i) < 0)
66870f90 1941 log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
ecdbca40
LP
1942 else
1943 s->main_exec_status.status = i;
799fd0fd
LP
1944 } else if (streq(key, "main-exec-status-start"))
1945 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
1946 else if (streq(key, "main-exec-status-exit"))
1947 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
a6927d7f
MO
1948 else if (streq(key, "watchdog-timestamp"))
1949 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
613b411c 1950 else if (streq(key, "forbid-restart")) {
6aca9a58
SE
1951 int b;
1952
1953 b = parse_boolean(value);
1954 if (b < 0)
8d1a2802 1955 log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
6aca9a58
SE
1956 else
1957 s->forbid_restart = b;
c17ec25e 1958 } else
66870f90 1959 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
a16e1123
LP
1960
1961 return 0;
1962}
1963
44a6b1b6 1964_pure_ static UnitActiveState service_active_state(Unit *u) {
e056b01d
LP
1965 const UnitActiveState *table;
1966
87f0e418 1967 assert(u);
5cb5a6ff 1968
e056b01d
LP
1969 table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1970
1971 return table[SERVICE(u)->state];
034c6ed7
LP
1972}
1973
10a94420
LP
1974static const char *service_sub_state_to_string(Unit *u) {
1975 assert(u);
1976
1977 return service_state_to_string(SERVICE(u)->state);
1978}
1979
701cc384
LP
1980static bool service_check_gc(Unit *u) {
1981 Service *s = SERVICE(u);
1982
1983 assert(s);
1984
6d55002a
LP
1985 /* Never clean up services that still have a process around,
1986 * even if the service is formally dead. */
1987 if (cgroup_good(s) > 0 ||
1988 main_pid_good(s) > 0 ||
1989 control_pid_good(s) > 0)
1990 return true;
1991
6d55002a
LP
1992 return false;
1993}
1994
44a6b1b6 1995_pure_ static bool service_check_snapshot(Unit *u) {
701cc384
LP
1996 Service *s = SERVICE(u);
1997
1998 assert(s);
1999
8bb2d17d 2000 return s->socket_fd < 0;
701cc384
LP
2001}
2002
3a111838
MS
2003static int service_retry_pid_file(Service *s) {
2004 int r;
2005
2006 assert(s->pid_file);
2007 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2008
2009 r = service_load_pid_file(s, false);
2010 if (r < 0)
2011 return r;
2012
2013 service_unwatch_pid_file(s);
2014
f42806df 2015 service_enter_running(s, SERVICE_SUCCESS);
3a111838
MS
2016 return 0;
2017}
2018
2019static int service_watch_pid_file(Service *s) {
2020 int r;
2021
8bb2d17d
LP
2022 log_debug_unit(UNIT(s)->id, "Setting watch for %s's PID file %s", UNIT(s)->id, s->pid_file_pathspec->path);
2023
718db961 2024 r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
3a111838
MS
2025 if (r < 0)
2026 goto fail;
2027
2028 /* the pidfile might have appeared just before we set the watch */
8bb2d17d 2029 log_debug_unit(UNIT(s)->id, "Trying to read %s's PID file %s in case it changed", UNIT(s)->id, s->pid_file_pathspec->path);
3a111838
MS
2030 service_retry_pid_file(s);
2031
2032 return 0;
2033fail:
8bb2d17d 2034 log_error_unit(UNIT(s)->id, "Failed to set a watch for %s's PID file %s: %s", UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
3a111838
MS
2035 service_unwatch_pid_file(s);
2036 return r;
2037}
2038
2039static int service_demand_pid_file(Service *s) {
2040 PathSpec *ps;
2041
2042 assert(s->pid_file);
2043 assert(!s->pid_file_pathspec);
2044
2045 ps = new0(PathSpec, 1);
2046 if (!ps)
2047 return -ENOMEM;
2048
718db961 2049 ps->unit = UNIT(s);
3a111838
MS
2050 ps->path = strdup(s->pid_file);
2051 if (!ps->path) {
2052 free(ps);
2053 return -ENOMEM;
2054 }
2055
2056 path_kill_slashes(ps->path);
2057
2058 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2059 * keep their PID file open all the time. */
2060 ps->type = PATH_MODIFIED;
2061 ps->inotify_fd = -1;
2062
2063 s->pid_file_pathspec = ps;
2064
2065 return service_watch_pid_file(s);
2066}
2067
718db961 2068static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
e14c2802
LP
2069 PathSpec *p = userdata;
2070 Service *s;
2071
2072 assert(p);
2073
2074 s = SERVICE(p->unit);
3a111838
MS
2075
2076 assert(s);
2077 assert(fd >= 0);
2078 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2079 assert(s->pid_file_pathspec);
57020a3a 2080 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
3a111838 2081
718db961 2082 log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
3a111838 2083
e14c2802 2084 if (path_spec_fd_event(p, events) < 0)
3a111838
MS
2085 goto fail;
2086
2087 if (service_retry_pid_file(s) == 0)
718db961 2088 return 0;
3a111838
MS
2089
2090 if (service_watch_pid_file(s) < 0)
2091 goto fail;
2092
718db961
LP
2093 return 0;
2094
3a111838
MS
2095fail:
2096 service_unwatch_pid_file(s);
f42806df 2097 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
718db961 2098 return 0;
3a111838
MS
2099}
2100
a911bb9a
LP
2101static void service_notify_cgroup_empty_event(Unit *u) {
2102 Service *s = SERVICE(u);
2103
2104 assert(u);
2105
2106 log_debug_unit(u->id, "%s: cgroup is empty", u->id);
2107
2108 switch (s->state) {
2109
2110 /* Waiting for SIGCHLD is usually more interesting,
2111 * because it includes return codes/signals. Which is
2112 * why we ignore the cgroup events for most cases,
2113 * except when we don't know pid which to expect the
2114 * SIGCHLD for. */
2115
2116 case SERVICE_START:
2117 case SERVICE_START_POST:
2118 /* If we were hoping for the daemon to write its PID file,
2119 * we can give up now. */
2120 if (s->pid_file_pathspec) {
8bb2d17d
LP
2121 log_warning_unit(u->id, "%s never wrote its PID file. Failing.", UNIT(s)->id);
2122
a911bb9a
LP
2123 service_unwatch_pid_file(s);
2124 if (s->state == SERVICE_START)
2125 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2126 else
2127 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2128 }
2129 break;
2130
2131 case SERVICE_RUNNING:
2132 /* service_enter_running() will figure out what to do */
2133 service_enter_running(s, SERVICE_SUCCESS);
2134 break;
2135
2136 case SERVICE_STOP_SIGTERM:
2137 case SERVICE_STOP_SIGKILL:
2138
2139 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2140 service_enter_stop_post(s, SERVICE_SUCCESS);
2141
2142 break;
2143
2144 case SERVICE_STOP_POST:
2145 case SERVICE_FINAL_SIGTERM:
2146 case SERVICE_FINAL_SIGKILL:
2147 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2148 service_enter_dead(s, SERVICE_SUCCESS, true);
2149
2150 break;
2151
2152 default:
2153 ;
2154 }
2155}
2156
87f0e418
LP
2157static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2158 Service *s = SERVICE(u);
f42806df 2159 ServiceResult f;
5cb5a6ff
LP
2160
2161 assert(s);
034c6ed7
LP
2162 assert(pid >= 0);
2163
96342de6
LN
2164 if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2165 is_clean_exit_lsb(code, status, &s->success_status))
f42806df
LP
2166 f = SERVICE_SUCCESS;
2167 else if (code == CLD_EXITED)
2168 f = SERVICE_FAILURE_EXIT_CODE;
2169 else if (code == CLD_KILLED)
2170 f = SERVICE_FAILURE_SIGNAL;
2171 else if (code == CLD_DUMPED)
2172 f = SERVICE_FAILURE_CORE_DUMP;
d06dacd0 2173 else
cfc4eb4c 2174 assert_not_reached("Unknown code");
034c6ed7
LP
2175
2176 if (s->main_pid == pid) {
db01f8b3
MS
2177 /* Forking services may occasionally move to a new PID.
2178 * As long as they update the PID file before exiting the old
2179 * PID, they're fine. */
5375410b 2180 if (service_load_pid_file(s, false) == 0)
db01f8b3 2181 return;
034c6ed7 2182
034c6ed7 2183 s->main_pid = 0;
6ea832a2 2184 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
034c6ed7 2185
867b3b7d 2186 if (s->main_command) {
fbeefb45
LP
2187 /* If this is not a forking service than the
2188 * main process got started and hence we copy
2189 * the exit status so that it is recorded both
2190 * as main and as control process exit
2191 * status */
2192
867b3b7d 2193 s->main_command->exec_status = s->main_exec_status;
b708e7ce 2194
867b3b7d 2195 if (s->main_command->ignore)
f42806df 2196 f = SERVICE_SUCCESS;
fbeefb45
LP
2197 } else if (s->exec_command[SERVICE_EXEC_START]) {
2198
2199 /* If this is a forked process, then we should
2200 * ignore the return value if this was
2201 * configured for the starter process */
2202
2203 if (s->exec_command[SERVICE_EXEC_START]->ignore)
2204 f = SERVICE_SUCCESS;
034c6ed7
LP
2205 }
2206
bbc9006e
MT
2207 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2208 u->id,
23635a85
ZJS
2209 "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
2210 u->id, sigchld_code_to_string(code), status,
2211 strna(code == CLD_EXITED
2212 ? exit_status_to_string(status, EXIT_STATUS_FULL)
2213 : signal_to_string(status)),
23635a85
ZJS
2214 "EXIT_CODE=%s", sigchld_code_to_string(code),
2215 "EXIT_STATUS=%i", status,
2216 NULL);
f42806df
LP
2217
2218 if (f != SERVICE_SUCCESS)
2219 s->result = f;
034c6ed7 2220
867b3b7d
LP
2221 if (s->main_command &&
2222 s->main_command->command_next &&
f42806df 2223 f == SERVICE_SUCCESS) {
034c6ed7 2224
34e9ba66
LP
2225 /* There is another command to *
2226 * execute, so let's do that. */
034c6ed7 2227
8bb2d17d 2228 log_debug_unit(u->id, "%s running next main command for state %s", u->id, service_state_to_string(s->state));
f42806df 2229 service_run_next_main(s);
034c6ed7 2230
34e9ba66
LP
2231 } else {
2232
2233 /* The service exited, so the service is officially
2234 * gone. */
867b3b7d 2235 s->main_command = NULL;
34e9ba66
LP
2236
2237 switch (s->state) {
2238
2239 case SERVICE_START_POST:
2240 case SERVICE_RELOAD:
2241 case SERVICE_STOP:
2242 /* Need to wait until the operation is
2243 * done */
c4653a4d 2244 break;
7d55e835 2245
34e9ba66
LP
2246 case SERVICE_START:
2247 if (s->type == SERVICE_ONESHOT) {
2248 /* This was our main goal, so let's go on */
f42806df 2249 if (f == SERVICE_SUCCESS)
34e9ba66
LP
2250 service_enter_start_post(s);
2251 else
f42806df 2252 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
34e9ba66 2253 break;
34e9ba66 2254 }
034c6ed7 2255
bfba3256
LP
2256 /* Fall through */
2257
34e9ba66 2258 case SERVICE_RUNNING:
f42806df 2259 service_enter_running(s, f);
34e9ba66 2260 break;
034c6ed7 2261
34e9ba66
LP
2262 case SERVICE_STOP_SIGTERM:
2263 case SERVICE_STOP_SIGKILL:
5cb5a6ff 2264
34e9ba66 2265 if (!control_pid_good(s))
f42806df 2266 service_enter_stop_post(s, f);
5cb5a6ff 2267
34e9ba66
LP
2268 /* If there is still a control process, wait for that first */
2269 break;
2270
bf108e55
LP
2271 case SERVICE_STOP_POST:
2272 case SERVICE_FINAL_SIGTERM:
2273 case SERVICE_FINAL_SIGKILL:
2274
2275 if (!control_pid_good(s))
2276 service_enter_dead(s, f, true);
2277 break;
2278
34e9ba66
LP
2279 default:
2280 assert_not_reached("Uh, main process died at wrong time.");
2281 }
034c6ed7 2282 }
5cb5a6ff 2283
034c6ed7 2284 } else if (s->control_pid == pid) {
34e9ba66
LP
2285 s->control_pid = 0;
2286
b708e7ce 2287 if (s->control_command) {
8bb2d17d 2288 exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
a16e1123 2289
b708e7ce 2290 if (s->control_command->ignore)
f42806df 2291 f = SERVICE_SUCCESS;
b708e7ce
LP
2292 }
2293
66870f90
ZJS
2294 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
2295 "%s: control process exited, code=%s status=%i",
2296 u->id, sigchld_code_to_string(code), status);
f42806df
LP
2297
2298 if (f != SERVICE_SUCCESS)
2299 s->result = f;
034c6ed7 2300
88f3e0c9
LP
2301 /* Immediately get rid of the cgroup, so that the
2302 * kernel doesn't delay the cgroup empty messages for
2303 * the service cgroup any longer than necessary */
4ad49000 2304 service_kill_control_processes(s);
88f3e0c9 2305
34e9ba66
LP
2306 if (s->control_command &&
2307 s->control_command->command_next &&
f42806df 2308 f == SERVICE_SUCCESS) {
034c6ed7
LP
2309
2310 /* There is another command to *
2311 * execute, so let's do that. */
2312
8bb2d17d 2313 log_debug_unit(u->id, "%s running next control command for state %s", u->id, service_state_to_string(s->state));
f42806df 2314 service_run_next_control(s);
034c6ed7 2315
80876c20 2316 } else {
034c6ed7
LP
2317 /* No further commands for this step, so let's
2318 * figure out what to do next */
2319
a16e1123
LP
2320 s->control_command = NULL;
2321 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2322
8bb2d17d 2323 log_debug_unit(u->id, "%s got final SIGCHLD for state %s", u->id, service_state_to_string(s->state));
bd982a8b 2324
034c6ed7
LP
2325 switch (s->state) {
2326
2327 case SERVICE_START_PRE:
f42806df 2328 if (f == SERVICE_SUCCESS)
034c6ed7
LP
2329 service_enter_start(s);
2330 else
f42806df 2331 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
034c6ed7
LP
2332 break;
2333
2334 case SERVICE_START:
bfba3256
LP
2335 if (s->type != SERVICE_FORKING)
2336 /* Maybe spurious event due to a reload that changed the type? */
2337 break;
034c6ed7 2338
f42806df
LP
2339 if (f != SERVICE_SUCCESS) {
2340 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3a111838
MS
2341 break;
2342 }
034c6ed7 2343
3a111838 2344 if (s->pid_file) {
f42806df
LP
2345 bool has_start_post;
2346 int r;
2347
3a111838
MS
2348 /* Let's try to load the pid file here if we can.
2349 * The PID file might actually be created by a START_POST
2350 * script. In that case don't worry if the loading fails. */
f42806df
LP
2351
2352 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
2353 r = service_load_pid_file(s, !has_start_post);
3a111838
MS
2354 if (!has_start_post && r < 0) {
2355 r = service_demand_pid_file(s);
2356 if (r < 0 || !cgroup_good(s))
f42806df 2357 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3a111838
MS
2358 break;
2359 }
034c6ed7 2360 } else
3a111838 2361 service_search_main_pid(s);
034c6ed7 2362
3a111838 2363 service_enter_start_post(s);
034c6ed7
LP
2364 break;
2365
2366 case SERVICE_START_POST:
f42806df
LP
2367 if (f != SERVICE_SUCCESS) {
2368 service_enter_stop(s, f);
2096e009 2369 break;
034c6ed7
LP
2370 }
2371
2096e009 2372 if (s->pid_file) {
f42806df
LP
2373 int r;
2374
2375 r = service_load_pid_file(s, true);
2096e009
MS
2376 if (r < 0) {
2377 r = service_demand_pid_file(s);
2378 if (r < 0 || !cgroup_good(s))
f42806df 2379 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2096e009
MS
2380 break;
2381 }
2382 } else
2383 service_search_main_pid(s);
2384
f42806df 2385 service_enter_running(s, SERVICE_SUCCESS);
3185a36b 2386 break;
034c6ed7
LP
2387
2388 case SERVICE_RELOAD:
f42806df 2389 if (f == SERVICE_SUCCESS) {
5375410b 2390 service_load_pid_file(s, true);
3185a36b
LP
2391 service_search_main_pid(s);
2392 }
2393
f42806df
LP
2394 s->reload_result = f;
2395 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2396 break;
2397
2398 case SERVICE_STOP:
f42806df 2399 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
2400 break;
2401
2402 case SERVICE_STOP_SIGTERM:
2403 case SERVICE_STOP_SIGKILL:
2404 if (main_pid_good(s) <= 0)
f42806df 2405 service_enter_stop_post(s, f);
034c6ed7
LP
2406
2407 /* If there is still a service
2408 * process around, wait until
2409 * that one quit, too */
2410 break;
2411
2412 case SERVICE_STOP_POST:
2413 case SERVICE_FINAL_SIGTERM:
2414 case SERVICE_FINAL_SIGKILL:
bf108e55
LP
2415 if (main_pid_good(s) <= 0)
2416 service_enter_dead(s, f, true);
034c6ed7
LP
2417 break;
2418
2419 default:
2420 assert_not_reached("Uh, control process died at wrong time.");
2421 }
2422 }
8c47c732 2423 }
c4e2ceae
LP
2424
2425 /* Notify clients about changed exit status */
2426 unit_add_to_dbus_queue(u);
a911bb9a
LP
2427
2428 /* We got one SIGCHLD for the service, let's watch all
2429 * processes that are now running of the service, and watch
2430 * that. Among the PIDs we then watch will be children
2431 * reassigned to us, which hopefully allows us to identify
2432 * when all children are gone */
2433 unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
2434 unit_watch_all_pids(u);
2435
2436 /* If the PID set is empty now, then let's finish this off */
2437 if (set_isempty(u->pids))
2438 service_notify_cgroup_empty_event(u);
034c6ed7
LP
2439}
2440
718db961
LP
2441static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
2442 Service *s = SERVICE(userdata);
034c6ed7
LP
2443
2444 assert(s);
718db961 2445 assert(source == s->timer_event_source);
034c6ed7
LP
2446
2447 switch (s->state) {
2448
2449 case SERVICE_START_PRE:
2450 case SERVICE_START:
8bb2d17d 2451 log_warning_unit(UNIT(s)->id, "%s %s operation timed out. Terminating.", UNIT(s)->id, s->state == SERVICE_START ? "start" : "start-pre");
f42806df 2452 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
80876c20
LP
2453 break;
2454
034c6ed7 2455 case SERVICE_START_POST:
8bb2d17d 2456 log_warning_unit(UNIT(s)->id, "%s start-post operation timed out. Stopping.", UNIT(s)->id);
f42806df 2457 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2458 break;
2459
e2f3b44c 2460 case SERVICE_RELOAD:
8bb2d17d 2461 log_warning_unit(UNIT(s)->id, "%s reload operation timed out. Stopping.", UNIT(s)->id);
f42806df
LP
2462 s->reload_result = SERVICE_FAILURE_TIMEOUT;
2463 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c
LP
2464 break;
2465
034c6ed7 2466 case SERVICE_STOP:
8bb2d17d 2467 log_warning_unit(UNIT(s)->id, "%s stopping timed out. Terminating.", UNIT(s)->id);
f42806df 2468 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2469 break;
2470
2471 case SERVICE_STOP_SIGTERM:
4819ff03 2472 if (s->kill_context.send_sigkill) {
8bb2d17d 2473 log_warning_unit(UNIT(s)->id, "%s stop-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 2474 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 2475 } else {
8bb2d17d 2476 log_warning_unit(UNIT(s)->id, "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s)->id);
f42806df 2477 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
ba035df2
LP
2478 }
2479
034c6ed7
LP
2480 break;
2481
2482 case SERVICE_STOP_SIGKILL:
35b8ca3a 2483 /* Uh, we sent a SIGKILL and it is still not gone?
034c6ed7
LP
2484 * Must be something we cannot kill, so let's just be
2485 * weirded out and continue */
2486
8bb2d17d 2487 log_warning_unit(UNIT(s)->id, "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
f42806df 2488 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2489 break;
2490
2491 case SERVICE_STOP_POST:
8bb2d17d 2492 log_warning_unit(UNIT(s)->id, "%s stop-post timed out. Terminating.", UNIT(s)->id);
f42806df 2493 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2494 break;
2495
2496 case SERVICE_FINAL_SIGTERM:
4819ff03 2497 if (s->kill_context.send_sigkill) {
8bb2d17d 2498 log_warning_unit(UNIT(s)->id, "%s stop-final-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 2499 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 2500 } else {
8bb2d17d 2501 log_warning_unit(UNIT(s)->id, "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.", UNIT(s)->id);
f42806df 2502 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
ba035df2
LP
2503 }
2504
034c6ed7
LP
2505 break;
2506
2507 case SERVICE_FINAL_SIGKILL:
8bb2d17d 2508 log_warning_unit(UNIT(s)->id, "%s still around after final SIGKILL. Entering failed mode.", UNIT(s)->id);
f42806df 2509 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
034c6ed7
LP
2510 break;
2511
2512 case SERVICE_AUTO_RESTART:
718db961 2513 log_info_unit(UNIT(s)->id,
ef417cfd
ZJS
2514 s->restart_usec > 0 ?
2515 "%s holdoff time over, scheduling restart." :
2516 "%s has no holdoff time, scheduling restart.",
2517 UNIT(s)->id);
034c6ed7
LP
2518 service_enter_restart(s);
2519 break;
2520
2521 default:
2522 assert_not_reached("Timeout at wrong time.");
2523 }
718db961
LP
2524
2525 return 0;
2526}
2527
2528static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
2529 Service *s = SERVICE(userdata);
a7850c7d 2530 char t[FORMAT_TIMESPAN_MAX];
718db961
LP
2531
2532 assert(s);
2533 assert(source == s->watchdog_event_source);
2534
8bb2d17d 2535 log_error_unit(UNIT(s)->id, "%s watchdog timeout (limit %s)!", UNIT(s)->id,
a7850c7d 2536 format_timespan(t, sizeof(t), s->watchdog_usec, 1));
8bb2d17d 2537
842129f5
LP
2538 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
2539
718db961 2540 return 0;
5cb5a6ff
LP
2541}
2542
c952c6ec 2543static void service_notify_message(Unit *u, pid_t pid, char **tags) {
8c47c732 2544 Service *s = SERVICE(u);
308d72dc 2545 _cleanup_free_ char *cc = NULL;
30b5275a 2546 bool notify_dbus = false;
308d72dc 2547 const char *e;
8c47c732
LP
2548
2549 assert(u);
2550
308d72dc
LP
2551 cc = strv_join(tags, ", ");
2552 log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT" (%s)",
2553 u->id, pid, isempty(cc) ? "n/a" : cc);
da13d4d2 2554
c952c6ec 2555 if (s->notify_access == NOTIFY_NONE) {
8bb2d17d 2556 log_warning_unit(u->id, "%s: Got notification message from PID "PID_FMT", but reception is disabled.", u->id, pid);
c952c6ec
LP
2557 return;
2558 }
2559
336c6e46 2560 if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
336c6e46
LP
2561 if (s->main_pid != 0)
2562 log_warning_unit(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);
2563 else
3a33e61d 2564 log_debug_unit(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);
c952c6ec
LP
2565 return;
2566 }
2567
8c47c732 2568 /* Interpret MAINPID= */
28849dba 2569 e = strv_find_startswith(tags, "MAINPID=");
5e56b378 2570 if (e && IN_SET(s->state, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD)) {
28849dba 2571 if (parse_pid(e, &pid) < 0)
5e56b378 2572 log_warning_unit(u->id, "Failed to parse MAINPID= field in notification message: %s", e);
8c47c732 2573 else {
28849dba
LP
2574 log_debug_unit(u->id, "%s: got MAINPID=%s", u->id, e);
2575
5925dd3c 2576 service_set_main_pid(s, pid);
7400b9d2 2577 unit_watch_pid(UNIT(s), pid);
30b5275a 2578 notify_dbus = true;
8c47c732
LP
2579 }
2580 }
2581
308d72dc
LP
2582 /* Interpret RELOADING= */
2583 if (strv_find(tags, "RELOADING=1")) {
2584
2585 log_debug_unit(u->id, "%s: got RELOADING=1", u->id);
2586 s->notify_state = NOTIFY_RELOADING;
2587
2588 if (s->state == SERVICE_RUNNING)
2589 service_enter_reload_by_notify(s);
2590
2591 notify_dbus = true;
2592 }
2593
8c47c732 2594 /* Interpret READY= */
308d72dc
LP
2595 if (strv_find(tags, "READY=1")) {
2596
30b5275a 2597 log_debug_unit(u->id, "%s: got READY=1", u->id);
308d72dc
LP
2598 s->notify_state = NOTIFY_READY;
2599
2600 /* Type=notify services inform us about completed
2601 * initialization with READY=1 */
2602 if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START)
2603 service_enter_start_post(s);
2604
2605 /* Sending READY=1 while we are reloading informs us
2606 * that the reloading is complete */
2607 if (s->state == SERVICE_RELOAD && s->control_pid == 0)
2608 service_enter_running(s, SERVICE_SUCCESS);
2609
2610 notify_dbus = true;
2611 }
2612
2613 /* Interpret STOPPING= */
2614 if (strv_find(tags, "STOPPING=1")) {
2615
2616 log_debug_unit(u->id, "%s: got STOPPING=1", u->id);
2617 s->notify_state = NOTIFY_STOPPING;
2618
2619 if (s->state == SERVICE_RUNNING)
2620 service_enter_stop_by_notify(s);
2621
30b5275a 2622 notify_dbus = true;
8c47c732
LP
2623 }
2624
2625 /* Interpret STATUS= */
28849dba 2626 e = strv_find_startswith(tags, "STATUS=");
7f110ff9 2627 if (e) {
28849dba 2628 _cleanup_free_ char *t = NULL;
8c47c732 2629
28849dba
LP
2630 if (!isempty(e)) {
2631 if (!utf8_is_valid(e))
30b5275a 2632 log_warning_unit(u->id, "Status message in notification is not UTF-8 clean.");
28849dba
LP
2633 else {
2634 log_debug_unit(u->id, "%s: got STATUS=%s", u->id, e);
7f110ff9 2635
28849dba
LP
2636 t = strdup(e);
2637 if (!t)
2638 log_oom();
3a2776bc 2639 }
28849dba 2640 }
8c47c732 2641
30b5275a 2642 if (!streq_ptr(s->status_text, t)) {
28849dba 2643
3a2776bc
LP
2644 free(s->status_text);
2645 s->status_text = t;
28849dba
LP
2646 t = NULL;
2647
30b5275a 2648 notify_dbus = true;
28849dba 2649 }
8c47c732 2650 }
842129f5 2651
4774e357 2652 /* Interpret ERRNO= */
28849dba 2653 e = strv_find_startswith(tags, "ERRNO=");
4774e357
MAA
2654 if (e) {
2655 int status_errno;
2656
28849dba 2657 if (safe_atoi(e, &status_errno) < 0 || status_errno < 0)
4774e357
MAA
2658 log_warning_unit(u->id, "Failed to parse ERRNO= field in notification message: %s", e);
2659 else {
28849dba 2660 log_debug_unit(u->id, "%s: got ERRNO=%s", u->id, e);
4774e357
MAA
2661
2662 if (s->status_errno != status_errno) {
2663 s->status_errno = status_errno;
2664 notify_dbus = true;
2665 }
2666 }
2667 }
2668
6f285378 2669 /* Interpret WATCHDOG= */
a6927d7f 2670 if (strv_find(tags, "WATCHDOG=1")) {
842129f5
LP
2671 log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
2672 service_reset_watchdog(s);
a6927d7f 2673 }
c4e2ceae
LP
2674
2675 /* Notify clients about changed status or main pid */
30b5275a
LP
2676 if (notify_dbus)
2677 unit_add_to_dbus_queue(u);
8c47c732
LP
2678}
2679
68db7a3b
ZJS
2680static int service_get_timeout(Unit *u, uint64_t *timeout) {
2681 Service *s = SERVICE(u);
2682 int r;
2683
2684 if (!s->timer_event_source)
2685 return 0;
2686
2687 r = sd_event_source_get_time(s->timer_event_source, timeout);
2688 if (r < 0)
2689 return r;
2690
2691 return 1;
2692}
2693
05e343b7
LP
2694static void service_bus_name_owner_change(
2695 Unit *u,
2696 const char *name,
2697 const char *old_owner,
2698 const char *new_owner) {
2699
2700 Service *s = SERVICE(u);
718db961 2701 int r;
05e343b7
LP
2702
2703 assert(s);
2704 assert(name);
2705
2706 assert(streq(s->bus_name, name));
2707 assert(old_owner || new_owner);
2708
2709 if (old_owner && new_owner)
8bb2d17d 2710 log_debug_unit(u->id, "%s's D-Bus name %s changed owner from %s to %s", u->id, name, old_owner, new_owner);
05e343b7 2711 else if (old_owner)
8bb2d17d 2712 log_debug_unit(u->id, "%s's D-Bus name %s no longer registered by %s", u->id, name, old_owner);
05e343b7 2713 else
8bb2d17d 2714 log_debug_unit(u->id, "%s's D-Bus name %s now registered by %s", u->id, name, new_owner);
05e343b7
LP
2715
2716 s->bus_name_good = !!new_owner;
2717
2718 if (s->type == SERVICE_DBUS) {
2719
2720 /* service_enter_running() will figure out what to
2721 * do */
2722 if (s->state == SERVICE_RUNNING)
f42806df 2723 service_enter_running(s, SERVICE_SUCCESS);
05e343b7
LP
2724 else if (s->state == SERVICE_START && new_owner)
2725 service_enter_start_post(s);
2726
2727 } else if (new_owner &&
2728 s->main_pid <= 0 &&
2729 (s->state == SERVICE_START ||
2730 s->state == SERVICE_START_POST ||
2731 s->state == SERVICE_RUNNING ||
2732 s->state == SERVICE_RELOAD)) {
2733
5b12334d 2734 _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
718db961 2735 pid_t pid;
05e343b7 2736
718db961 2737 /* Try to acquire PID from bus service */
05e343b7 2738
49b832c5 2739 r = sd_bus_get_owner(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
5b12334d
LP
2740 if (r >= 0)
2741 r = sd_bus_creds_get_pid(creds, &pid);
718db961
LP
2742 if (r >= 0) {
2743 log_debug_unit(u->id, "%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
05e343b7 2744
718db961
LP
2745 service_set_main_pid(s, pid);
2746 unit_watch_pid(UNIT(s), pid);
2747 }
7400b9d2 2748 }
05e343b7
LP
2749}
2750
6cf6bbc2 2751int service_set_socket_fd(Service *s, int fd, Socket *sock) {
79a98c60
LP
2752 _cleanup_free_ char *peer = NULL;
2753 int r;
57020a3a 2754
4f2d528d
LP
2755 assert(s);
2756 assert(fd >= 0);
2757
2758 /* This is called by the socket code when instantiating a new
2759 * service for a stream socket and the socket needs to be
2760 * configured. */
2761
1124fe6f 2762 if (UNIT(s)->load_state != UNIT_LOADED)
4f2d528d
LP
2763 return -EINVAL;
2764
2765 if (s->socket_fd >= 0)
2766 return -EBUSY;
2767
2768 if (s->state != SERVICE_DEAD)
2769 return -EAGAIN;
2770
79a98c60
LP
2771 if (getpeername_pretty(fd, &peer) >= 0) {
2772
2773 if (UNIT(s)->description) {
2774 _cleanup_free_ char *a;
2775
2776 a = strjoin(UNIT(s)->description, " (", peer, ")", NULL);
2777 if (!a)
2778 return -ENOMEM;
2779
2780 r = unit_set_description(UNIT(s), a);
2781 } else
2782 r = unit_set_description(UNIT(s), peer);
2783
2784 if (r < 0)
2785 return r;
2786 }
2787
4f2d528d 2788 s->socket_fd = fd;
6cf6bbc2 2789
57020a3a
LP
2790 unit_ref_set(&s->accept_socket, UNIT(sock));
2791
2792 return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
4f2d528d
LP
2793}
2794
fdf20a31 2795static void service_reset_failed(Unit *u) {
5632e374
LP
2796 Service *s = SERVICE(u);
2797
2798 assert(s);
2799
fdf20a31 2800 if (s->state == SERVICE_FAILED)
5632e374
LP
2801 service_set_state(s, SERVICE_DEAD);
2802
f42806df
LP
2803 s->result = SERVICE_SUCCESS;
2804 s->reload_result = SERVICE_SUCCESS;
451b34cc
LP
2805
2806 RATELIMIT_RESET(s->start_limit);
5632e374
LP
2807}
2808
718db961 2809static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
8a0867d6 2810 Service *s = SERVICE(u);
41efeaec 2811
814cc562 2812 return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
8a0867d6
LP
2813}
2814
94f04347
LP
2815static const char* const service_state_table[_SERVICE_STATE_MAX] = {
2816 [SERVICE_DEAD] = "dead",
2817 [SERVICE_START_PRE] = "start-pre",
2818 [SERVICE_START] = "start",
2819 [SERVICE_START_POST] = "start-post",
2820 [SERVICE_RUNNING] = "running",
80876c20 2821 [SERVICE_EXITED] = "exited",
94f04347
LP
2822 [SERVICE_RELOAD] = "reload",
2823 [SERVICE_STOP] = "stop",
2824 [SERVICE_STOP_SIGTERM] = "stop-sigterm",
2825 [SERVICE_STOP_SIGKILL] = "stop-sigkill",
2826 [SERVICE_STOP_POST] = "stop-post",
2827 [SERVICE_FINAL_SIGTERM] = "final-sigterm",
2828 [SERVICE_FINAL_SIGKILL] = "final-sigkill",
fdf20a31 2829 [SERVICE_FAILED] = "failed",
94f04347
LP
2830 [SERVICE_AUTO_RESTART] = "auto-restart",
2831};
2832
2833DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
2834
2835static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
525ee6f4
LP
2836 [SERVICE_RESTART_NO] = "no",
2837 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
50caaedb 2838 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
6cfe2fde 2839 [SERVICE_RESTART_ON_ABNORMAL] = "on-abnormal",
dc99a976 2840 [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
50caaedb 2841 [SERVICE_RESTART_ON_ABORT] = "on-abort",
6cfe2fde 2842 [SERVICE_RESTART_ALWAYS] = "always",
94f04347
LP
2843};
2844
2845DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
2846
2847static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
94f04347 2848 [SERVICE_SIMPLE] = "simple",
0d624a78 2849 [SERVICE_FORKING] = "forking",
34e9ba66 2850 [SERVICE_ONESHOT] = "oneshot",
8c47c732 2851 [SERVICE_DBUS] = "dbus",
f2b68789
LP
2852 [SERVICE_NOTIFY] = "notify",
2853 [SERVICE_IDLE] = "idle"
94f04347
LP
2854};
2855
2856DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
2857
e537352b 2858static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
94f04347
LP
2859 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
2860 [SERVICE_EXEC_START] = "ExecStart",
2861 [SERVICE_EXEC_START_POST] = "ExecStartPost",
2862 [SERVICE_EXEC_RELOAD] = "ExecReload",
2863 [SERVICE_EXEC_STOP] = "ExecStop",
2864 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
2865};
2866
2867DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
2868
c952c6ec
LP
2869static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
2870 [NOTIFY_NONE] = "none",
2871 [NOTIFY_MAIN] = "main",
2872 [NOTIFY_ALL] = "all"
2873};
2874
2875DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
2876
308d72dc
LP
2877static const char* const notify_state_table[_NOTIFY_STATE_MAX] = {
2878 [NOTIFY_UNKNOWN] = "unknown",
2879 [NOTIFY_READY] = "ready",
2880 [NOTIFY_RELOADING] = "reloading",
2881 [NOTIFY_STOPPING] = "stopping",
2882};
2883
2884DEFINE_STRING_TABLE_LOOKUP(notify_state, NotifyState);
2885
f42806df
LP
2886static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
2887 [SERVICE_SUCCESS] = "success",
2888 [SERVICE_FAILURE_RESOURCES] = "resources",
2889 [SERVICE_FAILURE_TIMEOUT] = "timeout",
2890 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
2891 [SERVICE_FAILURE_SIGNAL] = "signal",
bb242b7b 2892 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
8d1b002a
LP
2893 [SERVICE_FAILURE_WATCHDOG] = "watchdog",
2894 [SERVICE_FAILURE_START_LIMIT] = "start-limit"
f42806df
LP
2895};
2896
2897DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
2898
87f0e418 2899const UnitVTable service_vtable = {
7d17cfbc 2900 .object_size = sizeof(Service),
718db961
LP
2901 .exec_context_offset = offsetof(Service, exec_context),
2902 .cgroup_context_offset = offsetof(Service, cgroup_context),
2903 .kill_context_offset = offsetof(Service, kill_context),
613b411c 2904 .exec_runtime_offset = offsetof(Service, exec_runtime),
3ef63c31 2905
f975e971
LP
2906 .sections =
2907 "Unit\0"
2908 "Service\0"
2909 "Install\0",
4ad49000 2910 .private_section = "Service",
71645aca 2911
034c6ed7
LP
2912 .init = service_init,
2913 .done = service_done,
a16e1123
LP
2914 .load = service_load,
2915
2916 .coldplug = service_coldplug,
034c6ed7 2917
5cb5a6ff
LP
2918 .dump = service_dump,
2919
2920 .start = service_start,
2921 .stop = service_stop,
2922 .reload = service_reload,
2923
034c6ed7
LP
2924 .can_reload = service_can_reload,
2925
8a0867d6
LP
2926 .kill = service_kill,
2927
a16e1123
LP
2928 .serialize = service_serialize,
2929 .deserialize_item = service_deserialize_item,
2930
5cb5a6ff 2931 .active_state = service_active_state,
10a94420 2932 .sub_state_to_string = service_sub_state_to_string,
5cb5a6ff 2933
701cc384
LP
2934 .check_gc = service_check_gc,
2935 .check_snapshot = service_check_snapshot,
2936
034c6ed7 2937 .sigchld_event = service_sigchld_event,
2c4104f0 2938
fdf20a31 2939 .reset_failed = service_reset_failed,
5632e374 2940
4ad49000 2941 .notify_cgroup_empty = service_notify_cgroup_empty_event,
8c47c732 2942 .notify_message = service_notify_message,
8e274523 2943
05e343b7 2944 .bus_name_owner_change = service_bus_name_owner_change,
05e343b7 2945
c4e2ceae 2946 .bus_interface = "org.freedesktop.systemd1.Service",
718db961 2947 .bus_vtable = bus_service_vtable,
74c964d3
LP
2948 .bus_set_property = bus_service_set_property,
2949 .bus_commit_properties = bus_service_commit_properties,
4139c1b2 2950
68db7a3b 2951 .get_timeout = service_get_timeout,
718db961
LP
2952 .can_transient = true,
2953
c6918296
MS
2954 .status_message_formats = {
2955 .starting_stopping = {
2956 [0] = "Starting %s...",
2957 [1] = "Stopping %s...",
2958 },
2959 .finished_start_job = {
2960 [JOB_DONE] = "Started %s.",
2961 [JOB_FAILED] = "Failed to start %s.",
2962 [JOB_DEPENDENCY] = "Dependency failed for %s.",
2963 [JOB_TIMEOUT] = "Timed out starting %s.",
2964 },
2965 .finished_stop_job = {
2966 [JOB_DONE] = "Stopped %s.",
2967 [JOB_FAILED] = "Stopped (with error) %s.",
2968 [JOB_TIMEOUT] = "Timed out stopping %s.",
2969 },
2970 },
5cb5a6ff 2971};