]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/service.c
Modernization
[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,
16115b0a 904 .selinux_context_net = s->socket_fd_selinux_context_net
9fa95f85 905 };
034c6ed7
LP
906
907 assert(s);
908 assert(c);
909 assert(_pid);
910
4ad49000
LP
911 unit_realize_cgroup(UNIT(s));
912
613b411c
LP
913 r = unit_setup_exec_runtime(UNIT(s));
914 if (r < 0)
915 goto fail;
916
6cf6bbc2
LP
917 if (pass_fds ||
918 s->exec_context.std_input == EXEC_INPUT_SOCKET ||
919 s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
920 s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
921
4f2d528d
LP
922 if (s->socket_fd >= 0) {
923 fds = &s->socket_fd;
924 n_fds = 1;
6cf6bbc2 925 } else {
117dcc57
ZJS
926 r = service_collect_fds(s, &fdsbuf, &n_fds);
927 if (r < 0)
6cf6bbc2
LP
928 goto fail;
929
930 fds = fdsbuf;
931 }
4f2d528d 932 }
44d8db9e 933
21b2ce39
LP
934 if (timeout > 0) {
935 r = service_arm_timer(s, timeout);
92c1622e
LP
936 if (r < 0)
937 goto fail;
938 } else
939 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 940
19f6d710
LP
941 r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
942 if (r < 0)
9e2f7c11 943 goto fail;
9e2f7c11 944
09812eb7 945 our_env = new0(char*, 4);
97ae63e2 946 if (!our_env) {
2105e76a
LP
947 r = -ENOMEM;
948 goto fail;
949 }
c952c6ec 950
2105e76a 951 if (set_notify_socket)
1124fe6f 952 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
c952c6ec
LP
953 r = -ENOMEM;
954 goto fail;
955 }
956
2105e76a 957 if (s->main_pid > 0)
ccd06097 958 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
c952c6ec
LP
959 r = -ENOMEM;
960 goto fail;
961 }
2105e76a 962
4ad49000 963 if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
ccd06097 964 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
97ae63e2
LP
965 r = -ENOMEM;
966 goto fail;
967 }
968
969 final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
970 if (!final_env) {
2105e76a
LP
971 r = -ENOMEM;
972 goto fail;
973 }
c952c6ec 974
4ad49000
LP
975 if (is_control && UNIT(s)->cgroup_path) {
976 path = strappenda(UNIT(s)->cgroup_path, "/control");
977 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
978 } else
979 path = UNIT(s)->cgroup_path;
980
e44da745
DM
981#ifdef ENABLE_KDBUS
982 if (s->exec_context.bus_endpoint) {
983 r = bus_kernel_create_endpoint(UNIT(s)->manager->running_as == SYSTEMD_SYSTEM ? "system" : "user",
984 UNIT(s)->id, &bus_endpoint_path);
985 if (r < 0)
986 goto fail;
987
988 /* Pass the fd to the exec_params so that the child process can upload the policy.
989 * Keep a reference to the fd in the service, so the endpoint is kept alive as long
990 * as the service is running. */
991 exec_params.bus_endpoint_fd = s->bus_endpoint_fd = r;
992 }
993#endif
994
9fa95f85
DM
995 exec_params.argv = argv;
996 exec_params.fds = fds;
997 exec_params.n_fds = n_fds;
998 exec_params.environment = final_env;
999 exec_params.confirm_spawn = UNIT(s)->manager->confirm_spawn;
1000 exec_params.cgroup_supported = UNIT(s)->manager->cgroup_supported;
1001 exec_params.cgroup_path = path;
1002 exec_params.runtime_prefix = manager_get_runtime_prefix(UNIT(s)->manager);
1003 exec_params.unit_id = UNIT(s)->id;
1004 exec_params.watchdog_usec = s->watchdog_usec;
e44da745 1005 exec_params.bus_endpoint_path = bus_endpoint_path;
9fa95f85
DM
1006 if (s->type == SERVICE_IDLE)
1007 exec_params.idle_pipe = UNIT(s)->manager->idle_pipe;
1008
9e2f7c11 1009 r = exec_spawn(c,
9e2f7c11 1010 &s->exec_context,
9fa95f85 1011 &exec_params,
613b411c 1012 s->exec_runtime,
9e2f7c11 1013 &pid);
9e2f7c11 1014 if (r < 0)
034c6ed7
LP
1015 goto fail;
1016
117dcc57
ZJS
1017 r = unit_watch_pid(UNIT(s), pid);
1018 if (r < 0)
034c6ed7
LP
1019 /* FIXME: we need to do something here */
1020 goto fail;
1021
1022 *_pid = pid;
1023
5cb5a6ff 1024 return 0;
034c6ed7
LP
1025
1026fail:
1027 if (timeout)
718db961 1028 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7
LP
1029
1030 return r;
1031}
1032
80876c20
LP
1033static int main_pid_good(Service *s) {
1034 assert(s);
1035
1036 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1037 * don't know */
1038
1039 /* If we know the pid file, then lets just check if it is
1040 * still valid */
6dfa5494
LP
1041 if (s->main_pid_known) {
1042
1043 /* If it's an alien child let's check if it is still
1044 * alive ... */
62220cf7 1045 if (s->main_pid_alien && s->main_pid > 0)
9f5650ae 1046 return pid_is_alive(s->main_pid);
6dfa5494
LP
1047
1048 /* .. otherwise assume we'll get a SIGCHLD for it,
1049 * which we really should wait for to collect exit
1050 * status and code */
80876c20 1051 return s->main_pid > 0;
6dfa5494 1052 }
80876c20
LP
1053
1054 /* We don't know the pid */
1055 return -EAGAIN;
1056}
1057
44a6b1b6 1058_pure_ static int control_pid_good(Service *s) {
80876c20
LP
1059 assert(s);
1060
1061 return s->control_pid > 0;
1062}
1063
1064static int cgroup_good(Service *s) {
1065 int r;
1066
1067 assert(s);
1068
4ad49000
LP
1069 if (!UNIT(s)->cgroup_path)
1070 return 0;
1071
1072 r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
117dcc57 1073 if (r < 0)
80876c20
LP
1074 return r;
1075
1076 return !r;
1077}
1078
f42806df 1079static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
034c6ed7
LP
1080 int r;
1081 assert(s);
1082
f42806df
LP
1083 if (f != SERVICE_SUCCESS)
1084 s->result = f;
034c6ed7 1085
0c7f15b3
MS
1086 service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1087
2928b0a8
LP
1088 if (s->result != SERVICE_SUCCESS) {
1089 log_warning_unit(UNIT(s)->id, "%s failed.", UNIT(s)->id);
1090 failure_action(UNIT(s)->manager, s->failure_action, s->reboot_arg);
1091 }
93ae25e6 1092
034c6ed7 1093 if (allow_restart &&
47342320 1094 !s->forbid_restart &&
034c6ed7 1095 (s->restart == SERVICE_RESTART_ALWAYS ||
f42806df
LP
1096 (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1097 (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
6cfe2fde 1098 (s->restart == SERVICE_RESTART_ON_ABNORMAL && !IN_SET(s->result, SERVICE_SUCCESS, SERVICE_FAILURE_EXIT_CODE)) ||
dc99a976 1099 (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
37520c1b 1100 (s->restart == SERVICE_RESTART_ON_ABORT && IN_SET(s->result, SERVICE_FAILURE_SIGNAL, SERVICE_FAILURE_CORE_DUMP)) ||
3e2d435b 1101 (s->main_exec_status.code == CLD_EXITED && set_contains(s->restart_force_status.status, INT_TO_PTR(s->main_exec_status.status))) ||
37520c1b 1102 (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 1103 (s->main_exec_status.code != CLD_EXITED || !set_contains(s->restart_prevent_status.status, INT_TO_PTR(s->main_exec_status.status))) &&
37520c1b 1104 (!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 1105
718db961 1106 r = service_arm_timer(s, s->restart_usec);
f42806df 1107 if (r < 0)
034c6ed7
LP
1108 goto fail;
1109
1110 service_set_state(s, SERVICE_AUTO_RESTART);
0c7f15b3 1111 }
034c6ed7 1112
47342320
LP
1113 s->forbid_restart = false;
1114
e66cf1a3 1115 /* We want fresh tmpdirs in case service is started again immediately */
613b411c
LP
1116 exec_runtime_destroy(s->exec_runtime);
1117 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
c17ec25e 1118
e66cf1a3
LP
1119 /* Also, remove the runtime directory in */
1120 exec_context_destroy_runtime_directory(&s->exec_context, manager_get_runtime_prefix(UNIT(s)->manager));
1121
9285c9ff
LN
1122 /* Try to delete the pid file. At this point it will be
1123 * out-of-date, and some software might be confused by it, so
1124 * let's remove it. */
1125 if (s->pid_file)
1126 unlink_noerrno(s->pid_file);
1127
034c6ed7
LP
1128 return;
1129
1130fail:
8bb2d17d 1131 log_warning_unit(UNIT(s)->id, "%s failed to run install restart timer: %s", UNIT(s)->id, strerror(-r));
f42806df 1132 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1133}
1134
f42806df 1135static void service_enter_stop_post(Service *s, ServiceResult f) {
034c6ed7
LP
1136 int r;
1137 assert(s);
1138
f42806df
LP
1139 if (f != SERVICE_SUCCESS)
1140 s->result = f;
034c6ed7 1141
5e94833f 1142 service_unwatch_control_pid(s);
a911bb9a 1143 unit_watch_all_pids(UNIT(s));
5e94833f 1144
117dcc57
ZJS
1145 s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1146 if (s->control_command) {
867b3b7d
LP
1147 s->control_command_id = SERVICE_EXEC_STOP_POST;
1148
ecedd90f
LP
1149 r = service_spawn(s,
1150 s->control_command,
21b2ce39 1151 s->timeout_stop_usec,
ecedd90f
LP
1152 false,
1153 !s->permissions_start_only,
1154 !s->root_directory_start_only,
1155 true,
1156 false,
1157 true,
1158 &s->control_pid);
1159 if (r < 0)
034c6ed7
LP
1160 goto fail;
1161
80876c20
LP
1162 service_set_state(s, SERVICE_STOP_POST);
1163 } else
ac84d1fb 1164 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1165
1166 return;
1167
1168fail:
8bb2d17d 1169 log_warning_unit(UNIT(s)->id, "%s failed to run 'stop-post' task: %s", UNIT(s)->id, strerror(-r));
f42806df 1170 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1171}
1172
f42806df 1173static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
034c6ed7 1174 int r;
034c6ed7
LP
1175
1176 assert(s);
1177
f42806df
LP
1178 if (f != SERVICE_SUCCESS)
1179 s->result = f;
034c6ed7 1180
a911bb9a
LP
1181 unit_watch_all_pids(UNIT(s));
1182
cd2086fe
LP
1183 r = unit_kill_context(
1184 UNIT(s),
1185 &s->kill_context,
1186 state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
1187 s->main_pid,
1188 s->control_pid,
1189 s->main_pid_alien);
ac84d1fb 1190
cd2086fe
LP
1191 if (r < 0)
1192 goto fail;
034c6ed7 1193
cd2086fe 1194 if (r > 0) {
d568a335 1195 if (s->timeout_stop_usec > 0) {
718db961 1196 r = service_arm_timer(s, s->timeout_stop_usec);
d568a335 1197 if (r < 0)
e558336f 1198 goto fail;
d568a335 1199 }
d6ea93e3 1200
80876c20 1201 service_set_state(s, state);
ac84d1fb
LP
1202 } else if (state == SERVICE_STOP_SIGTERM)
1203 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1204 else if (state == SERVICE_STOP_SIGKILL)
f42806df 1205 service_enter_stop_post(s, SERVICE_SUCCESS);
ac84d1fb
LP
1206 else if (state == SERVICE_FINAL_SIGTERM)
1207 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
80876c20 1208 else
f42806df 1209 service_enter_dead(s, SERVICE_SUCCESS, true);
034c6ed7
LP
1210
1211 return;
1212
1213fail:
8bb2d17d 1214 log_warning_unit(UNIT(s)->id, "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
034c6ed7 1215
80876c20 1216 if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
f42806df 1217 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
034c6ed7 1218 else
f42806df 1219 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1220}
1221
308d72dc
LP
1222static void service_enter_stop_by_notify(Service *s) {
1223 assert(s);
1224
1225 unit_watch_all_pids(UNIT(s));
1226
1227 if (s->timeout_stop_usec > 0)
1228 service_arm_timer(s, s->timeout_stop_usec);
1229
6041a7ee
MS
1230 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1231 service_set_state(s, SERVICE_STOP_SIGTERM);
308d72dc
LP
1232}
1233
f42806df 1234static void service_enter_stop(Service *s, ServiceResult f) {
034c6ed7 1235 int r;
5925dd3c 1236
034c6ed7
LP
1237 assert(s);
1238
f42806df
LP
1239 if (f != SERVICE_SUCCESS)
1240 s->result = f;
034c6ed7 1241
5e94833f 1242 service_unwatch_control_pid(s);
a911bb9a 1243 unit_watch_all_pids(UNIT(s));
5e94833f 1244
117dcc57
ZJS
1245 s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1246 if (s->control_command) {
867b3b7d
LP
1247 s->control_command_id = SERVICE_EXEC_STOP;
1248
ecedd90f
LP
1249 r = service_spawn(s,
1250 s->control_command,
21b2ce39 1251 s->timeout_stop_usec,
ecedd90f
LP
1252 false,
1253 !s->permissions_start_only,
1254 !s->root_directory_start_only,
1255 false,
1256 false,
1257 true,
1258 &s->control_pid);
1259 if (r < 0)
034c6ed7
LP
1260 goto fail;
1261
80876c20
LP
1262 service_set_state(s, SERVICE_STOP);
1263 } else
f42806df 1264 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1265
1266 return;
1267
1268fail:
8bb2d17d 1269 log_warning_unit(UNIT(s)->id, "%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
f42806df 1270 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1271}
1272
f42806df 1273static void service_enter_running(Service *s, ServiceResult f) {
4eab639f 1274 int main_pid_ok, cgroup_ok;
80876c20
LP
1275 assert(s);
1276
f42806df
LP
1277 if (f != SERVICE_SUCCESS)
1278 s->result = f;
80876c20 1279
4eab639f
LP
1280 main_pid_ok = main_pid_good(s);
1281 cgroup_ok = cgroup_good(s);
1282
1283 if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
308d72dc
LP
1284 (s->bus_name_good || s->type != SERVICE_DBUS)) {
1285
1286 /* If there are any queued up sd_notify()
1287 * notifications, process them now */
1288 if (s->notify_state == NOTIFY_RELOADING)
1289 service_enter_reload_by_notify(s);
1290 else if (s->notify_state == NOTIFY_STOPPING)
1291 service_enter_stop_by_notify(s);
1292 else
1293 service_set_state(s, SERVICE_RUNNING);
1294
1295 } else if (s->remain_after_exit)
80876c20
LP
1296 service_set_state(s, SERVICE_EXITED);
1297 else
f42806df 1298 service_enter_stop(s, SERVICE_SUCCESS);
80876c20
LP
1299}
1300
034c6ed7
LP
1301static void service_enter_start_post(Service *s) {
1302 int r;
1303 assert(s);
1304
5e94833f 1305 service_unwatch_control_pid(s);
842129f5 1306 service_reset_watchdog(s);
bb242b7b 1307
117dcc57
ZJS
1308 s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
1309 if (s->control_command) {
867b3b7d
LP
1310 s->control_command_id = SERVICE_EXEC_START_POST;
1311
ecedd90f
LP
1312 r = service_spawn(s,
1313 s->control_command,
21b2ce39 1314 s->timeout_start_usec,
ecedd90f
LP
1315 false,
1316 !s->permissions_start_only,
1317 !s->root_directory_start_only,
1318 false,
1319 false,
1320 true,
1321 &s->control_pid);
1322 if (r < 0)
034c6ed7
LP
1323 goto fail;
1324
80876c20
LP
1325 service_set_state(s, SERVICE_START_POST);
1326 } else
f42806df 1327 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1328
1329 return;
1330
1331fail:
8bb2d17d 1332 log_warning_unit(UNIT(s)->id, "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
f42806df 1333 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1334}
1335
4ad49000
LP
1336static void service_kill_control_processes(Service *s) {
1337 char *p;
1338
1339 if (!UNIT(s)->cgroup_path)
1340 return;
1341
1342 p = strappenda(UNIT(s)->cgroup_path, "/control");
4ad49000
LP
1343 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
1344}
1345
034c6ed7 1346static void service_enter_start(Service *s) {
4ad49000 1347 ExecCommand *c;
034c6ed7
LP
1348 pid_t pid;
1349 int r;
1350
1351 assert(s);
1352
41efeaec
LP
1353 service_unwatch_control_pid(s);
1354 service_unwatch_main_pid(s);
80876c20 1355
8f53a7b8
LP
1356 /* We want to ensure that nobody leaks processes from
1357 * START_PRE here, so let's go on a killing spree, People
1358 * should not spawn long running processes from START_PRE. */
4ad49000 1359 service_kill_control_processes(s);
8f53a7b8 1360
867b3b7d
LP
1361 if (s->type == SERVICE_FORKING) {
1362 s->control_command_id = SERVICE_EXEC_START;
1363 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
1364
1365 s->main_command = NULL;
1366 } else {
1367 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1368 s->control_command = NULL;
1369
1370 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
1371 }
34e9ba66 1372
96fb8242
LP
1373 if (!c) {
1374 assert(s->type == SERVICE_ONESHOT);
1375 service_enter_start_post(s);
1376 return;
1377 }
1378
ecedd90f
LP
1379 r = service_spawn(s,
1380 c,
21b2ce39 1381 IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_NOTIFY, SERVICE_ONESHOT) ? s->timeout_start_usec : 0,
ecedd90f
LP
1382 true,
1383 true,
1384 true,
1385 true,
1386 s->notify_access != NOTIFY_NONE,
1387 false,
1388 &pid);
1389 if (r < 0)
034c6ed7
LP
1390 goto fail;
1391
f2b68789 1392 if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
034c6ed7
LP
1393 /* For simple services we immediately start
1394 * the START_POST binaries. */
1395
5925dd3c 1396 service_set_main_pid(s, pid);
034c6ed7
LP
1397 service_enter_start_post(s);
1398
1399 } else if (s->type == SERVICE_FORKING) {
1400
1401 /* For forking services we wait until the start
1402 * process exited. */
1403
e55224ca 1404 s->control_pid = pid;
80876c20
LP
1405 service_set_state(s, SERVICE_START);
1406
34e9ba66 1407 } else if (s->type == SERVICE_ONESHOT ||
8c47c732
LP
1408 s->type == SERVICE_DBUS ||
1409 s->type == SERVICE_NOTIFY) {
7d55e835 1410
34e9ba66 1411 /* For oneshot services we wait until the start
7d55e835
LP
1412 * process exited, too, but it is our main process. */
1413
05e343b7 1414 /* For D-Bus services we know the main pid right away,
8c47c732
LP
1415 * but wait for the bus name to appear on the
1416 * bus. Notify services are similar. */
05e343b7 1417
5925dd3c 1418 service_set_main_pid(s, pid);
80876c20 1419 service_set_state(s, SERVICE_START);
034c6ed7
LP
1420 } else
1421 assert_not_reached("Unknown service type");
1422
1423 return;
1424
1425fail:
8bb2d17d 1426 log_warning_unit(UNIT(s)->id, "%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
f42806df 1427 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1428}
1429
1430static void service_enter_start_pre(Service *s) {
1431 int r;
1432
1433 assert(s);
1434
5e94833f
LP
1435 service_unwatch_control_pid(s);
1436
117dcc57
ZJS
1437 s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
1438 if (s->control_command) {
8f53a7b8
LP
1439 /* Before we start anything, let's clear up what might
1440 * be left from previous runs. */
4ad49000 1441 service_kill_control_processes(s);
8f53a7b8 1442
867b3b7d
LP
1443 s->control_command_id = SERVICE_EXEC_START_PRE;
1444
ecedd90f
LP
1445 r = service_spawn(s,
1446 s->control_command,
21b2ce39 1447 s->timeout_start_usec,
ecedd90f
LP
1448 false,
1449 !s->permissions_start_only,
1450 !s->root_directory_start_only,
1451 true,
1452 false,
1453 true,
1454 &s->control_pid);
1455 if (r < 0)
034c6ed7
LP
1456 goto fail;
1457
80876c20
LP
1458 service_set_state(s, SERVICE_START_PRE);
1459 } else
034c6ed7
LP
1460 service_enter_start(s);
1461
1462 return;
1463
1464fail:
37520c1b 1465 log_warning_unit(UNIT(s)->id, "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
f42806df 1466 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1467}
1468
1469static void service_enter_restart(Service *s) {
718db961 1470 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
034c6ed7 1471 int r;
398ef8ba 1472
034c6ed7
LP
1473 assert(s);
1474
a8bb2e65
LP
1475 if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
1476 /* Don't restart things if we are going down anyway */
37520c1b 1477 log_info_unit(UNIT(s)->id, "Stop job pending for unit, delaying automatic restart.");
2edfa366 1478
718db961 1479 r = service_arm_timer(s, s->restart_usec);
a8bb2e65 1480 if (r < 0)
2edfa366 1481 goto fail;
feae8adb
DW
1482
1483 return;
2edfa366
LP
1484 }
1485
48bb5876
DW
1486 /* Any units that are bound to this service must also be
1487 * restarted. We use JOB_RESTART (instead of the more obvious
1488 * JOB_START) here so that those dependency jobs will be added
1489 * as well. */
1490 r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
1491 if (r < 0)
034c6ed7
LP
1492 goto fail;
1493
a8bb2e65
LP
1494 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
1495 * it will be canceled as part of the service_stop() call that
1496 * is executed as part of JOB_RESTART. */
1497
37520c1b 1498 log_debug_unit(UNIT(s)->id, "%s scheduled restart job.", UNIT(s)->id);
034c6ed7
LP
1499 return;
1500
1501fail:
308d72dc 1502 log_warning_unit(UNIT(s)->id, "%s failed to schedule restart job: %s", UNIT(s)->id, bus_error_message(&error, -r));
f42806df 1503 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1504}
1505
308d72dc
LP
1506static void service_enter_reload_by_notify(Service *s) {
1507 assert(s);
1508
1509 if (s->timeout_start_usec > 0)
1510 service_arm_timer(s, s->timeout_start_usec);
1511
1512 service_set_state(s, SERVICE_RELOAD);
1513}
1514
034c6ed7
LP
1515static void service_enter_reload(Service *s) {
1516 int r;
1517
1518 assert(s);
1519
5e94833f
LP
1520 service_unwatch_control_pid(s);
1521
117dcc57
ZJS
1522 s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
1523 if (s->control_command) {
867b3b7d
LP
1524 s->control_command_id = SERVICE_EXEC_RELOAD;
1525
ecedd90f
LP
1526 r = service_spawn(s,
1527 s->control_command,
21b2ce39 1528 s->timeout_start_usec,
ecedd90f
LP
1529 false,
1530 !s->permissions_start_only,
1531 !s->root_directory_start_only,
1532 false,
1533 false,
1534 true,
1535 &s->control_pid);
1536 if (r < 0)
034c6ed7
LP
1537 goto fail;
1538
80876c20
LP
1539 service_set_state(s, SERVICE_RELOAD);
1540 } else
f42806df 1541 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1542
1543 return;
1544
1545fail:
8bb2d17d 1546 log_warning_unit(UNIT(s)->id, "%s failed to run 'reload' task: %s", UNIT(s)->id, strerror(-r));
f42806df
LP
1547 s->reload_result = SERVICE_FAILURE_RESOURCES;
1548 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1549}
1550
f42806df 1551static void service_run_next_control(Service *s) {
034c6ed7
LP
1552 int r;
1553
1554 assert(s);
1555 assert(s->control_command);
1556 assert(s->control_command->command_next);
1557
34e9ba66 1558 assert(s->control_command_id != SERVICE_EXEC_START);
034c6ed7 1559
34e9ba66 1560 s->control_command = s->control_command->command_next;
5e94833f
LP
1561 service_unwatch_control_pid(s);
1562
ecedd90f
LP
1563 r = service_spawn(s,
1564 s->control_command,
21b2ce39 1565 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
1566 false,
1567 !s->permissions_start_only,
1568 !s->root_directory_start_only,
1569 s->control_command_id == SERVICE_EXEC_START_PRE ||
1570 s->control_command_id == SERVICE_EXEC_STOP_POST,
1571 false,
1572 true,
1573 &s->control_pid);
1574 if (r < 0)
034c6ed7
LP
1575 goto fail;
1576
1577 return;
1578
1579fail:
8bb2d17d 1580 log_warning_unit(UNIT(s)->id, "%s failed to run next control task: %s", UNIT(s)->id, strerror(-r));
034c6ed7 1581
80876c20 1582 if (s->state == SERVICE_START_PRE)
f42806df 1583 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
80876c20 1584 else if (s->state == SERVICE_STOP)
f42806df 1585 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7 1586 else if (s->state == SERVICE_STOP_POST)
f42806df 1587 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
e2f3b44c 1588 else if (s->state == SERVICE_RELOAD) {
f42806df
LP
1589 s->reload_result = SERVICE_FAILURE_RESOURCES;
1590 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c 1591 } else
f42806df 1592 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
5cb5a6ff
LP
1593}
1594
f42806df 1595static void service_run_next_main(Service *s) {
34e9ba66
LP
1596 pid_t pid;
1597 int r;
1598
1599 assert(s);
867b3b7d
LP
1600 assert(s->main_command);
1601 assert(s->main_command->command_next);
1602 assert(s->type == SERVICE_ONESHOT);
34e9ba66 1603
867b3b7d 1604 s->main_command = s->main_command->command_next;
34e9ba66
LP
1605 service_unwatch_main_pid(s);
1606
ecedd90f
LP
1607 r = service_spawn(s,
1608 s->main_command,
21b2ce39 1609 s->timeout_start_usec,
ecedd90f
LP
1610 true,
1611 true,
1612 true,
1613 true,
1614 s->notify_access != NOTIFY_NONE,
1615 false,
1616 &pid);
1617 if (r < 0)
34e9ba66
LP
1618 goto fail;
1619
1620 service_set_main_pid(s, pid);
1621
1622 return;
1623
1624fail:
8bb2d17d 1625 log_warning_unit(UNIT(s)->id, "%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
f42806df 1626 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
34e9ba66
LP
1627}
1628
93ae25e6
MO
1629static int service_start_limit_test(Service *s) {
1630 assert(s);
1631
1632 if (ratelimit_test(&s->start_limit))
1633 return 0;
1634
2928b0a8
LP
1635 log_warning_unit(UNIT(s)->id, "start request repeated too quickly for %s", UNIT(s)->id);
1636
1637 return failure_action(UNIT(s)->manager, s->start_limit_action, s->reboot_arg);
93ae25e6
MO
1638}
1639
87f0e418
LP
1640static int service_start(Unit *u) {
1641 Service *s = SERVICE(u);
4b939747 1642 int r;
5cb5a6ff
LP
1643
1644 assert(s);
1645
034c6ed7
LP
1646 /* We cannot fulfill this request right now, try again later
1647 * please! */
1648 if (s->state == SERVICE_STOP ||
1649 s->state == SERVICE_STOP_SIGTERM ||
1650 s->state == SERVICE_STOP_SIGKILL ||
1651 s->state == SERVICE_STOP_POST ||
1652 s->state == SERVICE_FINAL_SIGTERM ||
1653 s->state == SERVICE_FINAL_SIGKILL)
5cb5a6ff
LP
1654 return -EAGAIN;
1655
034c6ed7
LP
1656 /* Already on it! */
1657 if (s->state == SERVICE_START_PRE ||
1658 s->state == SERVICE_START ||
1659 s->state == SERVICE_START_POST)
1660 return 0;
1661
2e9d6c12 1662 /* A service that will be restarted must be stopped first to
7f2cddae 1663 * trigger BindsTo and/or OnFailure dependencies. If a user
2e9d6c12 1664 * does not want to wait for the holdoff time to elapse, the
d4943dc7
LP
1665 * service should be manually restarted, not started. We
1666 * simply return EAGAIN here, so that any start jobs stay
1667 * queued, and assume that the auto restart timer will
1668 * eventually trigger the restart. */
1669 if (s->state == SERVICE_AUTO_RESTART)
a8bb2e65 1670 return -EAGAIN;
2e9d6c12
DW
1671
1672 assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
5cb5a6ff 1673
1e2e8133 1674 /* Make sure we don't enter a busy loop of some kind. */
4b939747 1675 r = service_start_limit_test(s);
c2f34808 1676 if (r < 0) {
8d1b002a 1677 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
4b939747 1678 return r;
c2f34808 1679 }
1e2e8133 1680
f42806df
LP
1681 s->result = SERVICE_SUCCESS;
1682 s->reload_result = SERVICE_SUCCESS;
034c6ed7 1683 s->main_pid_known = false;
6dfa5494 1684 s->main_pid_alien = false;
47342320 1685 s->forbid_restart = false;
034c6ed7 1686
8cfdb077
LP
1687 free(s->status_text);
1688 s->status_text = NULL;
1689 s->status_errno = 0;
1690
308d72dc
LP
1691 s->notify_state = NOTIFY_UNKNOWN;
1692
034c6ed7
LP
1693 service_enter_start_pre(s);
1694 return 0;
5cb5a6ff
LP
1695}
1696
87f0e418
LP
1697static int service_stop(Unit *u) {
1698 Service *s = SERVICE(u);
5cb5a6ff
LP
1699
1700 assert(s);
1701
f0c7b229 1702 /* Don't create restart jobs from here. */
47342320 1703 s->forbid_restart = true;
034c6ed7 1704
e537352b
LP
1705 /* Already on it */
1706 if (s->state == SERVICE_STOP ||
1707 s->state == SERVICE_STOP_SIGTERM ||
1708 s->state == SERVICE_STOP_SIGKILL ||
1709 s->state == SERVICE_STOP_POST ||
1710 s->state == SERVICE_FINAL_SIGTERM ||
1711 s->state == SERVICE_FINAL_SIGKILL)
1712 return 0;
1713
f0c7b229 1714 /* A restart will be scheduled or is in progress. */
034c6ed7 1715 if (s->state == SERVICE_AUTO_RESTART) {
0c7f15b3 1716 service_set_state(s, SERVICE_DEAD);
034c6ed7
LP
1717 return 0;
1718 }
1719
3f6c78dc
LP
1720 /* If there's already something running we go directly into
1721 * kill mode. */
1722 if (s->state == SERVICE_START_PRE ||
1723 s->state == SERVICE_START ||
1724 s->state == SERVICE_START_POST ||
1725 s->state == SERVICE_RELOAD) {
f42806df 1726 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
3f6c78dc
LP
1727 return 0;
1728 }
5cb5a6ff 1729
3f6c78dc
LP
1730 assert(s->state == SERVICE_RUNNING ||
1731 s->state == SERVICE_EXITED);
3a762661 1732
f42806df 1733 service_enter_stop(s, SERVICE_SUCCESS);
5cb5a6ff
LP
1734 return 0;
1735}
1736
87f0e418
LP
1737static int service_reload(Unit *u) {
1738 Service *s = SERVICE(u);
034c6ed7
LP
1739
1740 assert(s);
1741
80876c20 1742 assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
034c6ed7
LP
1743
1744 service_enter_reload(s);
5cb5a6ff
LP
1745 return 0;
1746}
1747
44a6b1b6 1748_pure_ static bool service_can_reload(Unit *u) {
87f0e418 1749 Service *s = SERVICE(u);
034c6ed7
LP
1750
1751 assert(s);
1752
1753 return !!s->exec_command[SERVICE_EXEC_RELOAD];
1754}
1755
a16e1123
LP
1756static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
1757 Service *s = SERVICE(u);
1758
1759 assert(u);
1760 assert(f);
1761 assert(fds);
1762
1763 unit_serialize_item(u, f, "state", service_state_to_string(s->state));
f42806df
LP
1764 unit_serialize_item(u, f, "result", service_result_to_string(s->result));
1765 unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
a16e1123
LP
1766
1767 if (s->control_pid > 0)
ccd06097
ZJS
1768 unit_serialize_item_format(u, f, "control-pid", PID_FMT,
1769 s->control_pid);
a16e1123 1770
5925dd3c 1771 if (s->main_pid_known && s->main_pid > 0)
ccd06097 1772 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
a16e1123
LP
1773
1774 unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
1775
3a2776bc
LP
1776 if (s->status_text)
1777 unit_serialize_item(u, f, "status-text", s->status_text);
1778
cfc4eb4c
LP
1779 /* FIXME: There's a minor uncleanliness here: if there are
1780 * multiple commands attached here, we will start from the
1781 * first one again */
a16e1123 1782 if (s->control_command_id >= 0)
117dcc57
ZJS
1783 unit_serialize_item(u, f, "control-command",
1784 service_exec_command_to_string(s->control_command_id));
a16e1123
LP
1785
1786 if (s->socket_fd >= 0) {
1787 int copy;
1788
1789 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
1790 return copy;
1791
1792 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
1793 }
1794
e44da745
DM
1795 if (s->bus_endpoint_fd >= 0) {
1796 int copy;
1797
1798 if ((copy = fdset_put_dup(fds, s->bus_endpoint_fd)) < 0)
1799 return copy;
1800
1801 unit_serialize_item_format(u, f, "endpoint-fd", "%i", copy);
1802 }
1803
ecdbca40 1804 if (s->main_exec_status.pid > 0) {
ccd06097
ZJS
1805 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT,
1806 s->main_exec_status.pid);
117dcc57
ZJS
1807 dual_timestamp_serialize(f, "main-exec-status-start",
1808 &s->main_exec_status.start_timestamp);
1809 dual_timestamp_serialize(f, "main-exec-status-exit",
1810 &s->main_exec_status.exit_timestamp);
ecdbca40 1811
799fd0fd 1812 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
117dcc57
ZJS
1813 unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
1814 s->main_exec_status.code);
1815 unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
1816 s->main_exec_status.status);
ecdbca40
LP
1817 }
1818 }
a6927d7f 1819 if (dual_timestamp_is_set(&s->watchdog_timestamp))
842129f5 1820 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
ecdbca40 1821
6aca9a58 1822 if (s->forbid_restart)
8d1a2802 1823 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
6aca9a58 1824
a16e1123
LP
1825 return 0;
1826}
1827
1828static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
1829 Service *s = SERVICE(u);
a16e1123
LP
1830
1831 assert(u);
1832 assert(key);
1833 assert(value);
1834 assert(fds);
1835
1836 if (streq(key, "state")) {
1837 ServiceState state;
1838
117dcc57
ZJS
1839 state = service_state_from_string(value);
1840 if (state < 0)
66870f90 1841 log_debug_unit(u->id, "Failed to parse state value %s", value);
a16e1123
LP
1842 else
1843 s->deserialized_state = state;
f42806df
LP
1844 } else if (streq(key, "result")) {
1845 ServiceResult f;
1846
1847 f = service_result_from_string(value);
1848 if (f < 0)
66870f90 1849 log_debug_unit(u->id, "Failed to parse result value %s", value);
f42806df
LP
1850 else if (f != SERVICE_SUCCESS)
1851 s->result = f;
1852
1853 } else if (streq(key, "reload-result")) {
1854 ServiceResult f;
1855
1856 f = service_result_from_string(value);
1857 if (f < 0)
66870f90 1858 log_debug_unit(u->id, "Failed to parse reload result value %s", value);
f42806df
LP
1859 else if (f != SERVICE_SUCCESS)
1860 s->reload_result = f;
a16e1123 1861
a16e1123 1862 } else if (streq(key, "control-pid")) {
5925dd3c 1863 pid_t pid;
a16e1123 1864
e364ad06 1865 if (parse_pid(value, &pid) < 0)
66870f90 1866 log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
a16e1123 1867 else
e55224ca 1868 s->control_pid = pid;
a16e1123 1869 } else if (streq(key, "main-pid")) {
5925dd3c 1870 pid_t pid;
a16e1123 1871
e364ad06 1872 if (parse_pid(value, &pid) < 0)
66870f90 1873 log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
7400b9d2
LP
1874 else {
1875 service_set_main_pid(s, pid);
1876 unit_watch_pid(UNIT(s), pid);
1877 }
a16e1123
LP
1878 } else if (streq(key, "main-pid-known")) {
1879 int b;
1880
117dcc57
ZJS
1881 b = parse_boolean(value);
1882 if (b < 0)
66870f90 1883 log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
a16e1123
LP
1884 else
1885 s->main_pid_known = b;
3a2776bc
LP
1886 } else if (streq(key, "status-text")) {
1887 char *t;
1888
117dcc57
ZJS
1889 t = strdup(value);
1890 if (!t)
1891 log_oom();
1892 else {
3a2776bc
LP
1893 free(s->status_text);
1894 s->status_text = t;
1895 }
1896
a16e1123
LP
1897 } else if (streq(key, "control-command")) {
1898 ServiceExecCommand id;
1899
117dcc57
ZJS
1900 id = service_exec_command_from_string(value);
1901 if (id < 0)
66870f90 1902 log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
a16e1123
LP
1903 else {
1904 s->control_command_id = id;
1905 s->control_command = s->exec_command[id];
1906 }
1907 } else if (streq(key, "socket-fd")) {
1908 int fd;
1909
1910 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
66870f90 1911 log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
a16e1123 1912 else {
574634bc 1913 asynchronous_close(s->socket_fd);
a16e1123
LP
1914 s->socket_fd = fdset_remove(fds, fd);
1915 }
e44da745
DM
1916 } else if (streq(key, "endpoint-fd")) {
1917 int fd;
1918
1919 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
1920 log_debug_unit(u->id, "Failed to parse endpoint-fd value %s", value);
1921 else {
1922 safe_close(s->bus_endpoint_fd);
1923 s->bus_endpoint_fd = fdset_remove(fds, fd);
1924 }
ecdbca40
LP
1925 } else if (streq(key, "main-exec-status-pid")) {
1926 pid_t pid;
1927
e364ad06 1928 if (parse_pid(value, &pid) < 0)
66870f90 1929 log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
ecdbca40
LP
1930 else
1931 s->main_exec_status.pid = pid;
1932 } else if (streq(key, "main-exec-status-code")) {
1933 int i;
1934
e364ad06 1935 if (safe_atoi(value, &i) < 0)
66870f90 1936 log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
ecdbca40
LP
1937 else
1938 s->main_exec_status.code = i;
1939 } else if (streq(key, "main-exec-status-status")) {
1940 int i;
1941
e364ad06 1942 if (safe_atoi(value, &i) < 0)
66870f90 1943 log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
ecdbca40
LP
1944 else
1945 s->main_exec_status.status = i;
799fd0fd
LP
1946 } else if (streq(key, "main-exec-status-start"))
1947 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
1948 else if (streq(key, "main-exec-status-exit"))
1949 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
a6927d7f
MO
1950 else if (streq(key, "watchdog-timestamp"))
1951 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
613b411c 1952 else if (streq(key, "forbid-restart")) {
6aca9a58
SE
1953 int b;
1954
1955 b = parse_boolean(value);
1956 if (b < 0)
8d1a2802 1957 log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
6aca9a58
SE
1958 else
1959 s->forbid_restart = b;
c17ec25e 1960 } else
66870f90 1961 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
a16e1123
LP
1962
1963 return 0;
1964}
1965
44a6b1b6 1966_pure_ static UnitActiveState service_active_state(Unit *u) {
e056b01d
LP
1967 const UnitActiveState *table;
1968
87f0e418 1969 assert(u);
5cb5a6ff 1970
e056b01d
LP
1971 table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1972
1973 return table[SERVICE(u)->state];
034c6ed7
LP
1974}
1975
10a94420
LP
1976static const char *service_sub_state_to_string(Unit *u) {
1977 assert(u);
1978
1979 return service_state_to_string(SERVICE(u)->state);
1980}
1981
701cc384
LP
1982static bool service_check_gc(Unit *u) {
1983 Service *s = SERVICE(u);
1984
1985 assert(s);
1986
6d55002a
LP
1987 /* Never clean up services that still have a process around,
1988 * even if the service is formally dead. */
1989 if (cgroup_good(s) > 0 ||
1990 main_pid_good(s) > 0 ||
1991 control_pid_good(s) > 0)
1992 return true;
1993
6d55002a
LP
1994 return false;
1995}
1996
44a6b1b6 1997_pure_ static bool service_check_snapshot(Unit *u) {
701cc384
LP
1998 Service *s = SERVICE(u);
1999
2000 assert(s);
2001
8bb2d17d 2002 return s->socket_fd < 0;
701cc384
LP
2003}
2004
3a111838
MS
2005static int service_retry_pid_file(Service *s) {
2006 int r;
2007
2008 assert(s->pid_file);
2009 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2010
2011 r = service_load_pid_file(s, false);
2012 if (r < 0)
2013 return r;
2014
2015 service_unwatch_pid_file(s);
2016
f42806df 2017 service_enter_running(s, SERVICE_SUCCESS);
3a111838
MS
2018 return 0;
2019}
2020
2021static int service_watch_pid_file(Service *s) {
2022 int r;
2023
8bb2d17d
LP
2024 log_debug_unit(UNIT(s)->id, "Setting watch for %s's PID file %s", UNIT(s)->id, s->pid_file_pathspec->path);
2025
718db961 2026 r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
3a111838
MS
2027 if (r < 0)
2028 goto fail;
2029
2030 /* the pidfile might have appeared just before we set the watch */
8bb2d17d 2031 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
2032 service_retry_pid_file(s);
2033
2034 return 0;
2035fail:
8bb2d17d 2036 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
2037 service_unwatch_pid_file(s);
2038 return r;
2039}
2040
2041static int service_demand_pid_file(Service *s) {
2042 PathSpec *ps;
2043
2044 assert(s->pid_file);
2045 assert(!s->pid_file_pathspec);
2046
2047 ps = new0(PathSpec, 1);
2048 if (!ps)
2049 return -ENOMEM;
2050
718db961 2051 ps->unit = UNIT(s);
3a111838
MS
2052 ps->path = strdup(s->pid_file);
2053 if (!ps->path) {
2054 free(ps);
2055 return -ENOMEM;
2056 }
2057
2058 path_kill_slashes(ps->path);
2059
2060 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2061 * keep their PID file open all the time. */
2062 ps->type = PATH_MODIFIED;
2063 ps->inotify_fd = -1;
2064
2065 s->pid_file_pathspec = ps;
2066
2067 return service_watch_pid_file(s);
2068}
2069
718db961 2070static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
e14c2802
LP
2071 PathSpec *p = userdata;
2072 Service *s;
2073
2074 assert(p);
2075
2076 s = SERVICE(p->unit);
3a111838
MS
2077
2078 assert(s);
2079 assert(fd >= 0);
2080 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2081 assert(s->pid_file_pathspec);
57020a3a 2082 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
3a111838 2083
718db961 2084 log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
3a111838 2085
e14c2802 2086 if (path_spec_fd_event(p, events) < 0)
3a111838
MS
2087 goto fail;
2088
2089 if (service_retry_pid_file(s) == 0)
718db961 2090 return 0;
3a111838
MS
2091
2092 if (service_watch_pid_file(s) < 0)
2093 goto fail;
2094
718db961
LP
2095 return 0;
2096
3a111838
MS
2097fail:
2098 service_unwatch_pid_file(s);
f42806df 2099 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
718db961 2100 return 0;
3a111838
MS
2101}
2102
a911bb9a
LP
2103static void service_notify_cgroup_empty_event(Unit *u) {
2104 Service *s = SERVICE(u);
2105
2106 assert(u);
2107
2108 log_debug_unit(u->id, "%s: cgroup is empty", u->id);
2109
2110 switch (s->state) {
2111
2112 /* Waiting for SIGCHLD is usually more interesting,
2113 * because it includes return codes/signals. Which is
2114 * why we ignore the cgroup events for most cases,
2115 * except when we don't know pid which to expect the
2116 * SIGCHLD for. */
2117
2118 case SERVICE_START:
2119 case SERVICE_START_POST:
2120 /* If we were hoping for the daemon to write its PID file,
2121 * we can give up now. */
2122 if (s->pid_file_pathspec) {
8bb2d17d
LP
2123 log_warning_unit(u->id, "%s never wrote its PID file. Failing.", UNIT(s)->id);
2124
a911bb9a
LP
2125 service_unwatch_pid_file(s);
2126 if (s->state == SERVICE_START)
2127 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2128 else
2129 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2130 }
2131 break;
2132
2133 case SERVICE_RUNNING:
2134 /* service_enter_running() will figure out what to do */
2135 service_enter_running(s, SERVICE_SUCCESS);
2136 break;
2137
2138 case SERVICE_STOP_SIGTERM:
2139 case SERVICE_STOP_SIGKILL:
2140
2141 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2142 service_enter_stop_post(s, SERVICE_SUCCESS);
2143
2144 break;
2145
2146 case SERVICE_STOP_POST:
2147 case SERVICE_FINAL_SIGTERM:
2148 case SERVICE_FINAL_SIGKILL:
2149 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2150 service_enter_dead(s, SERVICE_SUCCESS, true);
2151
2152 break;
2153
2154 default:
2155 ;
2156 }
2157}
2158
87f0e418
LP
2159static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2160 Service *s = SERVICE(u);
f42806df 2161 ServiceResult f;
5cb5a6ff
LP
2162
2163 assert(s);
034c6ed7
LP
2164 assert(pid >= 0);
2165
96342de6
LN
2166 if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2167 is_clean_exit_lsb(code, status, &s->success_status))
f42806df
LP
2168 f = SERVICE_SUCCESS;
2169 else if (code == CLD_EXITED)
2170 f = SERVICE_FAILURE_EXIT_CODE;
2171 else if (code == CLD_KILLED)
2172 f = SERVICE_FAILURE_SIGNAL;
2173 else if (code == CLD_DUMPED)
2174 f = SERVICE_FAILURE_CORE_DUMP;
d06dacd0 2175 else
cfc4eb4c 2176 assert_not_reached("Unknown code");
034c6ed7
LP
2177
2178 if (s->main_pid == pid) {
db01f8b3
MS
2179 /* Forking services may occasionally move to a new PID.
2180 * As long as they update the PID file before exiting the old
2181 * PID, they're fine. */
5375410b 2182 if (service_load_pid_file(s, false) == 0)
db01f8b3 2183 return;
034c6ed7 2184
034c6ed7 2185 s->main_pid = 0;
6ea832a2 2186 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
034c6ed7 2187
867b3b7d 2188 if (s->main_command) {
fbeefb45
LP
2189 /* If this is not a forking service than the
2190 * main process got started and hence we copy
2191 * the exit status so that it is recorded both
2192 * as main and as control process exit
2193 * status */
2194
867b3b7d 2195 s->main_command->exec_status = s->main_exec_status;
b708e7ce 2196
867b3b7d 2197 if (s->main_command->ignore)
f42806df 2198 f = SERVICE_SUCCESS;
fbeefb45
LP
2199 } else if (s->exec_command[SERVICE_EXEC_START]) {
2200
2201 /* If this is a forked process, then we should
2202 * ignore the return value if this was
2203 * configured for the starter process */
2204
2205 if (s->exec_command[SERVICE_EXEC_START]->ignore)
2206 f = SERVICE_SUCCESS;
034c6ed7
LP
2207 }
2208
bbc9006e
MT
2209 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2210 u->id,
23635a85
ZJS
2211 "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
2212 u->id, sigchld_code_to_string(code), status,
2213 strna(code == CLD_EXITED
2214 ? exit_status_to_string(status, EXIT_STATUS_FULL)
2215 : signal_to_string(status)),
23635a85
ZJS
2216 "EXIT_CODE=%s", sigchld_code_to_string(code),
2217 "EXIT_STATUS=%i", status,
2218 NULL);
f42806df
LP
2219
2220 if (f != SERVICE_SUCCESS)
2221 s->result = f;
034c6ed7 2222
867b3b7d
LP
2223 if (s->main_command &&
2224 s->main_command->command_next &&
f42806df 2225 f == SERVICE_SUCCESS) {
034c6ed7 2226
34e9ba66
LP
2227 /* There is another command to *
2228 * execute, so let's do that. */
034c6ed7 2229
8bb2d17d 2230 log_debug_unit(u->id, "%s running next main command for state %s", u->id, service_state_to_string(s->state));
f42806df 2231 service_run_next_main(s);
034c6ed7 2232
34e9ba66
LP
2233 } else {
2234
2235 /* The service exited, so the service is officially
2236 * gone. */
867b3b7d 2237 s->main_command = NULL;
34e9ba66
LP
2238
2239 switch (s->state) {
2240
2241 case SERVICE_START_POST:
2242 case SERVICE_RELOAD:
2243 case SERVICE_STOP:
2244 /* Need to wait until the operation is
2245 * done */
c4653a4d 2246 break;
7d55e835 2247
34e9ba66
LP
2248 case SERVICE_START:
2249 if (s->type == SERVICE_ONESHOT) {
2250 /* This was our main goal, so let's go on */
f42806df 2251 if (f == SERVICE_SUCCESS)
34e9ba66
LP
2252 service_enter_start_post(s);
2253 else
f42806df 2254 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
34e9ba66 2255 break;
34e9ba66 2256 }
034c6ed7 2257
bfba3256
LP
2258 /* Fall through */
2259
34e9ba66 2260 case SERVICE_RUNNING:
f42806df 2261 service_enter_running(s, f);
34e9ba66 2262 break;
034c6ed7 2263
34e9ba66
LP
2264 case SERVICE_STOP_SIGTERM:
2265 case SERVICE_STOP_SIGKILL:
5cb5a6ff 2266
34e9ba66 2267 if (!control_pid_good(s))
f42806df 2268 service_enter_stop_post(s, f);
5cb5a6ff 2269
34e9ba66
LP
2270 /* If there is still a control process, wait for that first */
2271 break;
2272
bf108e55
LP
2273 case SERVICE_STOP_POST:
2274 case SERVICE_FINAL_SIGTERM:
2275 case SERVICE_FINAL_SIGKILL:
2276
2277 if (!control_pid_good(s))
2278 service_enter_dead(s, f, true);
2279 break;
2280
34e9ba66
LP
2281 default:
2282 assert_not_reached("Uh, main process died at wrong time.");
2283 }
034c6ed7 2284 }
5cb5a6ff 2285
034c6ed7 2286 } else if (s->control_pid == pid) {
34e9ba66
LP
2287 s->control_pid = 0;
2288
b708e7ce 2289 if (s->control_command) {
8bb2d17d 2290 exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
a16e1123 2291
b708e7ce 2292 if (s->control_command->ignore)
f42806df 2293 f = SERVICE_SUCCESS;
b708e7ce
LP
2294 }
2295
66870f90
ZJS
2296 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
2297 "%s: control process exited, code=%s status=%i",
2298 u->id, sigchld_code_to_string(code), status);
f42806df
LP
2299
2300 if (f != SERVICE_SUCCESS)
2301 s->result = f;
034c6ed7 2302
88f3e0c9
LP
2303 /* Immediately get rid of the cgroup, so that the
2304 * kernel doesn't delay the cgroup empty messages for
2305 * the service cgroup any longer than necessary */
4ad49000 2306 service_kill_control_processes(s);
88f3e0c9 2307
34e9ba66
LP
2308 if (s->control_command &&
2309 s->control_command->command_next &&
f42806df 2310 f == SERVICE_SUCCESS) {
034c6ed7
LP
2311
2312 /* There is another command to *
2313 * execute, so let's do that. */
2314
8bb2d17d 2315 log_debug_unit(u->id, "%s running next control command for state %s", u->id, service_state_to_string(s->state));
f42806df 2316 service_run_next_control(s);
034c6ed7 2317
80876c20 2318 } else {
034c6ed7
LP
2319 /* No further commands for this step, so let's
2320 * figure out what to do next */
2321
a16e1123
LP
2322 s->control_command = NULL;
2323 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2324
8bb2d17d 2325 log_debug_unit(u->id, "%s got final SIGCHLD for state %s", u->id, service_state_to_string(s->state));
bd982a8b 2326
034c6ed7
LP
2327 switch (s->state) {
2328
2329 case SERVICE_START_PRE:
f42806df 2330 if (f == SERVICE_SUCCESS)
034c6ed7
LP
2331 service_enter_start(s);
2332 else
f42806df 2333 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
034c6ed7
LP
2334 break;
2335
2336 case SERVICE_START:
bfba3256
LP
2337 if (s->type != SERVICE_FORKING)
2338 /* Maybe spurious event due to a reload that changed the type? */
2339 break;
034c6ed7 2340
f42806df
LP
2341 if (f != SERVICE_SUCCESS) {
2342 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3a111838
MS
2343 break;
2344 }
034c6ed7 2345
3a111838 2346 if (s->pid_file) {
f42806df
LP
2347 bool has_start_post;
2348 int r;
2349
3a111838
MS
2350 /* Let's try to load the pid file here if we can.
2351 * The PID file might actually be created by a START_POST
2352 * script. In that case don't worry if the loading fails. */
f42806df
LP
2353
2354 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
2355 r = service_load_pid_file(s, !has_start_post);
3a111838
MS
2356 if (!has_start_post && r < 0) {
2357 r = service_demand_pid_file(s);
2358 if (r < 0 || !cgroup_good(s))
f42806df 2359 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3a111838
MS
2360 break;
2361 }
034c6ed7 2362 } else
3a111838 2363 service_search_main_pid(s);
034c6ed7 2364
3a111838 2365 service_enter_start_post(s);
034c6ed7
LP
2366 break;
2367
2368 case SERVICE_START_POST:
f42806df
LP
2369 if (f != SERVICE_SUCCESS) {
2370 service_enter_stop(s, f);
2096e009 2371 break;
034c6ed7
LP
2372 }
2373
2096e009 2374 if (s->pid_file) {
f42806df
LP
2375 int r;
2376
2377 r = service_load_pid_file(s, true);
2096e009
MS
2378 if (r < 0) {
2379 r = service_demand_pid_file(s);
2380 if (r < 0 || !cgroup_good(s))
f42806df 2381 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2096e009
MS
2382 break;
2383 }
2384 } else
2385 service_search_main_pid(s);
2386
f42806df 2387 service_enter_running(s, SERVICE_SUCCESS);
3185a36b 2388 break;
034c6ed7
LP
2389
2390 case SERVICE_RELOAD:
f42806df 2391 if (f == SERVICE_SUCCESS) {
5375410b 2392 service_load_pid_file(s, true);
3185a36b
LP
2393 service_search_main_pid(s);
2394 }
2395
f42806df
LP
2396 s->reload_result = f;
2397 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2398 break;
2399
2400 case SERVICE_STOP:
f42806df 2401 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
2402 break;
2403
2404 case SERVICE_STOP_SIGTERM:
2405 case SERVICE_STOP_SIGKILL:
2406 if (main_pid_good(s) <= 0)
f42806df 2407 service_enter_stop_post(s, f);
034c6ed7
LP
2408
2409 /* If there is still a service
2410 * process around, wait until
2411 * that one quit, too */
2412 break;
2413
2414 case SERVICE_STOP_POST:
2415 case SERVICE_FINAL_SIGTERM:
2416 case SERVICE_FINAL_SIGKILL:
bf108e55
LP
2417 if (main_pid_good(s) <= 0)
2418 service_enter_dead(s, f, true);
034c6ed7
LP
2419 break;
2420
2421 default:
2422 assert_not_reached("Uh, control process died at wrong time.");
2423 }
2424 }
8c47c732 2425 }
c4e2ceae
LP
2426
2427 /* Notify clients about changed exit status */
2428 unit_add_to_dbus_queue(u);
a911bb9a
LP
2429
2430 /* We got one SIGCHLD for the service, let's watch all
2431 * processes that are now running of the service, and watch
2432 * that. Among the PIDs we then watch will be children
2433 * reassigned to us, which hopefully allows us to identify
2434 * when all children are gone */
2435 unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
2436 unit_watch_all_pids(u);
2437
2438 /* If the PID set is empty now, then let's finish this off */
2439 if (set_isempty(u->pids))
2440 service_notify_cgroup_empty_event(u);
034c6ed7
LP
2441}
2442
718db961
LP
2443static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
2444 Service *s = SERVICE(userdata);
034c6ed7
LP
2445
2446 assert(s);
718db961 2447 assert(source == s->timer_event_source);
034c6ed7
LP
2448
2449 switch (s->state) {
2450
2451 case SERVICE_START_PRE:
2452 case SERVICE_START:
8bb2d17d 2453 log_warning_unit(UNIT(s)->id, "%s %s operation timed out. Terminating.", UNIT(s)->id, s->state == SERVICE_START ? "start" : "start-pre");
f42806df 2454 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
80876c20
LP
2455 break;
2456
034c6ed7 2457 case SERVICE_START_POST:
8bb2d17d 2458 log_warning_unit(UNIT(s)->id, "%s start-post operation timed out. Stopping.", UNIT(s)->id);
f42806df 2459 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2460 break;
2461
e2f3b44c 2462 case SERVICE_RELOAD:
8bb2d17d 2463 log_warning_unit(UNIT(s)->id, "%s reload operation timed out. Stopping.", UNIT(s)->id);
f42806df
LP
2464 s->reload_result = SERVICE_FAILURE_TIMEOUT;
2465 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c
LP
2466 break;
2467
034c6ed7 2468 case SERVICE_STOP:
8bb2d17d 2469 log_warning_unit(UNIT(s)->id, "%s stopping timed out. Terminating.", UNIT(s)->id);
f42806df 2470 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2471 break;
2472
2473 case SERVICE_STOP_SIGTERM:
4819ff03 2474 if (s->kill_context.send_sigkill) {
8bb2d17d 2475 log_warning_unit(UNIT(s)->id, "%s stop-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 2476 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 2477 } else {
8bb2d17d 2478 log_warning_unit(UNIT(s)->id, "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s)->id);
f42806df 2479 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
ba035df2
LP
2480 }
2481
034c6ed7
LP
2482 break;
2483
2484 case SERVICE_STOP_SIGKILL:
35b8ca3a 2485 /* Uh, we sent a SIGKILL and it is still not gone?
034c6ed7
LP
2486 * Must be something we cannot kill, so let's just be
2487 * weirded out and continue */
2488
8bb2d17d 2489 log_warning_unit(UNIT(s)->id, "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
f42806df 2490 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2491 break;
2492
2493 case SERVICE_STOP_POST:
8bb2d17d 2494 log_warning_unit(UNIT(s)->id, "%s stop-post timed out. Terminating.", UNIT(s)->id);
f42806df 2495 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2496 break;
2497
2498 case SERVICE_FINAL_SIGTERM:
4819ff03 2499 if (s->kill_context.send_sigkill) {
8bb2d17d 2500 log_warning_unit(UNIT(s)->id, "%s stop-final-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 2501 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 2502 } else {
8bb2d17d 2503 log_warning_unit(UNIT(s)->id, "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.", UNIT(s)->id);
f42806df 2504 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
ba035df2
LP
2505 }
2506
034c6ed7
LP
2507 break;
2508
2509 case SERVICE_FINAL_SIGKILL:
8bb2d17d 2510 log_warning_unit(UNIT(s)->id, "%s still around after final SIGKILL. Entering failed mode.", UNIT(s)->id);
f42806df 2511 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
034c6ed7
LP
2512 break;
2513
2514 case SERVICE_AUTO_RESTART:
718db961 2515 log_info_unit(UNIT(s)->id,
ef417cfd
ZJS
2516 s->restart_usec > 0 ?
2517 "%s holdoff time over, scheduling restart." :
2518 "%s has no holdoff time, scheduling restart.",
2519 UNIT(s)->id);
034c6ed7
LP
2520 service_enter_restart(s);
2521 break;
2522
2523 default:
2524 assert_not_reached("Timeout at wrong time.");
2525 }
718db961
LP
2526
2527 return 0;
2528}
2529
2530static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
2531 Service *s = SERVICE(userdata);
a7850c7d 2532 char t[FORMAT_TIMESPAN_MAX];
718db961
LP
2533
2534 assert(s);
2535 assert(source == s->watchdog_event_source);
2536
8bb2d17d 2537 log_error_unit(UNIT(s)->id, "%s watchdog timeout (limit %s)!", UNIT(s)->id,
a7850c7d 2538 format_timespan(t, sizeof(t), s->watchdog_usec, 1));
8bb2d17d 2539
842129f5
LP
2540 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
2541
718db961 2542 return 0;
5cb5a6ff
LP
2543}
2544
c952c6ec 2545static void service_notify_message(Unit *u, pid_t pid, char **tags) {
8c47c732 2546 Service *s = SERVICE(u);
308d72dc 2547 _cleanup_free_ char *cc = NULL;
30b5275a 2548 bool notify_dbus = false;
308d72dc 2549 const char *e;
8c47c732
LP
2550
2551 assert(u);
2552
308d72dc
LP
2553 cc = strv_join(tags, ", ");
2554 log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT" (%s)",
2555 u->id, pid, isempty(cc) ? "n/a" : cc);
da13d4d2 2556
c952c6ec 2557 if (s->notify_access == NOTIFY_NONE) {
8bb2d17d 2558 log_warning_unit(u->id, "%s: Got notification message from PID "PID_FMT", but reception is disabled.", u->id, pid);
c952c6ec
LP
2559 return;
2560 }
2561
336c6e46 2562 if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
336c6e46
LP
2563 if (s->main_pid != 0)
2564 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);
2565 else
3a33e61d 2566 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
2567 return;
2568 }
2569
8c47c732 2570 /* Interpret MAINPID= */
28849dba 2571 e = strv_find_startswith(tags, "MAINPID=");
5e56b378 2572 if (e && IN_SET(s->state, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD)) {
28849dba 2573 if (parse_pid(e, &pid) < 0)
5e56b378 2574 log_warning_unit(u->id, "Failed to parse MAINPID= field in notification message: %s", e);
8c47c732 2575 else {
28849dba
LP
2576 log_debug_unit(u->id, "%s: got MAINPID=%s", u->id, e);
2577
5925dd3c 2578 service_set_main_pid(s, pid);
7400b9d2 2579 unit_watch_pid(UNIT(s), pid);
30b5275a 2580 notify_dbus = true;
8c47c732
LP
2581 }
2582 }
2583
308d72dc
LP
2584 /* Interpret RELOADING= */
2585 if (strv_find(tags, "RELOADING=1")) {
2586
2587 log_debug_unit(u->id, "%s: got RELOADING=1", u->id);
2588 s->notify_state = NOTIFY_RELOADING;
2589
2590 if (s->state == SERVICE_RUNNING)
2591 service_enter_reload_by_notify(s);
2592
2593 notify_dbus = true;
2594 }
2595
8c47c732 2596 /* Interpret READY= */
308d72dc
LP
2597 if (strv_find(tags, "READY=1")) {
2598
30b5275a 2599 log_debug_unit(u->id, "%s: got READY=1", u->id);
308d72dc
LP
2600 s->notify_state = NOTIFY_READY;
2601
2602 /* Type=notify services inform us about completed
2603 * initialization with READY=1 */
2604 if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START)
2605 service_enter_start_post(s);
2606
2607 /* Sending READY=1 while we are reloading informs us
2608 * that the reloading is complete */
2609 if (s->state == SERVICE_RELOAD && s->control_pid == 0)
2610 service_enter_running(s, SERVICE_SUCCESS);
2611
2612 notify_dbus = true;
2613 }
2614
2615 /* Interpret STOPPING= */
2616 if (strv_find(tags, "STOPPING=1")) {
2617
2618 log_debug_unit(u->id, "%s: got STOPPING=1", u->id);
2619 s->notify_state = NOTIFY_STOPPING;
2620
2621 if (s->state == SERVICE_RUNNING)
2622 service_enter_stop_by_notify(s);
2623
30b5275a 2624 notify_dbus = true;
8c47c732
LP
2625 }
2626
2627 /* Interpret STATUS= */
28849dba 2628 e = strv_find_startswith(tags, "STATUS=");
7f110ff9 2629 if (e) {
28849dba 2630 _cleanup_free_ char *t = NULL;
8c47c732 2631
28849dba
LP
2632 if (!isempty(e)) {
2633 if (!utf8_is_valid(e))
30b5275a 2634 log_warning_unit(u->id, "Status message in notification is not UTF-8 clean.");
28849dba
LP
2635 else {
2636 log_debug_unit(u->id, "%s: got STATUS=%s", u->id, e);
7f110ff9 2637
28849dba
LP
2638 t = strdup(e);
2639 if (!t)
2640 log_oom();
3a2776bc 2641 }
28849dba 2642 }
8c47c732 2643
30b5275a 2644 if (!streq_ptr(s->status_text, t)) {
28849dba 2645
3a2776bc
LP
2646 free(s->status_text);
2647 s->status_text = t;
28849dba
LP
2648 t = NULL;
2649
30b5275a 2650 notify_dbus = true;
28849dba 2651 }
8c47c732 2652 }
842129f5 2653
4774e357 2654 /* Interpret ERRNO= */
28849dba 2655 e = strv_find_startswith(tags, "ERRNO=");
4774e357
MAA
2656 if (e) {
2657 int status_errno;
2658
28849dba 2659 if (safe_atoi(e, &status_errno) < 0 || status_errno < 0)
4774e357
MAA
2660 log_warning_unit(u->id, "Failed to parse ERRNO= field in notification message: %s", e);
2661 else {
28849dba 2662 log_debug_unit(u->id, "%s: got ERRNO=%s", u->id, e);
4774e357
MAA
2663
2664 if (s->status_errno != status_errno) {
2665 s->status_errno = status_errno;
2666 notify_dbus = true;
2667 }
2668 }
2669 }
2670
6f285378 2671 /* Interpret WATCHDOG= */
a6927d7f 2672 if (strv_find(tags, "WATCHDOG=1")) {
842129f5
LP
2673 log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
2674 service_reset_watchdog(s);
a6927d7f 2675 }
c4e2ceae
LP
2676
2677 /* Notify clients about changed status or main pid */
30b5275a
LP
2678 if (notify_dbus)
2679 unit_add_to_dbus_queue(u);
8c47c732
LP
2680}
2681
68db7a3b
ZJS
2682static int service_get_timeout(Unit *u, uint64_t *timeout) {
2683 Service *s = SERVICE(u);
2684 int r;
2685
2686 if (!s->timer_event_source)
2687 return 0;
2688
2689 r = sd_event_source_get_time(s->timer_event_source, timeout);
2690 if (r < 0)
2691 return r;
2692
2693 return 1;
2694}
2695
05e343b7
LP
2696static void service_bus_name_owner_change(
2697 Unit *u,
2698 const char *name,
2699 const char *old_owner,
2700 const char *new_owner) {
2701
2702 Service *s = SERVICE(u);
718db961 2703 int r;
05e343b7
LP
2704
2705 assert(s);
2706 assert(name);
2707
2708 assert(streq(s->bus_name, name));
2709 assert(old_owner || new_owner);
2710
2711 if (old_owner && new_owner)
8bb2d17d 2712 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 2713 else if (old_owner)
8bb2d17d 2714 log_debug_unit(u->id, "%s's D-Bus name %s no longer registered by %s", u->id, name, old_owner);
05e343b7 2715 else
8bb2d17d 2716 log_debug_unit(u->id, "%s's D-Bus name %s now registered by %s", u->id, name, new_owner);
05e343b7
LP
2717
2718 s->bus_name_good = !!new_owner;
2719
2720 if (s->type == SERVICE_DBUS) {
2721
2722 /* service_enter_running() will figure out what to
2723 * do */
2724 if (s->state == SERVICE_RUNNING)
f42806df 2725 service_enter_running(s, SERVICE_SUCCESS);
05e343b7
LP
2726 else if (s->state == SERVICE_START && new_owner)
2727 service_enter_start_post(s);
2728
2729 } else if (new_owner &&
2730 s->main_pid <= 0 &&
2731 (s->state == SERVICE_START ||
2732 s->state == SERVICE_START_POST ||
2733 s->state == SERVICE_RUNNING ||
2734 s->state == SERVICE_RELOAD)) {
2735
5b12334d 2736 _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
718db961 2737 pid_t pid;
05e343b7 2738
718db961 2739 /* Try to acquire PID from bus service */
05e343b7 2740
49b832c5 2741 r = sd_bus_get_owner(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
5b12334d
LP
2742 if (r >= 0)
2743 r = sd_bus_creds_get_pid(creds, &pid);
718db961
LP
2744 if (r >= 0) {
2745 log_debug_unit(u->id, "%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
05e343b7 2746
718db961
LP
2747 service_set_main_pid(s, pid);
2748 unit_watch_pid(UNIT(s), pid);
2749 }
7400b9d2 2750 }
05e343b7
LP
2751}
2752
16115b0a 2753int service_set_socket_fd(Service *s, int fd, Socket *sock, bool selinux_context_net) {
79a98c60
LP
2754 _cleanup_free_ char *peer = NULL;
2755 int r;
57020a3a 2756
4f2d528d
LP
2757 assert(s);
2758 assert(fd >= 0);
2759
2760 /* This is called by the socket code when instantiating a new
2761 * service for a stream socket and the socket needs to be
2762 * configured. */
2763
1124fe6f 2764 if (UNIT(s)->load_state != UNIT_LOADED)
4f2d528d
LP
2765 return -EINVAL;
2766
2767 if (s->socket_fd >= 0)
2768 return -EBUSY;
2769
2770 if (s->state != SERVICE_DEAD)
2771 return -EAGAIN;
2772
79a98c60
LP
2773 if (getpeername_pretty(fd, &peer) >= 0) {
2774
2775 if (UNIT(s)->description) {
2776 _cleanup_free_ char *a;
2777
2778 a = strjoin(UNIT(s)->description, " (", peer, ")", NULL);
2779 if (!a)
2780 return -ENOMEM;
2781
2782 r = unit_set_description(UNIT(s), a);
2783 } else
2784 r = unit_set_description(UNIT(s), peer);
2785
2786 if (r < 0)
2787 return r;
2788 }
2789
4f2d528d 2790 s->socket_fd = fd;
16115b0a 2791 s->socket_fd_selinux_context_net = selinux_context_net;
6cf6bbc2 2792
57020a3a
LP
2793 unit_ref_set(&s->accept_socket, UNIT(sock));
2794
2795 return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
4f2d528d
LP
2796}
2797
fdf20a31 2798static void service_reset_failed(Unit *u) {
5632e374
LP
2799 Service *s = SERVICE(u);
2800
2801 assert(s);
2802
fdf20a31 2803 if (s->state == SERVICE_FAILED)
5632e374
LP
2804 service_set_state(s, SERVICE_DEAD);
2805
f42806df
LP
2806 s->result = SERVICE_SUCCESS;
2807 s->reload_result = SERVICE_SUCCESS;
451b34cc
LP
2808
2809 RATELIMIT_RESET(s->start_limit);
5632e374
LP
2810}
2811
718db961 2812static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
8a0867d6 2813 Service *s = SERVICE(u);
41efeaec 2814
814cc562 2815 return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
8a0867d6
LP
2816}
2817
94f04347
LP
2818static const char* const service_state_table[_SERVICE_STATE_MAX] = {
2819 [SERVICE_DEAD] = "dead",
2820 [SERVICE_START_PRE] = "start-pre",
2821 [SERVICE_START] = "start",
2822 [SERVICE_START_POST] = "start-post",
2823 [SERVICE_RUNNING] = "running",
80876c20 2824 [SERVICE_EXITED] = "exited",
94f04347
LP
2825 [SERVICE_RELOAD] = "reload",
2826 [SERVICE_STOP] = "stop",
2827 [SERVICE_STOP_SIGTERM] = "stop-sigterm",
2828 [SERVICE_STOP_SIGKILL] = "stop-sigkill",
2829 [SERVICE_STOP_POST] = "stop-post",
2830 [SERVICE_FINAL_SIGTERM] = "final-sigterm",
2831 [SERVICE_FINAL_SIGKILL] = "final-sigkill",
fdf20a31 2832 [SERVICE_FAILED] = "failed",
94f04347
LP
2833 [SERVICE_AUTO_RESTART] = "auto-restart",
2834};
2835
2836DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
2837
2838static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
525ee6f4
LP
2839 [SERVICE_RESTART_NO] = "no",
2840 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
50caaedb 2841 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
6cfe2fde 2842 [SERVICE_RESTART_ON_ABNORMAL] = "on-abnormal",
dc99a976 2843 [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
50caaedb 2844 [SERVICE_RESTART_ON_ABORT] = "on-abort",
6cfe2fde 2845 [SERVICE_RESTART_ALWAYS] = "always",
94f04347
LP
2846};
2847
2848DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
2849
2850static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
94f04347 2851 [SERVICE_SIMPLE] = "simple",
0d624a78 2852 [SERVICE_FORKING] = "forking",
34e9ba66 2853 [SERVICE_ONESHOT] = "oneshot",
8c47c732 2854 [SERVICE_DBUS] = "dbus",
f2b68789
LP
2855 [SERVICE_NOTIFY] = "notify",
2856 [SERVICE_IDLE] = "idle"
94f04347
LP
2857};
2858
2859DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
2860
e537352b 2861static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
94f04347
LP
2862 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
2863 [SERVICE_EXEC_START] = "ExecStart",
2864 [SERVICE_EXEC_START_POST] = "ExecStartPost",
2865 [SERVICE_EXEC_RELOAD] = "ExecReload",
2866 [SERVICE_EXEC_STOP] = "ExecStop",
2867 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
2868};
2869
2870DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
2871
c952c6ec
LP
2872static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
2873 [NOTIFY_NONE] = "none",
2874 [NOTIFY_MAIN] = "main",
2875 [NOTIFY_ALL] = "all"
2876};
2877
2878DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
2879
308d72dc
LP
2880static const char* const notify_state_table[_NOTIFY_STATE_MAX] = {
2881 [NOTIFY_UNKNOWN] = "unknown",
2882 [NOTIFY_READY] = "ready",
2883 [NOTIFY_RELOADING] = "reloading",
2884 [NOTIFY_STOPPING] = "stopping",
2885};
2886
2887DEFINE_STRING_TABLE_LOOKUP(notify_state, NotifyState);
2888
f42806df
LP
2889static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
2890 [SERVICE_SUCCESS] = "success",
2891 [SERVICE_FAILURE_RESOURCES] = "resources",
2892 [SERVICE_FAILURE_TIMEOUT] = "timeout",
2893 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
2894 [SERVICE_FAILURE_SIGNAL] = "signal",
bb242b7b 2895 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
8d1b002a
LP
2896 [SERVICE_FAILURE_WATCHDOG] = "watchdog",
2897 [SERVICE_FAILURE_START_LIMIT] = "start-limit"
f42806df
LP
2898};
2899
2900DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
2901
87f0e418 2902const UnitVTable service_vtable = {
7d17cfbc 2903 .object_size = sizeof(Service),
718db961
LP
2904 .exec_context_offset = offsetof(Service, exec_context),
2905 .cgroup_context_offset = offsetof(Service, cgroup_context),
2906 .kill_context_offset = offsetof(Service, kill_context),
613b411c 2907 .exec_runtime_offset = offsetof(Service, exec_runtime),
3ef63c31 2908
f975e971
LP
2909 .sections =
2910 "Unit\0"
2911 "Service\0"
2912 "Install\0",
4ad49000 2913 .private_section = "Service",
71645aca 2914
034c6ed7
LP
2915 .init = service_init,
2916 .done = service_done,
a16e1123
LP
2917 .load = service_load,
2918
2919 .coldplug = service_coldplug,
034c6ed7 2920
5cb5a6ff
LP
2921 .dump = service_dump,
2922
2923 .start = service_start,
2924 .stop = service_stop,
2925 .reload = service_reload,
2926
034c6ed7
LP
2927 .can_reload = service_can_reload,
2928
8a0867d6
LP
2929 .kill = service_kill,
2930
a16e1123
LP
2931 .serialize = service_serialize,
2932 .deserialize_item = service_deserialize_item,
2933
5cb5a6ff 2934 .active_state = service_active_state,
10a94420 2935 .sub_state_to_string = service_sub_state_to_string,
5cb5a6ff 2936
701cc384
LP
2937 .check_gc = service_check_gc,
2938 .check_snapshot = service_check_snapshot,
2939
034c6ed7 2940 .sigchld_event = service_sigchld_event,
2c4104f0 2941
fdf20a31 2942 .reset_failed = service_reset_failed,
5632e374 2943
4ad49000 2944 .notify_cgroup_empty = service_notify_cgroup_empty_event,
8c47c732 2945 .notify_message = service_notify_message,
8e274523 2946
05e343b7 2947 .bus_name_owner_change = service_bus_name_owner_change,
05e343b7 2948
c4e2ceae 2949 .bus_interface = "org.freedesktop.systemd1.Service",
718db961 2950 .bus_vtable = bus_service_vtable,
74c964d3
LP
2951 .bus_set_property = bus_service_set_property,
2952 .bus_commit_properties = bus_service_commit_properties,
4139c1b2 2953
68db7a3b 2954 .get_timeout = service_get_timeout,
718db961
LP
2955 .can_transient = true,
2956
c6918296
MS
2957 .status_message_formats = {
2958 .starting_stopping = {
2959 [0] = "Starting %s...",
2960 [1] = "Stopping %s...",
2961 },
2962 .finished_start_job = {
2963 [JOB_DONE] = "Started %s.",
2964 [JOB_FAILED] = "Failed to start %s.",
2965 [JOB_DEPENDENCY] = "Dependency failed for %s.",
2966 [JOB_TIMEOUT] = "Timed out starting %s.",
2967 },
2968 .finished_stop_job = {
2969 [JOB_DONE] = "Stopped %s.",
2970 [JOB_FAILED] = "Stopped (with error) %s.",
2971 [JOB_TIMEOUT] = "Timed out stopping %s.",
2972 },
2973 },
5cb5a6ff 2974};