]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/service.c
pid1: rename unit_check_gc to unit_may_gc
[thirdparty/systemd.git] / src / core / service.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
a7334b09
LP
2/***
3 This file is part of systemd.
4
5 Copyright 2010 Lennart Poettering
6
7 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
8 under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 2.1 of the License, or
a7334b09
LP
10 (at your option) any later version.
11
12 systemd is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 15 Lesser General Public License for more details.
a7334b09 16
5430f7f2 17 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
18 along with systemd; If not, see <http://www.gnu.org/licenses/>.
19***/
20
5cb5a6ff 21#include <errno.h>
034c6ed7 22#include <signal.h>
2c4104f0 23#include <unistd.h>
5cb5a6ff 24
7a0019d3
LP
25#include "sd-messages.h"
26
b5efdb8a 27#include "alloc-util.h"
574634bc 28#include "async.h"
4f5dd394
LP
29#include "bus-error.h"
30#include "bus-kernel.h"
31#include "bus-util.h"
4139c1b2 32#include "dbus-service.h"
f6a6225e 33#include "def.h"
4d1a6904 34#include "env-util.h"
4f5dd394
LP
35#include "escape.h"
36#include "exit-status.h"
3ffd4af2 37#include "fd-util.h"
a5c32cff 38#include "fileio.h"
f97b34a6 39#include "format-util.h"
f4f15635 40#include "fs-util.h"
4f5dd394
LP
41#include "load-dropin.h"
42#include "load-fragment.h"
43#include "log.h"
44#include "manager.h"
6bedfcbb 45#include "parse-util.h"
4f5dd394 46#include "path-util.h"
0b452006 47#include "process-util.h"
3ffd4af2 48#include "service.h"
24882e06 49#include "signal-util.h"
4f5dd394 50#include "special.h"
e266c068 51#include "stdio-util.h"
8b43440b 52#include "string-table.h"
07630cea 53#include "string-util.h"
4f5dd394
LP
54#include "strv.h"
55#include "unit-name.h"
4f5dd394
LP
56#include "unit.h"
57#include "utf8.h"
58#include "util.h"
034c6ed7 59
acbb0225 60static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
87f0e418
LP
61 [SERVICE_DEAD] = UNIT_INACTIVE,
62 [SERVICE_START_PRE] = UNIT_ACTIVATING,
63 [SERVICE_START] = UNIT_ACTIVATING,
64 [SERVICE_START_POST] = UNIT_ACTIVATING,
65 [SERVICE_RUNNING] = UNIT_ACTIVE,
80876c20 66 [SERVICE_EXITED] = UNIT_ACTIVE,
032ff4af 67 [SERVICE_RELOAD] = UNIT_RELOADING,
87f0e418 68 [SERVICE_STOP] = UNIT_DEACTIVATING,
db2cb23b 69 [SERVICE_STOP_SIGABRT] = UNIT_DEACTIVATING,
87f0e418
LP
70 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
71 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
72 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
73 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
74 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
fdf20a31 75 [SERVICE_FAILED] = UNIT_FAILED,
6124958c 76 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
034c6ed7 77};
5cb5a6ff 78
e056b01d
LP
79/* For Type=idle we never want to delay any other jobs, hence we
80 * consider idle jobs active as soon as we start working on them */
81static const UnitActiveState state_translation_table_idle[_SERVICE_STATE_MAX] = {
82 [SERVICE_DEAD] = UNIT_INACTIVE,
83 [SERVICE_START_PRE] = UNIT_ACTIVE,
84 [SERVICE_START] = UNIT_ACTIVE,
85 [SERVICE_START_POST] = UNIT_ACTIVE,
86 [SERVICE_RUNNING] = UNIT_ACTIVE,
87 [SERVICE_EXITED] = UNIT_ACTIVE,
88 [SERVICE_RELOAD] = UNIT_RELOADING,
89 [SERVICE_STOP] = UNIT_DEACTIVATING,
db2cb23b 90 [SERVICE_STOP_SIGABRT] = UNIT_DEACTIVATING,
e056b01d
LP
91 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
92 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
93 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
94 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
95 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
96 [SERVICE_FAILED] = UNIT_FAILED,
97 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
98};
99
718db961
LP
100static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata);
101static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata);
102static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata);
103
842129f5 104static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
308d72dc 105static void service_enter_reload_by_notify(Service *s);
842129f5 106
a16e1123
LP
107static void service_init(Unit *u) {
108 Service *s = SERVICE(u);
109
110 assert(u);
ac155bb8 111 assert(u->load_state == UNIT_STUB);
a16e1123 112
1f19a534
OS
113 s->timeout_start_usec = u->manager->default_timeout_start_usec;
114 s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
115 s->restart_usec = u->manager->default_restart_usec;
36c16a7c 116 s->runtime_max_usec = USEC_INFINITY;
0b86feac 117 s->type = _SERVICE_TYPE_INVALID;
a16e1123 118 s->socket_fd = -1;
a34ceba6 119 s->stdin_fd = s->stdout_fd = s->stderr_fd = -1;
3185a36b 120 s->guess_main_pid = true;
a16e1123 121
a16e1123
LP
122 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
123}
124
5e94833f
LP
125static void service_unwatch_control_pid(Service *s) {
126 assert(s);
127
128 if (s->control_pid <= 0)
129 return;
130
131 unit_unwatch_pid(UNIT(s), s->control_pid);
132 s->control_pid = 0;
133}
134
135static void service_unwatch_main_pid(Service *s) {
136 assert(s);
137
138 if (s->main_pid <= 0)
139 return;
140
141 unit_unwatch_pid(UNIT(s), s->main_pid);
142 s->main_pid = 0;
143}
144
3e52541e
MS
145static void service_unwatch_pid_file(Service *s) {
146 if (!s->pid_file_pathspec)
147 return;
148
f2341e0a 149 log_unit_debug(UNIT(s), "Stopping watch for PID file %s", s->pid_file_pathspec->path);
718db961 150 path_spec_unwatch(s->pid_file_pathspec);
3e52541e 151 path_spec_done(s->pid_file_pathspec);
a1e58e8e 152 s->pid_file_pathspec = mfree(s->pid_file_pathspec);
3e52541e
MS
153}
154
5925dd3c 155static int service_set_main_pid(Service *s, pid_t pid) {
e55224ca
LP
156 pid_t ppid;
157
5925dd3c
LP
158 assert(s);
159
160 if (pid <= 1)
161 return -EINVAL;
162
df0ff127 163 if (pid == getpid_cached())
5925dd3c
LP
164 return -EINVAL;
165
7400b9d2
LP
166 if (s->main_pid == pid && s->main_pid_known)
167 return 0;
168
169 if (s->main_pid != pid) {
170 service_unwatch_main_pid(s);
171 exec_status_start(&s->main_exec_status, pid);
172 }
41efeaec 173
6dfa5494
LP
174 s->main_pid = pid;
175 s->main_pid_known = true;
176
df0ff127 177 if (get_process_ppid(pid, &ppid) >= 0 && ppid != getpid_cached()) {
f2341e0a 178 log_unit_warning(UNIT(s), "Supervising process "PID_FMT" which is not our child. We'll most likely not notice when it exits.", pid);
6dfa5494
LP
179 s->main_pid_alien = true;
180 } else
181 s->main_pid_alien = false;
5925dd3c
LP
182
183 return 0;
184}
185
3e7a1f50 186void service_close_socket_fd(Service *s) {
4f2d528d
LP
187 assert(s);
188
5cc3985e 189 /* Undo the effect of service_set_socket_fd(). */
4f2d528d 190
5cc3985e 191 s->socket_fd = asynchronous_close(s->socket_fd);
6cf6bbc2 192
5cc3985e
LP
193 if (UNIT_ISSET(s->accept_socket)) {
194 socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
195 unit_ref_unset(&s->accept_socket);
196 }
6cf6bbc2
LP
197}
198
a6927d7f
MO
199static void service_stop_watchdog(Service *s) {
200 assert(s);
201
718db961 202 s->watchdog_event_source = sd_event_source_unref(s->watchdog_event_source);
842129f5 203 s->watchdog_timestamp = DUAL_TIMESTAMP_NULL;
a6927d7f
MO
204}
205
2787d83c
M
206static usec_t service_get_watchdog_usec(Service *s) {
207 assert(s);
208
209 if (s->watchdog_override_enable)
210 return s->watchdog_override_usec;
211 else
212 return s->watchdog_usec;
213}
214
842129f5 215static void service_start_watchdog(Service *s) {
bb242b7b 216 int r;
2787d83c 217 usec_t watchdog_usec;
bb242b7b
MO
218
219 assert(s);
220
2787d83c 221 watchdog_usec = service_get_watchdog_usec(s);
4c701096 222 if (IN_SET(watchdog_usec, 0, USEC_INFINITY))
bb242b7b
MO
223 return;
224
718db961 225 if (s->watchdog_event_source) {
2787d83c 226 r = sd_event_source_set_time(s->watchdog_event_source, usec_add(s->watchdog_timestamp.monotonic, watchdog_usec));
718db961 227 if (r < 0) {
f2341e0a 228 log_unit_warning_errno(UNIT(s), r, "Failed to reset watchdog timer: %m");
718db961
LP
229 return;
230 }
231
842129f5 232 r = sd_event_source_set_enabled(s->watchdog_event_source, SD_EVENT_ONESHOT);
c4ef3317 233 } else {
6a0f1f6d
LP
234 r = sd_event_add_time(
235 UNIT(s)->manager->event,
236 &s->watchdog_event_source,
237 CLOCK_MONOTONIC,
2787d83c 238 usec_add(s->watchdog_timestamp.monotonic, watchdog_usec), 0,
6a0f1f6d 239 service_dispatch_watchdog, s);
c4ef3317 240 if (r < 0) {
f2341e0a 241 log_unit_warning_errno(UNIT(s), r, "Failed to add watchdog timer: %m");
c4ef3317
LP
242 return;
243 }
244
7dfbe2e3
TG
245 (void) sd_event_source_set_description(s->watchdog_event_source, "service-watchdog");
246
c4ef3317
LP
247 /* Let's process everything else which might be a sign
248 * of living before we consider a service died. */
249 r = sd_event_source_set_priority(s->watchdog_event_source, SD_EVENT_PRIORITY_IDLE);
250 }
718db961 251
bb242b7b 252 if (r < 0)
f2341e0a 253 log_unit_warning_errno(UNIT(s), r, "Failed to install watchdog timer: %m");
bb242b7b
MO
254}
255
a327431b
DB
256static void service_extend_timeout(Service *s, usec_t extend_timeout_usec) {
257 assert(s);
258
259 if (s->timer_event_source) {
260 uint64_t current = 0, extended = 0;
261 int r;
262
263 if (IN_SET(extend_timeout_usec, 0, USEC_INFINITY))
264 return;
265
266 extended = usec_add(now(CLOCK_MONOTONIC), extend_timeout_usec);
267
268 r = sd_event_source_get_time(s->timer_event_source, &current);
269 if (r < 0)
270 log_unit_error_errno(UNIT(s), r, "Failed to retrieve timeout timer: %m");
271 else if (extended > current) {
272 r = sd_event_source_set_time(s->timer_event_source, extended);
273 if (r < 0)
274 log_unit_warning_errno(UNIT(s), r, "Failed to set timeout timer: %m");
275 }
276
277 if (s->watchdog_event_source) {
278 /* extend watchdog if necessary. We've asked for an extended timeout so we
279 * shouldn't expect a watchdog timeout in the interval in between */
280 r = sd_event_source_get_time(s->watchdog_event_source, &current);
281 if (r < 0) {
282 log_unit_error_errno(UNIT(s), r, "Failed to retrieve watchdog timer: %m");
283 return;
284 }
285
286 if (extended > current) {
287 r = sd_event_source_set_time(s->watchdog_event_source, extended);
288 if (r < 0)
289 log_unit_warning_errno(UNIT(s), r, "Failed to set watchdog timer: %m");
290 }
291 }
292 }
293}
294
a6927d7f
MO
295static void service_reset_watchdog(Service *s) {
296 assert(s);
297
298 dual_timestamp_get(&s->watchdog_timestamp);
842129f5 299 service_start_watchdog(s);
a6927d7f
MO
300}
301
2787d83c
M
302static void service_reset_watchdog_timeout(Service *s, usec_t watchdog_override_usec) {
303 assert(s);
304
305 s->watchdog_override_enable = true;
306 s->watchdog_override_usec = watchdog_override_usec;
307 service_reset_watchdog(s);
308
309 log_unit_debug(UNIT(s), "watchdog_usec="USEC_FMT, s->watchdog_usec);
310 log_unit_debug(UNIT(s), "watchdog_override_usec="USEC_FMT, s->watchdog_override_usec);
311}
312
a354329f
LP
313static void service_fd_store_unlink(ServiceFDStore *fs) {
314
315 if (!fs)
316 return;
317
318 if (fs->service) {
319 assert(fs->service->n_fd_store > 0);
320 LIST_REMOVE(fd_store, fs->service->fd_store, fs);
321 fs->service->n_fd_store--;
322 }
323
324 if (fs->event_source) {
325 sd_event_source_set_enabled(fs->event_source, SD_EVENT_OFF);
326 sd_event_source_unref(fs->event_source);
327 }
328
8dd4c05b 329 free(fs->fdname);
a354329f
LP
330 safe_close(fs->fd);
331 free(fs);
332}
333
f0bfbfac
ZJS
334static void service_release_fd_store(Service *s) {
335 assert(s);
336
7eb2a8a1
LP
337 if (s->n_keep_fd_store > 0)
338 return;
339
f0bfbfac
ZJS
340 log_unit_debug(UNIT(s), "Releasing all stored fds");
341 while (s->fd_store)
342 service_fd_store_unlink(s->fd_store);
343
344 assert(s->n_fd_store == 0);
345}
346
7eb2a8a1 347static void service_release_resources(Unit *u) {
a354329f
LP
348 Service *s = SERVICE(u);
349
350 assert(s);
351
a34ceba6 352 if (!s->fd_store && s->stdin_fd < 0 && s->stdout_fd < 0 && s->stderr_fd < 0)
a354329f
LP
353 return;
354
f0bfbfac 355 log_unit_debug(u, "Releasing resources.");
a354329f 356
a34ceba6
LP
357 s->stdin_fd = safe_close(s->stdin_fd);
358 s->stdout_fd = safe_close(s->stdout_fd);
359 s->stderr_fd = safe_close(s->stderr_fd);
360
7eb2a8a1 361 service_release_fd_store(s);
a354329f
LP
362}
363
87f0e418
LP
364static void service_done(Unit *u) {
365 Service *s = SERVICE(u);
44d8db9e
LP
366
367 assert(s);
368
a1e58e8e
LP
369 s->pid_file = mfree(s->pid_file);
370 s->status_text = mfree(s->status_text);
efe6e7d3 371
e8a565cb 372 s->exec_runtime = exec_runtime_unref(s->exec_runtime, false);
e537352b 373 exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
44d8db9e 374 s->control_command = NULL;
867b3b7d 375 s->main_command = NULL;
44d8db9e 376
29206d46
LP
377 dynamic_creds_unref(&s->dynamic_creds);
378
37520c1b
LP
379 exit_status_set_free(&s->restart_prevent_status);
380 exit_status_set_free(&s->restart_force_status);
381 exit_status_set_free(&s->success_status);
96342de6 382
44d8db9e
LP
383 /* This will leak a process, but at least no memory or any of
384 * our resources */
5e94833f
LP
385 service_unwatch_main_pid(s);
386 service_unwatch_control_pid(s);
3e52541e 387 service_unwatch_pid_file(s);
44d8db9e 388
05e343b7 389 if (s->bus_name) {
ac155bb8 390 unit_unwatch_bus_name(u, s->bus_name);
a1e58e8e 391 s->bus_name = mfree(s->bus_name);
05e343b7
LP
392 }
393
d8ccf5fd
DM
394 s->bus_name_owner = mfree(s->bus_name_owner);
395
4f2d528d 396 service_close_socket_fd(s);
9d565427 397 s->peer = socket_peer_unref(s->peer);
4f2d528d 398
57020a3a 399 unit_ref_unset(&s->accept_socket);
f976f3f6 400
bb242b7b
MO
401 service_stop_watchdog(s);
402
718db961 403 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
a354329f 404
7eb2a8a1 405 service_release_resources(u);
718db961
LP
406}
407
2339fc93
LP
408static int on_fd_store_io(sd_event_source *e, int fd, uint32_t revents, void *userdata) {
409 ServiceFDStore *fs = userdata;
410
411 assert(e);
412 assert(fs);
413
414 /* If we get either EPOLLHUP or EPOLLERR, it's time to remove this entry from the fd store */
16f70d63
ZJS
415 log_unit_debug(UNIT(fs->service),
416 "Received %s on stored fd %d (%s), closing.",
417 revents & EPOLLERR ? "EPOLLERR" : "EPOLLHUP",
418 fs->fd, strna(fs->fdname));
2339fc93
LP
419 service_fd_store_unlink(fs);
420 return 0;
421}
422
8dd4c05b 423static int service_add_fd_store(Service *s, int fd, const char *name) {
2339fc93
LP
424 ServiceFDStore *fs;
425 int r;
426
9021ff17
ZJS
427 /* fd is always consumed if we return >= 0 */
428
2339fc93
LP
429 assert(s);
430 assert(fd >= 0);
431
432 if (s->n_fd_store >= s->n_fd_store_max)
b0924635
ZJS
433 return -EXFULL; /* Our store is full.
434 * Use this errno rather than E[NM]FILE to distinguish from
435 * the case where systemd itself hits the file limit. */
2339fc93
LP
436
437 LIST_FOREACH(fd_store, fs, s->fd_store) {
438 r = same_fd(fs->fd, fd);
439 if (r < 0)
440 return r;
441 if (r > 0) {
2339fc93 442 safe_close(fd);
9021ff17 443 return 0; /* fd already included */
2339fc93
LP
444 }
445 }
446
447 fs = new0(ServiceFDStore, 1);
448 if (!fs)
449 return -ENOMEM;
450
451 fs->fd = fd;
452 fs->service = s;
8dd4c05b 453 fs->fdname = strdup(name ?: "stored");
17dec0f7 454 if (!fs->fdname) {
455 free(fs);
8dd4c05b 456 return -ENOMEM;
17dec0f7 457 }
2339fc93
LP
458
459 r = sd_event_add_io(UNIT(s)->manager->event, &fs->event_source, fd, 0, on_fd_store_io, fs);
3ceb72e5 460 if (r < 0 && r != -EPERM) { /* EPERM indicates fds that aren't pollable, which is OK */
8dd4c05b 461 free(fs->fdname);
2339fc93
LP
462 free(fs);
463 return r;
3ceb72e5
LP
464 } else if (r >= 0)
465 (void) sd_event_source_set_description(fs->event_source, "service-fd-store");
7dfbe2e3 466
2339fc93
LP
467 LIST_PREPEND(fd_store, s->fd_store, fs);
468 s->n_fd_store++;
469
9021ff17 470 return 1; /* fd newly stored */
2339fc93
LP
471}
472
8dd4c05b 473static int service_add_fd_store_set(Service *s, FDSet *fds, const char *name) {
2339fc93
LP
474 int r;
475
476 assert(s);
477
b0924635 478 while (fdset_size(fds) > 0) {
2339fc93
LP
479 _cleanup_close_ int fd = -1;
480
481 fd = fdset_steal_first(fds);
482 if (fd < 0)
483 break;
484
8dd4c05b 485 r = service_add_fd_store(s, fd, name);
b0924635
ZJS
486 if (r == -EXFULL)
487 return log_unit_warning_errno(UNIT(s), r,
488 "Cannot store more fds than FileDescriptorStoreMax=%u, closing remaining.",
489 s->n_fd_store_max);
2339fc93 490 if (r < 0)
b0924635 491 return log_unit_error_errno(UNIT(s), r, "Failed to add fd to store: %m");
9021ff17 492 if (r > 0)
16f70d63 493 log_unit_debug(UNIT(s), "Added fd %u (%s) to fd store.", fd, strna(name));
9021ff17 494 fd = -1;
2339fc93
LP
495 }
496
2339fc93
LP
497 return 0;
498}
499
e78ee06d
LP
500static void service_remove_fd_store(Service *s, const char *name) {
501 ServiceFDStore *fs, *n;
502
503 assert(s);
504 assert(name);
505
506 LIST_FOREACH_SAFE(fd_store, fs, n, s->fd_store) {
507 if (!streq(fs->fdname, name))
508 continue;
509
510 log_unit_debug(UNIT(s), "Got explicit request to remove fd %i (%s), closing.", fs->fd, name);
511 service_fd_store_unlink(fs);
512 }
513}
514
718db961
LP
515static int service_arm_timer(Service *s, usec_t usec) {
516 int r;
517
518 assert(s);
519
718db961 520 if (s->timer_event_source) {
36c16a7c 521 r = sd_event_source_set_time(s->timer_event_source, usec);
718db961
LP
522 if (r < 0)
523 return r;
524
525 return sd_event_source_set_enabled(s->timer_event_source, SD_EVENT_ONESHOT);
526 }
527
36c16a7c
LP
528 if (usec == USEC_INFINITY)
529 return 0;
530
7dfbe2e3 531 r = sd_event_add_time(
6a0f1f6d
LP
532 UNIT(s)->manager->event,
533 &s->timer_event_source,
534 CLOCK_MONOTONIC,
36c16a7c 535 usec, 0,
6a0f1f6d 536 service_dispatch_timer, s);
7dfbe2e3
TG
537 if (r < 0)
538 return r;
539
540 (void) sd_event_source_set_description(s->timer_event_source, "service-timer");
541
542 return 0;
44d8db9e
LP
543}
544
243b1432
LP
545static int service_verify(Service *s) {
546 assert(s);
547
1124fe6f 548 if (UNIT(s)->load_state != UNIT_LOADED)
243b1432
LP
549 return 0;
550
96fb8242 551 if (!s->exec_command[SERVICE_EXEC_START] && !s->exec_command[SERVICE_EXEC_STOP]) {
f2341e0a 552 log_unit_error(UNIT(s), "Service lacks both ExecStart= and ExecStop= setting. Refusing.");
243b1432
LP
553 return -EINVAL;
554 }
555
96fb8242 556 if (s->type != SERVICE_ONESHOT && !s->exec_command[SERVICE_EXEC_START]) {
f2341e0a 557 log_unit_error(UNIT(s), "Service has no ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
96fb8242
LP
558 return -EINVAL;
559 }
560
561 if (!s->remain_after_exit && !s->exec_command[SERVICE_EXEC_START]) {
f2341e0a 562 log_unit_error(UNIT(s), "Service has no ExecStart= setting, which is only allowed for RemainAfterExit=yes services. Refusing.");
96fb8242
LP
563 return -EINVAL;
564 }
565
566 if (s->type != SERVICE_ONESHOT && s->exec_command[SERVICE_EXEC_START]->command_next) {
f2341e0a 567 log_unit_error(UNIT(s), "Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
6cf6bbc2
LP
568 return -EINVAL;
569 }
570
b0693d30 571 if (s->type == SERVICE_ONESHOT && s->restart != SERVICE_RESTART_NO) {
f2341e0a 572 log_unit_error(UNIT(s), "Service has Restart= setting other than no, which isn't allowed for Type=oneshot services. Refusing.");
37520c1b
LP
573 return -EINVAL;
574 }
575
55ebf98c 576 if (s->type == SERVICE_ONESHOT && !exit_status_set_is_empty(&s->restart_force_status)) {
f2341e0a 577 log_unit_error(UNIT(s), "Service has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.");
b0693d30
MW
578 return -EINVAL;
579 }
580
05e343b7 581 if (s->type == SERVICE_DBUS && !s->bus_name) {
f2341e0a 582 log_unit_error(UNIT(s), "Service is of type D-Bus but no D-Bus service name has been specified. Refusing.");
4d0e5dbd
LP
583 return -EINVAL;
584 }
585
7e2668c6 586 if (s->bus_name && s->type != SERVICE_DBUS)
f2341e0a 587 log_unit_warning(UNIT(s), "Service has a D-Bus service name specified, but is not of type dbus. Ignoring.");
7e2668c6 588
3742095b 589 if (s->exec_context.pam_name && !IN_SET(s->kill_context.kill_mode, KILL_CONTROL_GROUP, KILL_MIXED)) {
f2341e0a 590 log_unit_error(UNIT(s), "Service has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.");
05e343b7
LP
591 return -EINVAL;
592 }
593
6b7e5923
PS
594 if (s->usb_function_descriptors && !s->usb_function_strings)
595 log_unit_warning(UNIT(s), "Service has USBFunctionDescriptors= setting, but no USBFunctionStrings=. Ignoring.");
596
597 if (!s->usb_function_descriptors && s->usb_function_strings)
598 log_unit_warning(UNIT(s), "Service has USBFunctionStrings= setting, but no USBFunctionDescriptors=. Ignoring.");
599
36c16a7c
LP
600 if (s->runtime_max_usec != USEC_INFINITY && s->type == SERVICE_ONESHOT)
601 log_unit_warning(UNIT(s), "MaxRuntimeSec= has no effect in combination with Type=oneshot. Ignoring.");
602
243b1432
LP
603 return 0;
604}
605
a40eb732
LP
606static int service_add_default_dependencies(Service *s) {
607 int r;
608
609 assert(s);
610
45f06b34
LP
611 if (!UNIT(s)->default_dependencies)
612 return 0;
613
a40eb732
LP
614 /* Add a number of automatic dependencies useful for the
615 * majority of services. */
616
463d0d15 617 if (MANAGER_IS_SYSTEM(UNIT(s)->manager)) {
cb4c247d
LP
618 /* First, pull in the really early boot stuff, and
619 * require it, so that we fail if we can't acquire
620 * it. */
621
eef85c4a 622 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true, UNIT_DEPENDENCY_DEFAULT);
cb4c247d
LP
623 if (r < 0)
624 return r;
625 } else {
626
627 /* In the --user instance there's no sysinit.target,
628 * in that case require basic.target instead. */
629
eef85c4a 630 r = unit_add_dependency_by_name(UNIT(s), UNIT_REQUIRES, SPECIAL_BASIC_TARGET, NULL, true, UNIT_DEPENDENCY_DEFAULT);
cb4c247d
LP
631 if (r < 0)
632 return r;
633 }
634
635 /* Second, if the rest of the base system is in the same
636 * transaction, order us after it, but do not pull it in or
637 * even require it. */
eef85c4a 638 r = unit_add_dependency_by_name(UNIT(s), UNIT_AFTER, SPECIAL_BASIC_TARGET, NULL, true, UNIT_DEPENDENCY_DEFAULT);
fccd44ec
KS
639 if (r < 0)
640 return r;
a40eb732 641
cb4c247d 642 /* Third, add us in for normal shutdown. */
eef85c4a 643 return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true, UNIT_DEPENDENCY_DEFAULT);
a40eb732
LP
644}
645
4dfc092a
LP
646static void service_fix_output(Service *s) {
647 assert(s);
648
08f3be7a
LP
649 /* If nothing has been explicitly configured, patch default output in. If input is socket/tty we avoid this
650 * however, since in that case we want output to default to the same place as we read input from. */
4dfc092a
LP
651
652 if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
653 s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
654 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 655 s->exec_context.std_error = UNIT(s)->manager->default_std_error;
4dfc092a
LP
656
657 if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
658 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 659 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
08f3be7a
LP
660
661 if (s->exec_context.std_input == EXEC_INPUT_NULL &&
662 s->exec_context.stdin_data_size > 0)
663 s->exec_context.std_input = EXEC_INPUT_DATA;
4dfc092a
LP
664}
665
45f06b34
LP
666static int service_setup_bus_name(Service *s) {
667 int r;
668
669 assert(s);
670
671 if (!s->bus_name)
672 return 0;
673
eef85c4a 674 r = unit_add_dependency_by_name(UNIT(s), UNIT_REQUIRES, SPECIAL_DBUS_SOCKET, NULL, true, UNIT_DEPENDENCY_FILE);
222953e8
DR
675 if (r < 0)
676 return log_unit_error_errno(UNIT(s), r, "Failed to add dependency on " SPECIAL_DBUS_SOCKET ": %m");
45f06b34 677
a132bef0 678 /* We always want to be ordered against dbus.socket if both are in the transaction. */
eef85c4a 679 r = unit_add_dependency_by_name(UNIT(s), UNIT_AFTER, SPECIAL_DBUS_SOCKET, NULL, true, UNIT_DEPENDENCY_FILE);
45f06b34 680 if (r < 0)
92bed462 681 return log_unit_error_errno(UNIT(s), r, "Failed to add dependency on " SPECIAL_DBUS_SOCKET ": %m");
45f06b34
LP
682
683 r = unit_watch_bus_name(UNIT(s), s->bus_name);
684 if (r == -EEXIST)
685 return log_unit_error_errno(UNIT(s), r, "Two services allocated for the same bus name %s, refusing operation.", s->bus_name);
686 if (r < 0)
687 return log_unit_error_errno(UNIT(s), r, "Cannot watch bus name %s: %m", s->bus_name);
688
689 return 0;
690}
691
8545f7ce
LP
692static int service_add_extras(Service *s) {
693 int r;
694
695 assert(s);
696
697 if (s->type == _SERVICE_TYPE_INVALID) {
698 /* Figure out a type automatically */
699 if (s->bus_name)
700 s->type = SERVICE_DBUS;
701 else if (s->exec_command[SERVICE_EXEC_START])
702 s->type = SERVICE_SIMPLE;
703 else
704 s->type = SERVICE_ONESHOT;
705 }
706
707 /* Oneshot services have disabled start timeout by default */
708 if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
36c16a7c 709 s->timeout_start_usec = USEC_INFINITY;
8545f7ce
LP
710
711 service_fix_output(s);
712
713 r = unit_patch_contexts(UNIT(s));
714 if (r < 0)
715 return r;
716
717 r = unit_add_exec_dependencies(UNIT(s), &s->exec_context);
718 if (r < 0)
719 return r;
720
d79200e2 721 r = unit_set_default_slice(UNIT(s));
8545f7ce
LP
722 if (r < 0)
723 return r;
724
725 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
726 s->notify_access = NOTIFY_MAIN;
727
728 if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
729 s->notify_access = NOTIFY_MAIN;
730
45f06b34
LP
731 r = service_add_default_dependencies(s);
732 if (r < 0)
733 return r;
8545f7ce 734
45f06b34
LP
735 r = service_setup_bus_name(s);
736 if (r < 0)
737 return r;
8545f7ce
LP
738
739 return 0;
740}
741
e537352b 742static int service_load(Unit *u) {
e537352b 743 Service *s = SERVICE(u);
8bb2d17d 744 int r;
e537352b
LP
745
746 assert(s);
1e2e8133 747
5cb5a6ff 748 /* Load a .service file */
c2756a68
LP
749 r = unit_load_fragment(u);
750 if (r < 0)
5cb5a6ff
LP
751 return r;
752
23a177ef 753 /* Still nothing found? Then let's give up */
ac155bb8 754 if (u->load_state == UNIT_STUB)
23a177ef 755 return -ENOENT;
034c6ed7 756
23a177ef 757 /* This is a new unit? Then let's add in some extras */
ac155bb8 758 if (u->load_state == UNIT_LOADED) {
c2756a68
LP
759
760 /* We were able to load something, then let's add in
761 * the dropin directories. */
762 r = unit_load_dropin(u);
763 if (r < 0)
764 return r;
765
8545f7ce
LP
766 /* This is a new unit? Then let's add in some
767 * extras */
768 r = service_add_extras(s);
598459ce
LP
769 if (r < 0)
770 return r;
8e274523
LP
771 }
772
243b1432 773 return service_verify(s);
034c6ed7
LP
774}
775
87f0e418 776static void service_dump(Unit *u, FILE *f, const char *prefix) {
f2e18ef1
YW
777 char buf_restart[FORMAT_TIMESPAN_MAX], buf_start[FORMAT_TIMESPAN_MAX], buf_stop[FORMAT_TIMESPAN_MAX];
778 char buf_runtime[FORMAT_TIMESPAN_MAX], buf_watchdog[FORMAT_TIMESPAN_MAX];
5cb5a6ff 779 ServiceExecCommand c;
87f0e418 780 Service *s = SERVICE(u);
47be870b 781 const char *prefix2;
5cb5a6ff
LP
782
783 assert(s);
784
4c940960 785 prefix = strempty(prefix);
63c372cb 786 prefix2 = strjoina(prefix, "\t");
44d8db9e 787
5cb5a6ff 788 fprintf(f,
81a2b7ce 789 "%sService State: %s\n"
f42806df
LP
790 "%sResult: %s\n"
791 "%sReload Result: %s\n"
81a2b7ce 792 "%sPermissionsStartOnly: %s\n"
8e274523 793 "%sRootDirectoryStartOnly: %s\n"
02ee865a 794 "%sRemainAfterExit: %s\n"
3185a36b 795 "%sGuessMainPID: %s\n"
c952c6ec 796 "%sType: %s\n"
2cf3143a 797 "%sRestart: %s\n"
308d72dc
LP
798 "%sNotifyAccess: %s\n"
799 "%sNotifyState: %s\n",
81a2b7ce 800 prefix, service_state_to_string(s->state),
f42806df
LP
801 prefix, service_result_to_string(s->result),
802 prefix, service_result_to_string(s->reload_result),
81a2b7ce 803 prefix, yes_no(s->permissions_start_only),
8e274523 804 prefix, yes_no(s->root_directory_start_only),
02ee865a 805 prefix, yes_no(s->remain_after_exit),
3185a36b 806 prefix, yes_no(s->guess_main_pid),
c952c6ec 807 prefix, service_type_to_string(s->type),
2cf3143a 808 prefix, service_restart_to_string(s->restart),
308d72dc
LP
809 prefix, notify_access_to_string(s->notify_access),
810 prefix, notify_state_to_string(s->notify_state));
5cb5a6ff 811
70123e68
LP
812 if (s->control_pid > 0)
813 fprintf(f,
ccd06097
ZJS
814 "%sControl PID: "PID_FMT"\n",
815 prefix, s->control_pid);
70123e68
LP
816
817 if (s->main_pid > 0)
818 fprintf(f,
ccd06097 819 "%sMain PID: "PID_FMT"\n"
6dfa5494
LP
820 "%sMain PID Known: %s\n"
821 "%sMain PID Alien: %s\n",
ccd06097 822 prefix, s->main_pid,
6dfa5494
LP
823 prefix, yes_no(s->main_pid_known),
824 prefix, yes_no(s->main_pid_alien));
70123e68 825
034c6ed7
LP
826 if (s->pid_file)
827 fprintf(f,
828 "%sPIDFile: %s\n",
829 prefix, s->pid_file);
830
05e343b7
LP
831 if (s->bus_name)
832 fprintf(f,
833 "%sBusName: %s\n"
834 "%sBus Name Good: %s\n",
835 prefix, s->bus_name,
836 prefix, yes_no(s->bus_name_good));
837
9dfb64f8
ZJS
838 if (UNIT_ISSET(s->accept_socket))
839 fprintf(f,
840 "%sAccept Socket: %s\n",
841 prefix, UNIT_DEREF(s->accept_socket)->id);
842
c9d41699
YW
843 fprintf(f,
844 "%sRestartSec: %s\n"
845 "%sTimeoutStartSec: %s\n"
846 "%sTimeoutStopSec: %s\n"
847 "%sRuntimeMaxSec: %s\n"
848 "%sWatchdogSec: %s\n",
849 prefix, format_timespan(buf_restart, sizeof(buf_restart), s->restart_usec, USEC_PER_SEC),
850 prefix, format_timespan(buf_start, sizeof(buf_start), s->timeout_start_usec, USEC_PER_SEC),
851 prefix, format_timespan(buf_stop, sizeof(buf_stop), s->timeout_stop_usec, USEC_PER_SEC),
852 prefix, format_timespan(buf_runtime, sizeof(buf_runtime), s->runtime_max_usec, USEC_PER_SEC),
853 prefix, format_timespan(buf_watchdog, sizeof(buf_watchdog), s->watchdog_usec, USEC_PER_SEC));
854
4819ff03 855 kill_context_dump(&s->kill_context, f, prefix);
5cb5a6ff
LP
856 exec_context_dump(&s->exec_context, f, prefix);
857
e537352b 858 for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
5cb5a6ff 859
44d8db9e
LP
860 if (!s->exec_command[c])
861 continue;
862
40d50879 863 fprintf(f, "%s-> %s:\n",
94f04347 864 prefix, service_exec_command_to_string(c));
44d8db9e
LP
865
866 exec_command_dump_list(s->exec_command[c], f, prefix2);
5cb5a6ff 867 }
44d8db9e 868
8c47c732
LP
869 if (s->status_text)
870 fprintf(f, "%sStatus Text: %s\n",
871 prefix, s->status_text);
a354329f 872
ece174c5 873 if (s->n_fd_store_max > 0)
a354329f
LP
874 fprintf(f,
875 "%sFile Descriptor Store Max: %u\n"
876 "%sFile Descriptor Store Current: %u\n",
877 prefix, s->n_fd_store_max,
878 prefix, s->n_fd_store);
18f573aa
LP
879
880 cgroup_context_dump(&s->cgroup_context, f, prefix);
5cb5a6ff
LP
881}
882
db256aab
LP
883static int service_is_suitable_main_pid(Service *s, pid_t pid, int prio) {
884 Unit *owner;
885
886 assert(s);
887 assert(pid_is_valid(pid));
888
889 /* Checks whether the specified PID is suitable as main PID for this service. returns negative if not, 0 if the
890 * PID is questionnable but should be accepted if the source of configuration is trusted. > 0 if the PID is
891 * good */
892
893 if (pid == getpid_cached() || pid == 1) {
894 log_unit_full(UNIT(s), prio, 0, "New main PID "PID_FMT" is the manager, refusing.", pid);
895 return -EPERM;
896 }
897
898 if (pid == s->control_pid) {
899 log_unit_full(UNIT(s), prio, 0, "New main PID "PID_FMT" is the control process, refusing.", pid);
900 return -EPERM;
901 }
902
903 if (!pid_is_alive(pid)) {
904 log_unit_full(UNIT(s), prio, 0, "New main PID "PID_FMT" does not exist or is a zombie.", pid);
905 return -ESRCH;
906 }
907
908 owner = manager_get_unit_by_pid(UNIT(s)->manager, pid);
909 if (owner == UNIT(s)) {
910 log_unit_debug(UNIT(s), "New main PID "PID_FMT" belongs to service, we are happy.", pid);
911 return 1; /* Yay, it's definitely a good PID */
912 }
913
914 return 0; /* Hmm it's a suspicious PID, let's accept it if configuration source is trusted */
915}
916
c5419d42 917static int service_load_pid_file(Service *s, bool may_warn) {
db256aab 918 char procfs[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
73969ab6 919 bool questionable_pid_file = false;
7fd1b19b 920 _cleanup_free_ char *k = NULL;
db256aab
LP
921 _cleanup_close_ int fd = -1;
922 int r, prio;
5925dd3c 923 pid_t pid;
034c6ed7
LP
924
925 assert(s);
926
034c6ed7 927 if (!s->pid_file)
13230d5d 928 return -ENOENT;
034c6ed7 929
db256aab
LP
930 prio = may_warn ? LOG_INFO : LOG_DEBUG;
931
932 fd = chase_symlinks(s->pid_file, NULL, CHASE_OPEN|CHASE_SAFE, NULL);
73969ab6
LP
933 if (fd == -EPERM) {
934 log_unit_full(UNIT(s), LOG_DEBUG, fd, "Permission denied while opening PID file or potentially unsafe symlink chain, will now retry with relaxed checks: %s", s->pid_file);
935
936 questionable_pid_file = true;
937
938 fd = chase_symlinks(s->pid_file, NULL, CHASE_OPEN, NULL);
939 }
db256aab
LP
940 if (fd < 0)
941 return log_unit_full(UNIT(s), prio, fd, "Can't open PID file %s (yet?) after %s: %m", s->pid_file, service_state_to_string(s->state));
942
943 /* Let's read the PID file now that we chased it down. But we need to convert the O_PATH fd chase_symlinks() returned us into a proper fd first. */
944 xsprintf(procfs, "/proc/self/fd/%i", fd);
945 r = read_one_line_file(procfs, &k);
946 if (r < 0)
947 return log_unit_error_errno(UNIT(s), r, "Can't convert PID files %s O_PATH file descriptor to proper file descriptor: %m", s->pid_file);
034c6ed7 948
5925dd3c 949 r = parse_pid(k, &pid);
db256aab
LP
950 if (r < 0)
951 return log_unit_full(UNIT(s), prio, r, "Failed to parse PID from file %s: %m", s->pid_file);
952
953 if (s->main_pid_known && pid == s->main_pid)
954 return 0;
955
956 r = service_is_suitable_main_pid(s, pid, prio);
957 if (r < 0)
5925dd3c 958 return r;
db256aab
LP
959 if (r == 0) {
960 struct stat st;
406eaf93 961
73969ab6
LP
962 if (questionable_pid_file) {
963 log_unit_error(UNIT(s), "Refusing to accept PID outside of service control group, acquired through unsafe symlink chain: %s", s->pid_file);
964 return -EPERM;
965 }
966
db256aab
LP
967 /* Hmm, it's not clear if the new main PID is safe. Let's allow this if the PID file is owned by root */
968
969 if (fstat(fd, &st) < 0)
970 return log_unit_error_errno(UNIT(s), errno, "Failed to fstat() PID file O_PATH fd: %m");
971
972 if (st.st_uid != 0) {
973 log_unit_error(UNIT(s), "New main PID "PID_FMT" does not belong to service, and PID file is not owned by root. Refusing.", pid);
974 return -EPERM;
975 }
976
977 log_unit_debug(UNIT(s), "New main PID "PID_FMT" does not belong to service, but we'll accept it since PID file is owned by root.", pid);
e10c9985
YS
978 }
979
db01f8b3 980 if (s->main_pid_known) {
f2341e0a 981 log_unit_debug(UNIT(s), "Main PID changing: "PID_FMT" -> "PID_FMT, s->main_pid, pid);
8bb2d17d 982
db01f8b3
MS
983 service_unwatch_main_pid(s);
984 s->main_pid_known = false;
3a111838 985 } else
f2341e0a 986 log_unit_debug(UNIT(s), "Main PID loaded: "PID_FMT, pid);
db01f8b3 987
117dcc57
ZJS
988 r = service_set_main_pid(s, pid);
989 if (r < 0)
16f6025e
LP
990 return r;
991
117dcc57 992 r = unit_watch_pid(UNIT(s), pid);
e8b509d3
LP
993 if (r < 0) /* FIXME: we need to do something here */
994 return log_unit_warning_errno(UNIT(s), r, "Failed to watch PID "PID_FMT" for service: %m", pid);
034c6ed7 995
db256aab 996 return 1;
034c6ed7
LP
997}
998
783e05d6 999static void service_search_main_pid(Service *s) {
efdb0237 1000 pid_t pid = 0;
4fbf50b3
LP
1001 int r;
1002
1003 assert(s);
1004
3185a36b
LP
1005 /* If we know it anyway, don't ever fallback to unreliable
1006 * heuristics */
4fbf50b3 1007 if (s->main_pid_known)
783e05d6 1008 return;
4fbf50b3 1009
3185a36b 1010 if (!s->guess_main_pid)
783e05d6 1011 return;
3185a36b 1012
4fbf50b3
LP
1013 assert(s->main_pid <= 0);
1014
783e05d6
ZJS
1015 if (unit_search_main_pid(UNIT(s), &pid) < 0)
1016 return;
4fbf50b3 1017
f2341e0a 1018 log_unit_debug(UNIT(s), "Main PID guessed: "PID_FMT, pid);
783e05d6
ZJS
1019 if (service_set_main_pid(s, pid) < 0)
1020 return;
4fbf50b3 1021
117dcc57 1022 r = unit_watch_pid(UNIT(s), pid);
783e05d6 1023 if (r < 0)
4fbf50b3 1024 /* FIXME: we need to do something here */
f2341e0a 1025 log_unit_warning_errno(UNIT(s), r, "Failed to watch PID "PID_FMT" from: %m", pid);
4fbf50b3
LP
1026}
1027
034c6ed7
LP
1028static void service_set_state(Service *s, ServiceState state) {
1029 ServiceState old_state;
e056b01d 1030 const UnitActiveState *table;
842129f5 1031
5cb5a6ff
LP
1032 assert(s);
1033
e056b01d
LP
1034 table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1035
034c6ed7 1036 old_state = s->state;
5cb5a6ff 1037 s->state = state;
034c6ed7 1038
3a111838
MS
1039 service_unwatch_pid_file(s);
1040
842129f5
LP
1041 if (!IN_SET(state,
1042 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
36c16a7c 1043 SERVICE_RUNNING,
842129f5 1044 SERVICE_RELOAD,
57614eb1 1045 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
842129f5
LP
1046 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
1047 SERVICE_AUTO_RESTART))
718db961 1048 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 1049
842129f5
LP
1050 if (!IN_SET(state,
1051 SERVICE_START, SERVICE_START_POST,
1052 SERVICE_RUNNING, SERVICE_RELOAD,
57614eb1 1053 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
bf108e55 1054 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1055 service_unwatch_main_pid(s);
867b3b7d
LP
1056 s->main_command = NULL;
1057 }
034c6ed7 1058
842129f5
LP
1059 if (!IN_SET(state,
1060 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1061 SERVICE_RELOAD,
57614eb1 1062 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
842129f5 1063 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1064 service_unwatch_control_pid(s);
034c6ed7 1065 s->control_command = NULL;
a16e1123 1066 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
e537352b 1067 }
034c6ed7 1068
a911bb9a
LP
1069 if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1070 unit_unwatch_all_pids(UNIT(s));
1071
842129f5
LP
1072 if (!IN_SET(state,
1073 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1074 SERVICE_RUNNING, SERVICE_RELOAD,
57614eb1
LP
1075 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1076 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
5cc3985e 1077 !(state == SERVICE_DEAD && UNIT(s)->job))
4f2d528d
LP
1078 service_close_socket_fd(s);
1079
7596e9e1 1080 if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
a6927d7f
MO
1081 service_stop_watchdog(s);
1082
f6023656
LP
1083 /* For the inactive states unit_notify() will trim the cgroup,
1084 * but for exit we have to do that ourselves... */
2c289ea8 1085 if (state == SERVICE_EXITED && !MANAGER_IS_RELOADING(UNIT(s)->manager))
efdb0237 1086 unit_prune_cgroup(UNIT(s));
f6023656 1087
e537352b 1088 if (old_state != state)
f2341e0a 1089 log_unit_debug(UNIT(s), "Changed %s -> %s", service_state_to_string(old_state), service_state_to_string(state));
acbb0225 1090
e056b01d 1091 unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
034c6ed7
LP
1092}
1093
36c16a7c
LP
1094static usec_t service_coldplug_timeout(Service *s) {
1095 assert(s);
1096
1097 switch (s->deserialized_state) {
1098
1099 case SERVICE_START_PRE:
1100 case SERVICE_START:
1101 case SERVICE_START_POST:
1102 case SERVICE_RELOAD:
1103 return usec_add(UNIT(s)->state_change_timestamp.monotonic, s->timeout_start_usec);
1104
1105 case SERVICE_RUNNING:
1106 return usec_add(UNIT(s)->active_enter_timestamp.monotonic, s->runtime_max_usec);
1107
1108 case SERVICE_STOP:
1109 case SERVICE_STOP_SIGABRT:
1110 case SERVICE_STOP_SIGTERM:
1111 case SERVICE_STOP_SIGKILL:
1112 case SERVICE_STOP_POST:
1113 case SERVICE_FINAL_SIGTERM:
1114 case SERVICE_FINAL_SIGKILL:
1115 return usec_add(UNIT(s)->state_change_timestamp.monotonic, s->timeout_stop_usec);
1116
1117 case SERVICE_AUTO_RESTART:
1118 return usec_add(UNIT(s)->inactive_enter_timestamp.monotonic, s->restart_usec);
1119
1120 default:
1121 return USEC_INFINITY;
1122 }
1123}
1124
be847e82 1125static int service_coldplug(Unit *u) {
a16e1123
LP
1126 Service *s = SERVICE(u);
1127 int r;
1128
1129 assert(s);
1130 assert(s->state == SERVICE_DEAD);
1131
930d2838
LP
1132 if (s->deserialized_state == s->state)
1133 return 0;
6c12b52e 1134
36c16a7c
LP
1135 r = service_arm_timer(s, service_coldplug_timeout(s));
1136 if (r < 0)
1137 return r;
a911bb9a 1138
930d2838
LP
1139 if (s->main_pid > 0 &&
1140 pid_is_unwaited(s->main_pid) &&
9acac212 1141 (IN_SET(s->deserialized_state,
930d2838
LP
1142 SERVICE_START, SERVICE_START_POST,
1143 SERVICE_RUNNING, SERVICE_RELOAD,
1144 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1145 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
1146 r = unit_watch_pid(UNIT(s), s->main_pid);
1147 if (r < 0)
1148 return r;
1149 }
bb242b7b 1150
930d2838
LP
1151 if (s->control_pid > 0 &&
1152 pid_is_unwaited(s->control_pid) &&
1153 IN_SET(s->deserialized_state,
1154 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1155 SERVICE_RELOAD,
1156 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1157 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1158 r = unit_watch_pid(UNIT(s), s->control_pid);
1159 if (r < 0)
1160 return r;
a16e1123 1161 }
92c1622e 1162
930d2838
LP
1163 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1164 unit_watch_all_pids(UNIT(s));
1165
1166 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1167 service_start_watchdog(s);
1168
e8a565cb 1169 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART)) {
29206d46 1170 (void) unit_setup_dynamic_creds(u);
e8a565cb
YW
1171 (void) unit_setup_exec_runtime(u);
1172 }
29206d46 1173
3ebcd323
ZJS
1174 if (UNIT_ISSET(s->accept_socket)) {
1175 Socket* socket = SOCKET(UNIT_DEREF(s->accept_socket));
1176
1177 if (socket->max_connections_per_source > 0) {
1178 SocketPeer *peer;
1179
1180 /* Make a best-effort attempt at bumping the connection count */
1181 if (socket_acquire_peer(socket, s->socket_fd, &peer) > 0) {
1182 socket_peer_unref(s->peer);
1183 s->peer = peer;
1184 }
1185 }
1186 }
1187
930d2838 1188 service_set_state(s, s->deserialized_state);
a16e1123
LP
1189 return 0;
1190}
1191
4c47affc
FB
1192static int service_collect_fds(Service *s,
1193 int **fds,
1194 char ***fd_names,
1195 unsigned *n_storage_fds,
1196 unsigned *n_socket_fds) {
1197
8dd4c05b 1198 _cleanup_strv_free_ char **rfd_names = NULL;
a354329f 1199 _cleanup_free_ int *rfds = NULL;
4c47affc
FB
1200 unsigned rn_socket_fds = 0, rn_storage_fds = 0;
1201 int r;
44d8db9e
LP
1202
1203 assert(s);
1204 assert(fds);
8dd4c05b 1205 assert(fd_names);
9b141911 1206 assert(n_socket_fds);
44d8db9e 1207
8dd4c05b 1208 if (s->socket_fd >= 0) {
6cf6bbc2 1209
8dd4c05b 1210 /* Pass the per-connection socket */
57020a3a 1211
8dd4c05b
LP
1212 rfds = new(int, 1);
1213 if (!rfds)
1214 return -ENOMEM;
1215 rfds[0] = s->socket_fd;
57020a3a 1216
8dd4c05b
LP
1217 rfd_names = strv_new("connection", NULL);
1218 if (!rfd_names)
1219 return -ENOMEM;
44d8db9e 1220
4c47affc 1221 rn_socket_fds = 1;
8dd4c05b
LP
1222 } else {
1223 Iterator i;
eef85c4a 1224 void *v;
8dd4c05b 1225 Unit *u;
44d8db9e 1226
8dd4c05b 1227 /* Pass all our configured sockets for singleton services */
44d8db9e 1228
eef85c4a 1229 HASHMAP_FOREACH_KEY(v, u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
8dd4c05b
LP
1230 _cleanup_free_ int *cfds = NULL;
1231 Socket *sock;
1232 int cn_fds;
44d8db9e 1233
8dd4c05b
LP
1234 if (u->type != UNIT_SOCKET)
1235 continue;
44d8db9e 1236
8dd4c05b 1237 sock = SOCKET(u);
a354329f 1238
8dd4c05b
LP
1239 cn_fds = socket_collect_fds(sock, &cfds);
1240 if (cn_fds < 0)
1241 return cn_fds;
44d8db9e 1242
8dd4c05b
LP
1243 if (cn_fds <= 0)
1244 continue;
79c7626d 1245
8dd4c05b
LP
1246 if (!rfds) {
1247 rfds = cfds;
4c47affc 1248 rn_socket_fds = cn_fds;
8dd4c05b
LP
1249
1250 cfds = NULL;
1251 } else {
1252 int *t;
1253
4c47affc 1254 t = realloc(rfds, (rn_socket_fds + cn_fds) * sizeof(int));
8dd4c05b
LP
1255 if (!t)
1256 return -ENOMEM;
1257
4c47affc 1258 memcpy(t + rn_socket_fds, cfds, cn_fds * sizeof(int));
8dd4c05b
LP
1259
1260 rfds = t;
4c47affc 1261 rn_socket_fds += cn_fds;
8dd4c05b
LP
1262 }
1263
1264 r = strv_extend_n(&rfd_names, socket_fdname(sock), cn_fds);
1265 if (r < 0)
1266 return r;
44d8db9e
LP
1267 }
1268 }
1269
a354329f
LP
1270 if (s->n_fd_store > 0) {
1271 ServiceFDStore *fs;
4c47affc 1272 unsigned n_fds;
8dd4c05b 1273 char **nl;
a354329f
LP
1274 int *t;
1275
4c47affc 1276 t = realloc(rfds, (rn_socket_fds + s->n_fd_store) * sizeof(int));
a354329f
LP
1277 if (!t)
1278 return -ENOMEM;
1279
1280 rfds = t;
8dd4c05b 1281
4c47affc 1282 nl = realloc(rfd_names, (rn_socket_fds + s->n_fd_store + 1) * sizeof(char*));
8dd4c05b
LP
1283 if (!nl)
1284 return -ENOMEM;
1285
1286 rfd_names = nl;
4c47affc 1287 n_fds = rn_socket_fds;
8dd4c05b
LP
1288
1289 LIST_FOREACH(fd_store, fs, s->fd_store) {
4c47affc
FB
1290 rfds[n_fds] = fs->fd;
1291 rfd_names[n_fds] = strdup(strempty(fs->fdname));
1292 if (!rfd_names[n_fds])
8dd4c05b
LP
1293 return -ENOMEM;
1294
4c47affc
FB
1295 rn_storage_fds++;
1296 n_fds++;
8dd4c05b
LP
1297 }
1298
4c47affc 1299 rfd_names[n_fds] = NULL;
a354329f
LP
1300 }
1301
44d8db9e 1302 *fds = rfds;
8dd4c05b 1303 *fd_names = rfd_names;
9b141911 1304 *n_socket_fds = rn_socket_fds;
4c47affc 1305 *n_storage_fds = rn_storage_fds;
3e33402a 1306
a354329f 1307 rfds = NULL;
8dd4c05b 1308 rfd_names = NULL;
79c7626d 1309
4c47affc 1310 return 0;
44d8db9e
LP
1311}
1312
6375bd20
JW
1313static bool service_exec_needs_notify_socket(Service *s, ExecFlags flags) {
1314 assert(s);
1315
1316 /* Notifications are accepted depending on the process and
1317 * the access setting of the service:
1318 * process: \ access: NONE MAIN EXEC ALL
1319 * main no yes yes yes
1320 * control no no yes yes
1321 * other (forked) no no no yes */
1322
1323 if (flags & EXEC_IS_CONTROL)
1324 /* A control process */
1325 return IN_SET(s->notify_access, NOTIFY_EXEC, NOTIFY_ALL);
1326
1327 /* We only spawn main processes and control processes, so any
1328 * process that is not a control process is a main process */
1329 return s->notify_access != NOTIFY_NONE;
1330}
1331
81a2b7ce
LP
1332static int service_spawn(
1333 Service *s,
1334 ExecCommand *c,
21b2ce39 1335 usec_t timeout,
c39f1ce2 1336 ExecFlags flags,
81a2b7ce
LP
1337 pid_t *_pid) {
1338
9fa95f85 1339 ExecParameters exec_params = {
c39f1ce2
LP
1340 .flags = flags,
1341 .stdin_fd = -1,
1342 .stdout_fd = -1,
1343 .stderr_fd = -1,
9fa95f85 1344 };
3c7416b6
LP
1345 _cleanup_strv_free_ char **final_env = NULL, **our_env = NULL, **fd_names = NULL;
1346 unsigned n_storage_fds = 0, n_socket_fds = 0, n_env = 0;
1347 _cleanup_free_ int *fds = NULL;
1348 pid_t pid;
8dd4c05b
LP
1349 int r;
1350
034c6ed7
LP
1351 assert(s);
1352 assert(c);
1353 assert(_pid);
1354
3c7416b6
LP
1355 r = unit_prepare_exec(UNIT(s));
1356 if (r < 0)
1357 return r;
1358
9c1a61ad
LP
1359 if (flags & EXEC_IS_CONTROL) {
1360 /* If this is a control process, mask the permissions/chroot application if this is requested. */
1361 if (s->permissions_start_only)
1703fa41 1362 exec_params.flags &= ~EXEC_APPLY_SANDBOXING;
9c1a61ad
LP
1363 if (s->root_directory_start_only)
1364 exec_params.flags &= ~EXEC_APPLY_CHROOT;
1365 }
1366
c39f1ce2 1367 if ((flags & EXEC_PASS_FDS) ||
6cf6bbc2
LP
1368 s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1369 s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1370 s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1371
4c47affc 1372 r = service_collect_fds(s, &fds, &fd_names, &n_storage_fds, &n_socket_fds);
8dd4c05b 1373 if (r < 0)
36c16a7c 1374 return r;
6cf6bbc2 1375
4c47affc 1376 log_unit_debug(UNIT(s), "Passing %i fds to service", n_storage_fds + n_socket_fds);
4f2d528d 1377 }
44d8db9e 1378
36c16a7c
LP
1379 r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), timeout));
1380 if (r < 0)
1381 return r;
034c6ed7 1382
136dc4c4 1383 our_env = new0(char*, 9);
36c16a7c
LP
1384 if (!our_env)
1385 return -ENOMEM;
c952c6ec 1386
6375bd20 1387 if (service_exec_needs_notify_socket(s, flags))
36c16a7c
LP
1388 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0)
1389 return -ENOMEM;
c952c6ec 1390
2105e76a 1391 if (s->main_pid > 0)
36c16a7c
LP
1392 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0)
1393 return -ENOMEM;
2105e76a 1394
c39f1ce2 1395 if (MANAGER_IS_USER(UNIT(s)->manager))
df0ff127 1396 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid_cached()) < 0)
36c16a7c 1397 return -ENOMEM;
97ae63e2 1398
8dd4c05b 1399 if (s->socket_fd >= 0) {
3b1c5241
SL
1400 union sockaddr_union sa;
1401 socklen_t salen = sizeof(sa);
1402
f56e7bfe
LP
1403 /* If this is a per-connection service instance, let's set $REMOTE_ADDR and $REMOTE_PORT to something
1404 * useful. Note that we do this only when we are still connected at this point in time, which we might
1405 * very well not be. Hence we ignore all errors when retrieving peer information (as that might result
1406 * in ENOTCONN), and just use whate we can use. */
f2dbd059 1407
f56e7bfe
LP
1408 if (getpeername(s->socket_fd, &sa.sa, &salen) >= 0 &&
1409 IN_SET(sa.sa.sa_family, AF_INET, AF_INET6, AF_VSOCK)) {
3b1c5241 1410
3b1c5241
SL
1411 _cleanup_free_ char *addr = NULL;
1412 char *t;
882ac6e7 1413 unsigned port;
3b1c5241
SL
1414
1415 r = sockaddr_pretty(&sa.sa, salen, true, false, &addr);
1416 if (r < 0)
36c16a7c 1417 return r;
3b1c5241
SL
1418
1419 t = strappend("REMOTE_ADDR=", addr);
36c16a7c
LP
1420 if (!t)
1421 return -ENOMEM;
3b1c5241
SL
1422 our_env[n_env++] = t;
1423
882ac6e7
SH
1424 r = sockaddr_port(&sa.sa, &port);
1425 if (r < 0)
1426 return r;
3b1c5241 1427
36c16a7c
LP
1428 if (asprintf(&t, "REMOTE_PORT=%u", port) < 0)
1429 return -ENOMEM;
3b1c5241
SL
1430 our_env[n_env++] = t;
1431 }
1432 }
1433
136dc4c4
LP
1434 if (flags & EXEC_SETENV_RESULT) {
1435 if (asprintf(our_env + n_env++, "SERVICE_RESULT=%s", service_result_to_string(s->result)) < 0)
1436 return -ENOMEM;
1437
1438 if (s->main_exec_status.pid > 0 &&
1439 dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
1440 if (asprintf(our_env + n_env++, "EXIT_CODE=%s", sigchld_code_to_string(s->main_exec_status.code)) < 0)
1441 return -ENOMEM;
1442
1443 if (s->main_exec_status.code == CLD_EXITED)
1444 r = asprintf(our_env + n_env++, "EXIT_STATUS=%i", s->main_exec_status.status);
1445 else
1446 r = asprintf(our_env + n_env++, "EXIT_STATUS=%s", signal_to_string(s->main_exec_status.status));
1447 if (r < 0)
1448 return -ENOMEM;
1449 }
1450 }
1451
19bbdd98 1452 manager_set_exec_params(UNIT(s)->manager, &exec_params);
f0d47797 1453 unit_set_exec_params(UNIT(s), &exec_params);
3536f49e
YW
1454
1455 final_env = strv_env_merge(2, exec_params.environment, our_env, NULL);
36c16a7c
LP
1456 if (!final_env)
1457 return -ENOMEM;
c952c6ec 1458
5bf7569c
LP
1459 /* System services should get a new keyring by default. */
1460 SET_FLAG(exec_params.flags, EXEC_NEW_KEYRING, MANAGER_IS_SYSTEM(UNIT(s)->manager));
ac647978
LP
1461
1462 /* System D-Bus needs nss-systemd disabled, so that we don't deadlock */
1463 SET_FLAG(exec_params.flags, EXEC_NSS_BYPASS_BUS,
1464 MANAGER_IS_SYSTEM(UNIT(s)->manager) && unit_has_name(UNIT(s), SPECIAL_DBUS_SERVICE));
4ad49000 1465
5125e762 1466 exec_params.argv = c->argv;
c39f1ce2 1467 exec_params.environment = final_env;
9fa95f85 1468 exec_params.fds = fds;
8dd4c05b 1469 exec_params.fd_names = fd_names;
4c47affc 1470 exec_params.n_storage_fds = n_storage_fds;
9b141911 1471 exec_params.n_socket_fds = n_socket_fds;
9fa95f85 1472 exec_params.watchdog_usec = s->watchdog_usec;
a34ceba6 1473 exec_params.selinux_context_net = s->socket_fd_selinux_context_net;
9fa95f85
DM
1474 if (s->type == SERVICE_IDLE)
1475 exec_params.idle_pipe = UNIT(s)->manager->idle_pipe;
a34ceba6
LP
1476 exec_params.stdin_fd = s->stdin_fd;
1477 exec_params.stdout_fd = s->stdout_fd;
1478 exec_params.stderr_fd = s->stderr_fd;
9fa95f85 1479
f2341e0a
LP
1480 r = exec_spawn(UNIT(s),
1481 c,
9e2f7c11 1482 &s->exec_context,
9fa95f85 1483 &exec_params,
613b411c 1484 s->exec_runtime,
29206d46 1485 &s->dynamic_creds,
9e2f7c11 1486 &pid);
9e2f7c11 1487 if (r < 0)
36c16a7c 1488 return r;
034c6ed7 1489
117dcc57 1490 r = unit_watch_pid(UNIT(s), pid);
e8b509d3 1491 if (r < 0) /* FIXME: we need to do something here */
36c16a7c 1492 return r;
034c6ed7
LP
1493
1494 *_pid = pid;
1495
5cb5a6ff 1496 return 0;
034c6ed7
LP
1497}
1498
80876c20
LP
1499static int main_pid_good(Service *s) {
1500 assert(s);
1501
51894d70 1502 /* Returns 0 if the pid is dead, > 0 if it is good, < 0 if we don't know */
80876c20 1503
fc08079e 1504 /* If we know the pid file, then let's just check if it is
80876c20 1505 * still valid */
6dfa5494
LP
1506 if (s->main_pid_known) {
1507
1508 /* If it's an alien child let's check if it is still
1509 * alive ... */
62220cf7 1510 if (s->main_pid_alien && s->main_pid > 0)
9f5650ae 1511 return pid_is_alive(s->main_pid);
6dfa5494
LP
1512
1513 /* .. otherwise assume we'll get a SIGCHLD for it,
1514 * which we really should wait for to collect exit
1515 * status and code */
80876c20 1516 return s->main_pid > 0;
6dfa5494 1517 }
80876c20
LP
1518
1519 /* We don't know the pid */
1520 return -EAGAIN;
1521}
1522
019be286 1523static int control_pid_good(Service *s) {
80876c20
LP
1524 assert(s);
1525
07697d7e
LP
1526 /* Returns 0 if the control PID is dead, > 0 if it is good. We never actually return < 0 here, but in order to
1527 * make this function as similar as possible to main_pid_good() and cgroup_good(), we pretend that < 0 also
1528 * means: we can't figure it out. */
1529
80876c20
LP
1530 return s->control_pid > 0;
1531}
1532
1533static int cgroup_good(Service *s) {
1534 int r;
1535
1536 assert(s);
1537
07697d7e
LP
1538 /* Returns 0 if the cgroup is empty or doesn't exist, > 0 if it is exists and is populated, < 0 if we can't
1539 * figure it out */
1540
4ad49000
LP
1541 if (!UNIT(s)->cgroup_path)
1542 return 0;
1543
6f883237 1544 r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path);
117dcc57 1545 if (r < 0)
80876c20
LP
1546 return r;
1547
b13ddbbc 1548 return r == 0;
80876c20
LP
1549}
1550
a509f0e6
LP
1551static bool service_shall_restart(Service *s) {
1552 assert(s);
1553
1554 /* Don't restart after manual stops */
1555 if (s->forbid_restart)
1556 return false;
1557
1558 /* Never restart if this is configured as special exception */
1559 if (exit_status_set_test(&s->restart_prevent_status, s->main_exec_status.code, s->main_exec_status.status))
1560 return false;
1561
1562 /* Restart if the exit code/status are configured as restart triggers */
1563 if (exit_status_set_test(&s->restart_force_status, s->main_exec_status.code, s->main_exec_status.status))
1564 return true;
1565
1566 switch (s->restart) {
1567
1568 case SERVICE_RESTART_NO:
1569 return false;
1570
1571 case SERVICE_RESTART_ALWAYS:
1572 return true;
1573
1574 case SERVICE_RESTART_ON_SUCCESS:
1575 return s->result == SERVICE_SUCCESS;
1576
1577 case SERVICE_RESTART_ON_FAILURE:
1578 return s->result != SERVICE_SUCCESS;
1579
1580 case SERVICE_RESTART_ON_ABNORMAL:
1581 return !IN_SET(s->result, SERVICE_SUCCESS, SERVICE_FAILURE_EXIT_CODE);
1582
1583 case SERVICE_RESTART_ON_WATCHDOG:
1584 return s->result == SERVICE_FAILURE_WATCHDOG;
1585
1586 case SERVICE_RESTART_ON_ABORT:
1587 return IN_SET(s->result, SERVICE_FAILURE_SIGNAL, SERVICE_FAILURE_CORE_DUMP);
1588
1589 default:
1590 assert_not_reached("unknown restart setting");
1591 }
1592}
1593
deb4e708
MK
1594static bool service_will_restart(Unit *u) {
1595 Service *s = SERVICE(u);
1596
53f47dfc
YW
1597 assert(s);
1598
deb4e708
MK
1599 if (s->will_auto_restart)
1600 return true;
53f47dfc
YW
1601 if (s->state == SERVICE_AUTO_RESTART)
1602 return true;
1603 if (!UNIT(s)->job)
1604 return false;
1605 if (UNIT(s)->job->type == JOB_START)
1606 return true;
1607 return false;
1608}
1609
f42806df 1610static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
034c6ed7 1611 int r;
0f52f8e5 1612
034c6ed7
LP
1613 assert(s);
1614
0f52f8e5
LP
1615 /* If there's a stop job queued before we enter the DEAD state, we shouldn't act on Restart=, in order to not
1616 * undo what has already been enqueued. */
1617 if (unit_stop_pending(UNIT(s)))
1618 allow_restart = false;
1619
a0fef983 1620 if (s->result == SERVICE_SUCCESS)
f42806df 1621 s->result = f;
034c6ed7 1622
ed77d407
LP
1623 if (s->result != SERVICE_SUCCESS)
1624 log_unit_warning(UNIT(s), "Failed with result '%s'.", service_result_to_string(s->result));
1625
deb4e708
MK
1626 if (allow_restart && service_shall_restart(s))
1627 s->will_auto_restart = true;
1628
7eb2a8a1
LP
1629 /* Make sure service_release_resources() doesn't destroy our FD store, while we are changing through
1630 * SERVICE_FAILED/SERVICE_DEAD before entering into SERVICE_AUTO_RESTART. */
1631 s->n_keep_fd_store ++;
1632
0c7f15b3
MS
1633 service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1634
deb4e708
MK
1635 if (s->will_auto_restart) {
1636 s->will_auto_restart = false;
034c6ed7 1637
36c16a7c 1638 r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->restart_usec));
7eb2a8a1
LP
1639 if (r < 0) {
1640 s->n_keep_fd_store--;
034c6ed7 1641 goto fail;
7eb2a8a1 1642 }
034c6ed7
LP
1643
1644 service_set_state(s, SERVICE_AUTO_RESTART);
7a0019d3
LP
1645 } else
1646 /* If we shan't restart, then flush out the restart counter. But don't do that immediately, so that the
1647 * user can still introspect the counter. Do so on the next start. */
1648 s->flush_n_restarts = true;
034c6ed7 1649
7eb2a8a1
LP
1650 /* The new state is in effect, let's decrease the fd store ref counter again. Let's also readd us to the GC
1651 * queue, so that the fd store is possibly gc'ed again */
1652 s->n_keep_fd_store--;
1653 unit_add_to_gc_queue(UNIT(s));
1654
f2341e0a 1655 /* The next restart might not be a manual stop, hence reset the flag indicating manual stops */
47342320
LP
1656 s->forbid_restart = false;
1657
e66cf1a3 1658 /* We want fresh tmpdirs in case service is started again immediately */
e8a565cb 1659 s->exec_runtime = exec_runtime_unref(s->exec_runtime, true);
c17ec25e 1660
53f47dfc 1661 if (s->exec_context.runtime_directory_preserve_mode == EXEC_PRESERVE_NO ||
deb4e708 1662 (s->exec_context.runtime_directory_preserve_mode == EXEC_PRESERVE_RESTART && !service_will_restart(UNIT(s))))
53f47dfc 1663 /* Also, remove the runtime directory */
3536f49e 1664 exec_context_destroy_runtime_directory(&s->exec_context, UNIT(s)->manager->prefix[EXEC_DIRECTORY_RUNTIME]);
e66cf1a3 1665
00d9ef85
LP
1666 /* Get rid of the IPC bits of the user */
1667 unit_unref_uid_gid(UNIT(s), true);
1668
29206d46
LP
1669 /* Release the user, and destroy it if we are the only remaining owner */
1670 dynamic_creds_destroy(&s->dynamic_creds);
1671
9285c9ff
LN
1672 /* Try to delete the pid file. At this point it will be
1673 * out-of-date, and some software might be confused by it, so
1674 * let's remove it. */
1675 if (s->pid_file)
fabab190 1676 (void) unlink(s->pid_file);
9285c9ff 1677
034c6ed7
LP
1678 return;
1679
1680fail:
f2341e0a 1681 log_unit_warning_errno(UNIT(s), r, "Failed to run install restart timer: %m");
f42806df 1682 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1683}
1684
f42806df 1685static void service_enter_stop_post(Service *s, ServiceResult f) {
034c6ed7
LP
1686 int r;
1687 assert(s);
1688
a0fef983 1689 if (s->result == SERVICE_SUCCESS)
f42806df 1690 s->result = f;
034c6ed7 1691
5e94833f 1692 service_unwatch_control_pid(s);
a911bb9a 1693 unit_watch_all_pids(UNIT(s));
5e94833f 1694
117dcc57
ZJS
1695 s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1696 if (s->control_command) {
867b3b7d
LP
1697 s->control_command_id = SERVICE_EXEC_STOP_POST;
1698
ecedd90f
LP
1699 r = service_spawn(s,
1700 s->control_command,
21b2ce39 1701 s->timeout_stop_usec,
1703fa41 1702 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_IS_CONTROL|EXEC_SETENV_RESULT,
ecedd90f
LP
1703 &s->control_pid);
1704 if (r < 0)
034c6ed7
LP
1705 goto fail;
1706
80876c20
LP
1707 service_set_state(s, SERVICE_STOP_POST);
1708 } else
ac84d1fb 1709 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1710
1711 return;
1712
1713fail:
f2341e0a 1714 log_unit_warning_errno(UNIT(s), r, "Failed to run 'stop-post' task: %m");
f42806df 1715 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1716}
1717
4940c0b0
LP
1718static int state_to_kill_operation(ServiceState state) {
1719 switch (state) {
1720
1721 case SERVICE_STOP_SIGABRT:
1722 return KILL_ABORT;
1723
1724 case SERVICE_STOP_SIGTERM:
1725 case SERVICE_FINAL_SIGTERM:
1726 return KILL_TERMINATE;
1727
1728 case SERVICE_STOP_SIGKILL:
1729 case SERVICE_FINAL_SIGKILL:
1730 return KILL_KILL;
1731
1732 default:
1733 return _KILL_OPERATION_INVALID;
1734 }
1735}
1736
f42806df 1737static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
034c6ed7 1738 int r;
034c6ed7
LP
1739
1740 assert(s);
1741
a0fef983 1742 if (s->result == SERVICE_SUCCESS)
f42806df 1743 s->result = f;
034c6ed7 1744
a911bb9a
LP
1745 unit_watch_all_pids(UNIT(s));
1746
cd2086fe
LP
1747 r = unit_kill_context(
1748 UNIT(s),
1749 &s->kill_context,
4940c0b0 1750 state_to_kill_operation(state),
cd2086fe
LP
1751 s->main_pid,
1752 s->control_pid,
1753 s->main_pid_alien);
1754 if (r < 0)
1755 goto fail;
034c6ed7 1756
cd2086fe 1757 if (r > 0) {
36c16a7c
LP
1758 r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_stop_usec));
1759 if (r < 0)
1760 goto fail;
d6ea93e3 1761
80876c20 1762 service_set_state(s, state);
1db0db4b 1763 } else if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM) && s->kill_context.send_sigkill)
ac84d1fb 1764 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1db0db4b 1765 else if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL))
f42806df 1766 service_enter_stop_post(s, SERVICE_SUCCESS);
1db0db4b 1767 else if (state == SERVICE_FINAL_SIGTERM && s->kill_context.send_sigkill)
ac84d1fb 1768 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
80876c20 1769 else
f42806df 1770 service_enter_dead(s, SERVICE_SUCCESS, true);
034c6ed7
LP
1771
1772 return;
1773
1774fail:
f2341e0a 1775 log_unit_warning_errno(UNIT(s), r, "Failed to kill processes: %m");
034c6ed7 1776
a00973af 1777 if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL))
f42806df 1778 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
034c6ed7 1779 else
f42806df 1780 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1781}
1782
308d72dc
LP
1783static void service_enter_stop_by_notify(Service *s) {
1784 assert(s);
1785
1786 unit_watch_all_pids(UNIT(s));
1787
36c16a7c 1788 service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_stop_usec));
308d72dc 1789
6041a7ee
MS
1790 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1791 service_set_state(s, SERVICE_STOP_SIGTERM);
308d72dc
LP
1792}
1793
f42806df 1794static void service_enter_stop(Service *s, ServiceResult f) {
034c6ed7 1795 int r;
5925dd3c 1796
034c6ed7
LP
1797 assert(s);
1798
a0fef983 1799 if (s->result == SERVICE_SUCCESS)
f42806df 1800 s->result = f;
034c6ed7 1801
5e94833f 1802 service_unwatch_control_pid(s);
a911bb9a 1803 unit_watch_all_pids(UNIT(s));
5e94833f 1804
117dcc57
ZJS
1805 s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1806 if (s->control_command) {
867b3b7d
LP
1807 s->control_command_id = SERVICE_EXEC_STOP;
1808
ecedd90f
LP
1809 r = service_spawn(s,
1810 s->control_command,
21b2ce39 1811 s->timeout_stop_usec,
1703fa41 1812 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|EXEC_SETENV_RESULT,
ecedd90f
LP
1813 &s->control_pid);
1814 if (r < 0)
034c6ed7
LP
1815 goto fail;
1816
80876c20
LP
1817 service_set_state(s, SERVICE_STOP);
1818 } else
f42806df 1819 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1820
1821 return;
1822
1823fail:
f2341e0a 1824 log_unit_warning_errno(UNIT(s), r, "Failed to run 'stop' task: %m");
f42806df 1825 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1826}
1827
957c3cf9
LP
1828static bool service_good(Service *s) {
1829 int main_pid_ok;
1830 assert(s);
1831
1832 if (s->type == SERVICE_DBUS && !s->bus_name_good)
1833 return false;
1834
1835 main_pid_ok = main_pid_good(s);
1836 if (main_pid_ok > 0) /* It's alive */
1837 return true;
1838 if (main_pid_ok == 0) /* It's dead */
1839 return false;
1840
1841 /* OK, we don't know anything about the main PID, maybe
1842 * because there is none. Let's check the control group
1843 * instead. */
1844
1845 return cgroup_good(s) != 0;
1846}
1847
f42806df 1848static void service_enter_running(Service *s, ServiceResult f) {
80876c20
LP
1849 assert(s);
1850
a0fef983 1851 if (s->result == SERVICE_SUCCESS)
f42806df 1852 s->result = f;
80876c20 1853
089b64d5
LP
1854 service_unwatch_control_pid(s);
1855
957c3cf9 1856 if (service_good(s)) {
308d72dc
LP
1857
1858 /* If there are any queued up sd_notify()
1859 * notifications, process them now */
1860 if (s->notify_state == NOTIFY_RELOADING)
1861 service_enter_reload_by_notify(s);
1862 else if (s->notify_state == NOTIFY_STOPPING)
1863 service_enter_stop_by_notify(s);
36c16a7c 1864 else {
308d72dc 1865 service_set_state(s, SERVICE_RUNNING);
36c16a7c
LP
1866 service_arm_timer(s, usec_add(UNIT(s)->active_enter_timestamp.monotonic, s->runtime_max_usec));
1867 }
308d72dc 1868
3d474ef7 1869 } else if (f != SERVICE_SUCCESS)
c3fda31d 1870 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
3d474ef7 1871 else if (s->remain_after_exit)
80876c20
LP
1872 service_set_state(s, SERVICE_EXITED);
1873 else
f42806df 1874 service_enter_stop(s, SERVICE_SUCCESS);
80876c20
LP
1875}
1876
034c6ed7
LP
1877static void service_enter_start_post(Service *s) {
1878 int r;
1879 assert(s);
1880
5e94833f 1881 service_unwatch_control_pid(s);
842129f5 1882 service_reset_watchdog(s);
bb242b7b 1883
117dcc57
ZJS
1884 s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
1885 if (s->control_command) {
867b3b7d
LP
1886 s->control_command_id = SERVICE_EXEC_START_POST;
1887
ecedd90f
LP
1888 r = service_spawn(s,
1889 s->control_command,
21b2ce39 1890 s->timeout_start_usec,
1703fa41 1891 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL,
ecedd90f
LP
1892 &s->control_pid);
1893 if (r < 0)
034c6ed7
LP
1894 goto fail;
1895
80876c20
LP
1896 service_set_state(s, SERVICE_START_POST);
1897 } else
f42806df 1898 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1899
1900 return;
1901
1902fail:
f2341e0a 1903 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start-post' task: %m");
f42806df 1904 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1905}
1906
e9a4f676 1907static void service_kill_control_process(Service *s) {
a6951a50 1908 int r;
4ad49000 1909
a6951a50
LP
1910 assert(s);
1911
e9a4f676
LP
1912 if (s->control_pid <= 0)
1913 return;
4ad49000 1914
e9a4f676
LP
1915 r = kill_and_sigcont(s->control_pid, SIGKILL);
1916 if (r < 0) {
1917 _cleanup_free_ char *comm = NULL;
a6951a50 1918
e9a4f676 1919 (void) get_process_comm(s->control_pid, &comm);
a6951a50 1920
e9a4f676
LP
1921 log_unit_debug_errno(UNIT(s), r, "Failed to kill control process " PID_FMT " (%s), ignoring: %m",
1922 s->control_pid, strna(comm));
a6951a50 1923 }
4ad49000
LP
1924}
1925
034c6ed7 1926static void service_enter_start(Service *s) {
4ad49000 1927 ExecCommand *c;
36c16a7c 1928 usec_t timeout;
034c6ed7
LP
1929 pid_t pid;
1930 int r;
1931
1932 assert(s);
1933
41efeaec
LP
1934 service_unwatch_control_pid(s);
1935 service_unwatch_main_pid(s);
80876c20 1936
a4634b21
LP
1937 unit_warn_leftover_processes(UNIT(s));
1938
867b3b7d
LP
1939 if (s->type == SERVICE_FORKING) {
1940 s->control_command_id = SERVICE_EXEC_START;
1941 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
1942
1943 s->main_command = NULL;
1944 } else {
1945 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1946 s->control_command = NULL;
1947
1948 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
1949 }
34e9ba66 1950
96fb8242 1951 if (!c) {
47fffb35
LP
1952 if (s->type != SERVICE_ONESHOT) {
1953 /* There's no command line configured for the main command? Hmm, that is strange. This can only
1954 * happen if the configuration changes at runtime. In this case, let's enter a failure
1955 * state. */
1956 log_unit_error(UNIT(s), "There's no 'start' task anymore we could start: %m");
1957 r = -ENXIO;
1958 goto fail;
1959 }
1960
96fb8242
LP
1961 service_enter_start_post(s);
1962 return;
1963 }
1964
36c16a7c
LP
1965 if (IN_SET(s->type, SERVICE_SIMPLE, SERVICE_IDLE))
1966 /* For simple + idle this is the main process. We don't apply any timeout here, but
1967 * service_enter_running() will later apply the .runtime_max_usec timeout. */
1968 timeout = USEC_INFINITY;
1969 else
1970 timeout = s->timeout_start_usec;
1971
ecedd90f
LP
1972 r = service_spawn(s,
1973 c,
36c16a7c 1974 timeout,
1703fa41 1975 EXEC_PASS_FDS|EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_SET_WATCHDOG,
ecedd90f
LP
1976 &pid);
1977 if (r < 0)
034c6ed7
LP
1978 goto fail;
1979
36c16a7c 1980 if (IN_SET(s->type, SERVICE_SIMPLE, SERVICE_IDLE)) {
034c6ed7
LP
1981 /* For simple services we immediately start
1982 * the START_POST binaries. */
1983
5925dd3c 1984 service_set_main_pid(s, pid);
034c6ed7
LP
1985 service_enter_start_post(s);
1986
1987 } else if (s->type == SERVICE_FORKING) {
1988
1989 /* For forking services we wait until the start
1990 * process exited. */
1991
e55224ca 1992 s->control_pid = pid;
80876c20
LP
1993 service_set_state(s, SERVICE_START);
1994
36c16a7c 1995 } else if (IN_SET(s->type, SERVICE_ONESHOT, SERVICE_DBUS, SERVICE_NOTIFY)) {
7d55e835 1996
34e9ba66 1997 /* For oneshot services we wait until the start
7d55e835
LP
1998 * process exited, too, but it is our main process. */
1999
05e343b7 2000 /* For D-Bus services we know the main pid right away,
8c47c732
LP
2001 * but wait for the bus name to appear on the
2002 * bus. Notify services are similar. */
05e343b7 2003
5925dd3c 2004 service_set_main_pid(s, pid);
80876c20 2005 service_set_state(s, SERVICE_START);
034c6ed7
LP
2006 } else
2007 assert_not_reached("Unknown service type");
2008
2009 return;
2010
2011fail:
f2341e0a 2012 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start' task: %m");
c3fda31d 2013 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2014}
2015
2016static void service_enter_start_pre(Service *s) {
2017 int r;
2018
2019 assert(s);
2020
5e94833f
LP
2021 service_unwatch_control_pid(s);
2022
117dcc57
ZJS
2023 s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
2024 if (s->control_command) {
8f53a7b8 2025
a4634b21
LP
2026 unit_warn_leftover_processes(UNIT(s));
2027
867b3b7d
LP
2028 s->control_command_id = SERVICE_EXEC_START_PRE;
2029
ecedd90f
LP
2030 r = service_spawn(s,
2031 s->control_command,
21b2ce39 2032 s->timeout_start_usec,
1703fa41 2033 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|EXEC_APPLY_TTY_STDIN,
ecedd90f
LP
2034 &s->control_pid);
2035 if (r < 0)
034c6ed7
LP
2036 goto fail;
2037
80876c20
LP
2038 service_set_state(s, SERVICE_START_PRE);
2039 } else
034c6ed7
LP
2040 service_enter_start(s);
2041
2042 return;
2043
2044fail:
f2341e0a 2045 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start-pre' task: %m");
f42806df 2046 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
2047}
2048
2049static void service_enter_restart(Service *s) {
4afd3348 2050 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
034c6ed7 2051 int r;
398ef8ba 2052
034c6ed7
LP
2053 assert(s);
2054
a8bb2e65
LP
2055 if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
2056 /* Don't restart things if we are going down anyway */
f2341e0a 2057 log_unit_info(UNIT(s), "Stop job pending for unit, delaying automatic restart.");
2edfa366 2058
36c16a7c 2059 r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->restart_usec));
a8bb2e65 2060 if (r < 0)
2edfa366 2061 goto fail;
feae8adb
DW
2062
2063 return;
2edfa366
LP
2064 }
2065
48bb5876
DW
2066 /* Any units that are bound to this service must also be
2067 * restarted. We use JOB_RESTART (instead of the more obvious
2068 * JOB_START) here so that those dependency jobs will be added
2069 * as well. */
4bd29fe5 2070 r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, &error, NULL);
48bb5876 2071 if (r < 0)
034c6ed7
LP
2072 goto fail;
2073
7a0019d3
LP
2074 /* Count the jobs we enqueue for restarting. This counter is maintained as long as the unit isn't fully
2075 * stopped, i.e. as long as it remains up or remains in auto-start states. The use can reset the counter
2076 * explicitly however via the usual "systemctl reset-failure" logic. */
2077 s->n_restarts ++;
2078 s->flush_n_restarts = false;
2079
2080 log_struct(LOG_INFO,
2081 "MESSAGE_ID=" SD_MESSAGE_UNIT_RESTART_SCHEDULED_STR,
2082 LOG_UNIT_ID(UNIT(s)),
f1c50bec 2083 LOG_UNIT_INVOCATION_ID(UNIT(s)),
7a0019d3
LP
2084 LOG_UNIT_MESSAGE(UNIT(s), "Scheduled restart job, restart counter is at %u.", s->n_restarts),
2085 "N_RESTARTS=%u", s->n_restarts,
2086 NULL);
2087
2088 /* Notify clients about changed restart counter */
2089 unit_add_to_dbus_queue(UNIT(s));
2090
a8bb2e65
LP
2091 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
2092 * it will be canceled as part of the service_stop() call that
2093 * is executed as part of JOB_RESTART. */
2094
034c6ed7
LP
2095 return;
2096
2097fail:
f2341e0a 2098 log_unit_warning(UNIT(s), "Failed to schedule restart job: %s", bus_error_message(&error, -r));
f42806df 2099 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
2100}
2101
308d72dc 2102static void service_enter_reload_by_notify(Service *s) {
15d167f8
JW
2103 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
2104 int r;
2105
308d72dc
LP
2106 assert(s);
2107
36c16a7c 2108 service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_start_usec));
308d72dc 2109 service_set_state(s, SERVICE_RELOAD);
15d167f8
JW
2110
2111 /* service_enter_reload_by_notify is never called during a reload, thus no loops are possible. */
2112 r = manager_propagate_reload(UNIT(s)->manager, UNIT(s), JOB_FAIL, &error);
2113 if (r < 0)
2114 log_unit_warning(UNIT(s), "Failed to schedule propagation of reload: %s", bus_error_message(&error, -r));
308d72dc
LP
2115}
2116
034c6ed7
LP
2117static void service_enter_reload(Service *s) {
2118 int r;
2119
2120 assert(s);
2121
5e94833f 2122 service_unwatch_control_pid(s);
95c906ae 2123 s->reload_result = SERVICE_SUCCESS;
5e94833f 2124
117dcc57
ZJS
2125 s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2126 if (s->control_command) {
867b3b7d
LP
2127 s->control_command_id = SERVICE_EXEC_RELOAD;
2128
ecedd90f
LP
2129 r = service_spawn(s,
2130 s->control_command,
21b2ce39 2131 s->timeout_start_usec,
1703fa41 2132 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL,
ecedd90f
LP
2133 &s->control_pid);
2134 if (r < 0)
034c6ed7
LP
2135 goto fail;
2136
80876c20
LP
2137 service_set_state(s, SERVICE_RELOAD);
2138 } else
f42806df 2139 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2140
2141 return;
2142
2143fail:
f2341e0a 2144 log_unit_warning_errno(UNIT(s), r, "Failed to run 'reload' task: %m");
f42806df
LP
2145 s->reload_result = SERVICE_FAILURE_RESOURCES;
2146 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2147}
2148
f42806df 2149static void service_run_next_control(Service *s) {
36c16a7c 2150 usec_t timeout;
034c6ed7
LP
2151 int r;
2152
2153 assert(s);
2154 assert(s->control_command);
2155 assert(s->control_command->command_next);
2156
34e9ba66 2157 assert(s->control_command_id != SERVICE_EXEC_START);
034c6ed7 2158
34e9ba66 2159 s->control_command = s->control_command->command_next;
5e94833f
LP
2160 service_unwatch_control_pid(s);
2161
36c16a7c
LP
2162 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
2163 timeout = s->timeout_start_usec;
2164 else
2165 timeout = s->timeout_stop_usec;
2166
ecedd90f
LP
2167 r = service_spawn(s,
2168 s->control_command,
36c16a7c 2169 timeout,
1703fa41 2170 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|
136dc4c4
LP
2171 (IN_SET(s->control_command_id, SERVICE_EXEC_START_PRE, SERVICE_EXEC_STOP_POST) ? EXEC_APPLY_TTY_STDIN : 0)|
2172 (IN_SET(s->control_command_id, SERVICE_EXEC_STOP, SERVICE_EXEC_STOP_POST) ? EXEC_SETENV_RESULT : 0),
ecedd90f
LP
2173 &s->control_pid);
2174 if (r < 0)
034c6ed7
LP
2175 goto fail;
2176
2177 return;
2178
2179fail:
f2341e0a 2180 log_unit_warning_errno(UNIT(s), r, "Failed to run next control task: %m");
034c6ed7 2181
4cd9fa81 2182 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START_POST, SERVICE_STOP))
f42806df 2183 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7 2184 else if (s->state == SERVICE_STOP_POST)
f42806df 2185 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
e2f3b44c 2186 else if (s->state == SERVICE_RELOAD) {
f42806df
LP
2187 s->reload_result = SERVICE_FAILURE_RESOURCES;
2188 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c 2189 } else
f42806df 2190 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
5cb5a6ff
LP
2191}
2192
f42806df 2193static void service_run_next_main(Service *s) {
34e9ba66
LP
2194 pid_t pid;
2195 int r;
2196
2197 assert(s);
867b3b7d
LP
2198 assert(s->main_command);
2199 assert(s->main_command->command_next);
2200 assert(s->type == SERVICE_ONESHOT);
34e9ba66 2201
867b3b7d 2202 s->main_command = s->main_command->command_next;
34e9ba66
LP
2203 service_unwatch_main_pid(s);
2204
ecedd90f
LP
2205 r = service_spawn(s,
2206 s->main_command,
21b2ce39 2207 s->timeout_start_usec,
1703fa41 2208 EXEC_PASS_FDS|EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_SET_WATCHDOG,
ecedd90f
LP
2209 &pid);
2210 if (r < 0)
34e9ba66
LP
2211 goto fail;
2212
2213 service_set_main_pid(s, pid);
2214
2215 return;
2216
2217fail:
f2341e0a 2218 log_unit_warning_errno(UNIT(s), r, "Failed to run next main task: %m");
f42806df 2219 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
34e9ba66
LP
2220}
2221
87f0e418
LP
2222static int service_start(Unit *u) {
2223 Service *s = SERVICE(u);
07299350 2224 int r;
5cb5a6ff
LP
2225
2226 assert(s);
2227
034c6ed7
LP
2228 /* We cannot fulfill this request right now, try again later
2229 * please! */
a00973af
LP
2230 if (IN_SET(s->state,
2231 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
2232 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))
5cb5a6ff
LP
2233 return -EAGAIN;
2234
034c6ed7 2235 /* Already on it! */
a00973af 2236 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST))
034c6ed7
LP
2237 return 0;
2238
2e9d6c12 2239 /* A service that will be restarted must be stopped first to
7f2cddae 2240 * trigger BindsTo and/or OnFailure dependencies. If a user
2e9d6c12 2241 * does not want to wait for the holdoff time to elapse, the
d4943dc7
LP
2242 * service should be manually restarted, not started. We
2243 * simply return EAGAIN here, so that any start jobs stay
2244 * queued, and assume that the auto restart timer will
2245 * eventually trigger the restart. */
2246 if (s->state == SERVICE_AUTO_RESTART)
a8bb2e65 2247 return -EAGAIN;
2e9d6c12 2248
a00973af 2249 assert(IN_SET(s->state, SERVICE_DEAD, SERVICE_FAILED));
5cb5a6ff 2250
07299350
LP
2251 /* Make sure we don't enter a busy loop of some kind. */
2252 r = unit_start_limit_test(u);
2253 if (r < 0) {
2254 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT_HIT, false);
2255 return r;
2256 }
2257
4b58153d
LP
2258 r = unit_acquire_invocation_id(u);
2259 if (r < 0)
2260 return r;
2261
f42806df
LP
2262 s->result = SERVICE_SUCCESS;
2263 s->reload_result = SERVICE_SUCCESS;
034c6ed7 2264 s->main_pid_known = false;
6dfa5494 2265 s->main_pid_alien = false;
47342320 2266 s->forbid_restart = false;
3c7416b6
LP
2267
2268 u->reset_accounting = true;
034c6ed7 2269
a1e58e8e 2270 s->status_text = mfree(s->status_text);
8cfdb077
LP
2271 s->status_errno = 0;
2272
308d72dc
LP
2273 s->notify_state = NOTIFY_UNKNOWN;
2274
2787d83c
M
2275 s->watchdog_override_enable = false;
2276 s->watchdog_override_usec = 0;
2277
7a0019d3
LP
2278 /* This is not an automatic restart? Flush the restart counter then */
2279 if (s->flush_n_restarts) {
2280 s->n_restarts = 0;
2281 s->flush_n_restarts = false;
2282 }
2283
034c6ed7 2284 service_enter_start_pre(s);
82a2b6bb 2285 return 1;
5cb5a6ff
LP
2286}
2287
87f0e418
LP
2288static int service_stop(Unit *u) {
2289 Service *s = SERVICE(u);
5cb5a6ff
LP
2290
2291 assert(s);
2292
a509f0e6 2293 /* Don't create restart jobs from manual stops. */
47342320 2294 s->forbid_restart = true;
034c6ed7 2295
e537352b 2296 /* Already on it */
a00973af
LP
2297 if (IN_SET(s->state,
2298 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
2299 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))
e537352b
LP
2300 return 0;
2301
f0c7b229 2302 /* A restart will be scheduled or is in progress. */
034c6ed7 2303 if (s->state == SERVICE_AUTO_RESTART) {
0c7f15b3 2304 service_set_state(s, SERVICE_DEAD);
034c6ed7
LP
2305 return 0;
2306 }
2307
3f6c78dc
LP
2308 /* If there's already something running we go directly into
2309 * kill mode. */
a00973af 2310 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD)) {
f42806df 2311 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
3f6c78dc
LP
2312 return 0;
2313 }
5cb5a6ff 2314
a00973af 2315 assert(IN_SET(s->state, SERVICE_RUNNING, SERVICE_EXITED));
3a762661 2316
f42806df 2317 service_enter_stop(s, SERVICE_SUCCESS);
82a2b6bb 2318 return 1;
5cb5a6ff
LP
2319}
2320
87f0e418
LP
2321static int service_reload(Unit *u) {
2322 Service *s = SERVICE(u);
034c6ed7
LP
2323
2324 assert(s);
2325
3742095b 2326 assert(IN_SET(s->state, SERVICE_RUNNING, SERVICE_EXITED));
034c6ed7
LP
2327
2328 service_enter_reload(s);
2d018ae2 2329 return 1;
5cb5a6ff
LP
2330}
2331
44a6b1b6 2332_pure_ static bool service_can_reload(Unit *u) {
87f0e418 2333 Service *s = SERVICE(u);
034c6ed7
LP
2334
2335 assert(s);
2336
2337 return !!s->exec_command[SERVICE_EXEC_RELOAD];
2338}
2339
e266c068
MS
2340static unsigned service_exec_command_index(Unit *u, ServiceExecCommand id, ExecCommand *current) {
2341 Service *s = SERVICE(u);
2342 unsigned idx = 0;
2343 ExecCommand *first, *c;
2344
2345 assert(s);
2346
2347 first = s->exec_command[id];
2348
2349 /* Figure out where we are in the list by walking back to the beginning */
2350 for (c = current; c != first; c = c->command_prev)
2351 idx++;
2352
2353 return idx;
2354}
2355
2356static int service_serialize_exec_command(Unit *u, FILE *f, ExecCommand *command) {
2357 Service *s = SERVICE(u);
2358 ServiceExecCommand id;
2359 unsigned idx;
2360 const char *type;
2361 char **arg;
e266c068
MS
2362 _cleanup_free_ char *args = NULL, *p = NULL;
2363 size_t allocated = 0, length = 0;
2364
2365 assert(s);
2366 assert(f);
2367
2368 if (!command)
2369 return 0;
2370
2371 if (command == s->control_command) {
2372 type = "control";
2373 id = s->control_command_id;
2374 } else {
2375 type = "main";
2376 id = SERVICE_EXEC_START;
2377 }
2378
2379 idx = service_exec_command_index(u, id, command);
2380
2381 STRV_FOREACH(arg, command->argv) {
2382 size_t n;
2383 _cleanup_free_ char *e = NULL;
2384
2385 e = xescape(*arg, WHITESPACE);
2386 if (!e)
2387 return -ENOMEM;
2388
2389 n = strlen(e);
2390 if (!GREEDY_REALLOC(args, allocated, length + 1 + n + 1))
2391 return -ENOMEM;
2392
2393 if (length > 0)
2394 args[length++] = ' ';
2395
2396 memcpy(args + length, e, n);
2397 length += n;
2398 }
2399
2400 if (!GREEDY_REALLOC(args, allocated, length + 1))
2401 return -ENOMEM;
2402 args[length++] = 0;
2403
2404 p = xescape(command->path, WHITESPACE);
2405 if (!p)
2406 return -ENOMEM;
2407
2408 fprintf(f, "%s-command=%s %u %s %s\n", type, service_exec_command_to_string(id), idx, p, args);
2409
2410 return 0;
2411}
2412
a16e1123
LP
2413static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2414 Service *s = SERVICE(u);
2339fc93 2415 ServiceFDStore *fs;
a34ceba6 2416 int r;
a16e1123
LP
2417
2418 assert(u);
2419 assert(f);
2420 assert(fds);
2421
2422 unit_serialize_item(u, f, "state", service_state_to_string(s->state));
f42806df
LP
2423 unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2424 unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
a16e1123
LP
2425
2426 if (s->control_pid > 0)
f06db334 2427 unit_serialize_item_format(u, f, "control-pid", PID_FMT, s->control_pid);
a16e1123 2428
5925dd3c 2429 if (s->main_pid_known && s->main_pid > 0)
ccd06097 2430 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
a16e1123
LP
2431
2432 unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
de1d4f9b 2433 unit_serialize_item(u, f, "bus-name-good", yes_no(s->bus_name_good));
d8ccf5fd 2434 unit_serialize_item(u, f, "bus-name-owner", s->bus_name_owner);
a16e1123 2435
7a0019d3 2436 unit_serialize_item_format(u, f, "n-restarts", "%u", s->n_restarts);
7f923884 2437 unit_serialize_item(u, f, "flush-n-restarts", yes_no(s->flush_n_restarts));
7a0019d3 2438
a34ceba6
LP
2439 r = unit_serialize_item_escaped(u, f, "status-text", s->status_text);
2440 if (r < 0)
2441 return r;
3a2776bc 2442
e266c068
MS
2443 service_serialize_exec_command(u, f, s->control_command);
2444 service_serialize_exec_command(u, f, s->main_command);
a16e1123 2445
a34ceba6
LP
2446 r = unit_serialize_item_fd(u, f, fds, "stdin-fd", s->stdin_fd);
2447 if (r < 0)
2448 return r;
2449 r = unit_serialize_item_fd(u, f, fds, "stdout-fd", s->stdout_fd);
2450 if (r < 0)
2451 return r;
2452 r = unit_serialize_item_fd(u, f, fds, "stderr-fd", s->stderr_fd);
2453 if (r < 0)
2454 return r;
e44da745 2455
9dfb64f8
ZJS
2456 if (UNIT_ISSET(s->accept_socket)) {
2457 r = unit_serialize_item(u, f, "accept-socket", UNIT_DEREF(s->accept_socket)->id);
2458 if (r < 0)
2459 return r;
2460 }
2461
a34ceba6 2462 r = unit_serialize_item_fd(u, f, fds, "socket-fd", s->socket_fd);
a34ceba6
LP
2463 if (r < 0)
2464 return r;
e44da745 2465
2339fc93 2466 LIST_FOREACH(fd_store, fs, s->fd_store) {
8dd4c05b 2467 _cleanup_free_ char *c = NULL;
2339fc93
LP
2468 int copy;
2469
2470 copy = fdset_put_dup(fds, fs->fd);
2471 if (copy < 0)
2472 return copy;
2473
8dd4c05b
LP
2474 c = cescape(fs->fdname);
2475
2476 unit_serialize_item_format(u, f, "fd-store-fd", "%i %s", copy, strempty(c));
2339fc93
LP
2477 }
2478
ecdbca40 2479 if (s->main_exec_status.pid > 0) {
f06db334
LP
2480 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT, s->main_exec_status.pid);
2481 dual_timestamp_serialize(f, "main-exec-status-start", &s->main_exec_status.start_timestamp);
2482 dual_timestamp_serialize(f, "main-exec-status-exit", &s->main_exec_status.exit_timestamp);
ecdbca40 2483
799fd0fd 2484 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
f06db334
LP
2485 unit_serialize_item_format(u, f, "main-exec-status-code", "%i", s->main_exec_status.code);
2486 unit_serialize_item_format(u, f, "main-exec-status-status", "%i", s->main_exec_status.status);
ecdbca40
LP
2487 }
2488 }
f06db334 2489
36b693a6 2490 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
ecdbca40 2491
a34ceba6 2492 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
6aca9a58 2493
2787d83c
M
2494 if (s->watchdog_override_enable)
2495 unit_serialize_item_format(u, f, "watchdog-override-usec", USEC_FMT, s->watchdog_override_usec);
2496
a16e1123
LP
2497 return 0;
2498}
2499
e266c068
MS
2500static int service_deserialize_exec_command(Unit *u, const char *key, const char *value) {
2501 Service *s = SERVICE(u);
2502 int r;
2503 unsigned idx = 0, i;
2504 bool control, found = false;
2505 ServiceExecCommand id = _SERVICE_EXEC_COMMAND_INVALID;
2506 ExecCommand *command = NULL;
6eeec374 2507 _cleanup_free_ char *path = NULL;
e266c068
MS
2508 _cleanup_strv_free_ char **argv = NULL;
2509
2510 enum ExecCommandState {
2511 STATE_EXEC_COMMAND_TYPE,
2512 STATE_EXEC_COMMAND_INDEX,
2513 STATE_EXEC_COMMAND_PATH,
2514 STATE_EXEC_COMMAND_ARGS,
2515 _STATE_EXEC_COMMAND_MAX,
2516 _STATE_EXEC_COMMAND_INVALID = -1,
2517 } state;
2518
2519 assert(s);
2520 assert(key);
2521 assert(value);
2522
2523 control = streq(key, "control-command");
2524
2525 state = STATE_EXEC_COMMAND_TYPE;
2526
2527 for (;;) {
2528 _cleanup_free_ char *arg = NULL;
2529
2530 r = extract_first_word(&value, &arg, NULL, EXTRACT_CUNESCAPE);
2531 if (r == 0)
2532 break;
2533 else if (r < 0)
2534 return r;
2535
2536 switch (state) {
2537 case STATE_EXEC_COMMAND_TYPE:
2538 id = service_exec_command_from_string(arg);
2539 if (id < 0)
2540 return -EINVAL;
2541
2542 state = STATE_EXEC_COMMAND_INDEX;
2543 break;
2544 case STATE_EXEC_COMMAND_INDEX:
2545 r = safe_atou(arg, &idx);
2546 if (r < 0)
2547 return -EINVAL;
2548
2549 state = STATE_EXEC_COMMAND_PATH;
2550 break;
2551 case STATE_EXEC_COMMAND_PATH:
2552 path = arg;
2553 arg = NULL;
2554 state = STATE_EXEC_COMMAND_ARGS;
2555
2556 if (!path_is_absolute(path))
2557 return -EINVAL;
2558 break;
2559 case STATE_EXEC_COMMAND_ARGS:
2560 r = strv_extend(&argv, arg);
2561 if (r < 0)
2562 return -ENOMEM;
2563 break;
2564 default:
2565 assert_not_reached("Unknown error at deserialization of exec command");
2566 break;
2567 }
2568 }
2569
2570 if (state != STATE_EXEC_COMMAND_ARGS)
2571 return -EINVAL;
2572
2573 /* Let's check whether exec command on given offset matches data that we just deserialized */
2574 for (command = s->exec_command[id], i = 0; command; command = command->command_next, i++) {
2575 if (i != idx)
2576 continue;
2577
2578 found = strv_equal(argv, command->argv) && streq(command->path, path);
2579 break;
2580 }
2581
2582 if (!found) {
2583 /* Command at the index we serialized is different, let's look for command that exactly
2584 * matches but is on different index. If there is no such command we will not resume execution. */
2585 for (command = s->exec_command[id]; command; command = command->command_next)
2586 if (strv_equal(command->argv, argv) && streq(command->path, path))
2587 break;
2588 }
2589
2590 if (command && control)
2591 s->control_command = command;
2592 else if (command)
2593 s->main_command = command;
2594 else
2595 log_unit_warning(u, "Current command vanished from the unit file, execution of the command list won't be resumed.");
2596
2597 return 0;
2598}
2599
a16e1123
LP
2600static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2601 Service *s = SERVICE(u);
2339fc93 2602 int r;
a16e1123
LP
2603
2604 assert(u);
2605 assert(key);
2606 assert(value);
2607 assert(fds);
2608
2609 if (streq(key, "state")) {
2610 ServiceState state;
2611
117dcc57
ZJS
2612 state = service_state_from_string(value);
2613 if (state < 0)
f2341e0a 2614 log_unit_debug(u, "Failed to parse state value: %s", value);
a16e1123
LP
2615 else
2616 s->deserialized_state = state;
f42806df
LP
2617 } else if (streq(key, "result")) {
2618 ServiceResult f;
2619
2620 f = service_result_from_string(value);
2621 if (f < 0)
f2341e0a 2622 log_unit_debug(u, "Failed to parse result value: %s", value);
f42806df
LP
2623 else if (f != SERVICE_SUCCESS)
2624 s->result = f;
2625
2626 } else if (streq(key, "reload-result")) {
2627 ServiceResult f;
2628
2629 f = service_result_from_string(value);
2630 if (f < 0)
f2341e0a 2631 log_unit_debug(u, "Failed to parse reload result value: %s", value);
f42806df
LP
2632 else if (f != SERVICE_SUCCESS)
2633 s->reload_result = f;
a16e1123 2634
a16e1123 2635 } else if (streq(key, "control-pid")) {
5925dd3c 2636 pid_t pid;
a16e1123 2637
e364ad06 2638 if (parse_pid(value, &pid) < 0)
f2341e0a 2639 log_unit_debug(u, "Failed to parse control-pid value: %s", value);
a16e1123 2640 else
e55224ca 2641 s->control_pid = pid;
a16e1123 2642 } else if (streq(key, "main-pid")) {
5925dd3c 2643 pid_t pid;
a16e1123 2644
e364ad06 2645 if (parse_pid(value, &pid) < 0)
f2341e0a 2646 log_unit_debug(u, "Failed to parse main-pid value: %s", value);
eabd3e56
LP
2647 else
2648 (void) service_set_main_pid(s, pid);
a16e1123
LP
2649 } else if (streq(key, "main-pid-known")) {
2650 int b;
2651
117dcc57
ZJS
2652 b = parse_boolean(value);
2653 if (b < 0)
f2341e0a 2654 log_unit_debug(u, "Failed to parse main-pid-known value: %s", value);
a16e1123
LP
2655 else
2656 s->main_pid_known = b;
de1d4f9b
WF
2657 } else if (streq(key, "bus-name-good")) {
2658 int b;
2659
2660 b = parse_boolean(value);
2661 if (b < 0)
2662 log_unit_debug(u, "Failed to parse bus-name-good value: %s", value);
2663 else
2664 s->bus_name_good = b;
d8ccf5fd
DM
2665 } else if (streq(key, "bus-name-owner")) {
2666 r = free_and_strdup(&s->bus_name_owner, value);
2667 if (r < 0)
2668 log_unit_error_errno(u, r, "Unable to deserialize current bus owner %s: %m", value);
3a2776bc
LP
2669 } else if (streq(key, "status-text")) {
2670 char *t;
2671
f2341e0a
LP
2672 r = cunescape(value, 0, &t);
2673 if (r < 0)
2674 log_unit_debug_errno(u, r, "Failed to unescape status text: %s", value);
117dcc57 2675 else {
3a2776bc
LP
2676 free(s->status_text);
2677 s->status_text = t;
2678 }
2679
9dfb64f8
ZJS
2680 } else if (streq(key, "accept-socket")) {
2681 Unit *socket;
2682
2683 r = manager_load_unit(u->manager, value, NULL, NULL, &socket);
2684 if (r < 0)
2685 log_unit_debug_errno(u, r, "Failed to load accept-socket unit: %s", value);
2686 else {
2687 unit_ref_set(&s->accept_socket, socket);
2688 SOCKET(socket)->n_connections++;
2689 }
2690
a16e1123
LP
2691 } else if (streq(key, "socket-fd")) {
2692 int fd;
2693
2694 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
f2341e0a 2695 log_unit_debug(u, "Failed to parse socket-fd value: %s", value);
a16e1123 2696 else {
574634bc 2697 asynchronous_close(s->socket_fd);
a16e1123
LP
2698 s->socket_fd = fdset_remove(fds, fd);
2699 }
2339fc93 2700 } else if (streq(key, "fd-store-fd")) {
8dd4c05b
LP
2701 const char *fdv;
2702 size_t pf;
2339fc93
LP
2703 int fd;
2704
8dd4c05b
LP
2705 pf = strcspn(value, WHITESPACE);
2706 fdv = strndupa(value, pf);
2707
2708 if (safe_atoi(fdv, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
f2341e0a 2709 log_unit_debug(u, "Failed to parse fd-store-fd value: %s", value);
2339fc93 2710 else {
8dd4c05b
LP
2711 _cleanup_free_ char *t = NULL;
2712 const char *fdn;
2713
2714 fdn = value + pf;
2715 fdn += strspn(fdn, WHITESPACE);
2716 (void) cunescape(fdn, 0, &t);
2717
2718 r = service_add_fd_store(s, fd, t);
2339fc93 2719 if (r < 0)
f2341e0a 2720 log_unit_error_errno(u, r, "Failed to add fd to store: %m");
9021ff17 2721 else
2339fc93
LP
2722 fdset_remove(fds, fd);
2723 }
2724
ecdbca40
LP
2725 } else if (streq(key, "main-exec-status-pid")) {
2726 pid_t pid;
2727
e364ad06 2728 if (parse_pid(value, &pid) < 0)
f2341e0a 2729 log_unit_debug(u, "Failed to parse main-exec-status-pid value: %s", value);
ecdbca40
LP
2730 else
2731 s->main_exec_status.pid = pid;
2732 } else if (streq(key, "main-exec-status-code")) {
2733 int i;
2734
e364ad06 2735 if (safe_atoi(value, &i) < 0)
f2341e0a 2736 log_unit_debug(u, "Failed to parse main-exec-status-code value: %s", value);
ecdbca40
LP
2737 else
2738 s->main_exec_status.code = i;
2739 } else if (streq(key, "main-exec-status-status")) {
2740 int i;
2741
e364ad06 2742 if (safe_atoi(value, &i) < 0)
f2341e0a 2743 log_unit_debug(u, "Failed to parse main-exec-status-status value: %s", value);
ecdbca40
LP
2744 else
2745 s->main_exec_status.status = i;
799fd0fd
LP
2746 } else if (streq(key, "main-exec-status-start"))
2747 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2748 else if (streq(key, "main-exec-status-exit"))
2749 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
a6927d7f
MO
2750 else if (streq(key, "watchdog-timestamp"))
2751 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
613b411c 2752 else if (streq(key, "forbid-restart")) {
6aca9a58
SE
2753 int b;
2754
2755 b = parse_boolean(value);
2756 if (b < 0)
f2341e0a 2757 log_unit_debug(u, "Failed to parse forbid-restart value: %s", value);
6aca9a58
SE
2758 else
2759 s->forbid_restart = b;
a34ceba6
LP
2760 } else if (streq(key, "stdin-fd")) {
2761 int fd;
2762
2763 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2764 log_unit_debug(u, "Failed to parse stdin-fd value: %s", value);
2765 else {
2766 asynchronous_close(s->stdin_fd);
2767 s->stdin_fd = fdset_remove(fds, fd);
1e22b5cd 2768 s->exec_context.stdio_as_fds = true;
a34ceba6
LP
2769 }
2770 } else if (streq(key, "stdout-fd")) {
2771 int fd;
2772
2773 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2774 log_unit_debug(u, "Failed to parse stdout-fd value: %s", value);
2775 else {
2776 asynchronous_close(s->stdout_fd);
2777 s->stdout_fd = fdset_remove(fds, fd);
1e22b5cd 2778 s->exec_context.stdio_as_fds = true;
a34ceba6
LP
2779 }
2780 } else if (streq(key, "stderr-fd")) {
2781 int fd;
2782
2783 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2784 log_unit_debug(u, "Failed to parse stderr-fd value: %s", value);
2785 else {
2786 asynchronous_close(s->stderr_fd);
2787 s->stderr_fd = fdset_remove(fds, fd);
1e22b5cd 2788 s->exec_context.stdio_as_fds = true;
a34ceba6 2789 }
2787d83c
M
2790 } else if (streq(key, "watchdog-override-usec")) {
2791 usec_t watchdog_override_usec;
2792 if (timestamp_deserialize(value, &watchdog_override_usec) < 0)
2793 log_unit_debug(u, "Failed to parse watchdog_override_usec value: %s", value);
2794 else {
2795 s->watchdog_override_enable = true;
2796 s->watchdog_override_usec = watchdog_override_usec;
2797 }
e266c068
MS
2798 } else if (STR_IN_SET(key, "main-command", "control-command")) {
2799 r = service_deserialize_exec_command(u, key, value);
2800 if (r < 0)
2801 log_unit_debug_errno(u, r, "Failed to parse serialized command \"%s\": %m", value);
7a0019d3
LP
2802
2803 } else if (streq(key, "n-restarts")) {
2804 r = safe_atou(value, &s->n_restarts);
2805 if (r < 0)
2806 log_unit_debug_errno(u, r, "Failed to parse serialized restart counter '%s': %m", value);
2807
2808 } else if (streq(key, "flush-n-restarts")) {
2809 r = parse_boolean(value);
2810 if (r < 0)
2811 log_unit_debug_errno(u, r, "Failed to parse serialized flush restart counter setting '%s': %m", value);
2812 else
2813 s->flush_n_restarts = r;
c17ec25e 2814 } else
f2341e0a 2815 log_unit_debug(u, "Unknown serialization key: %s", key);
a16e1123
LP
2816
2817 return 0;
2818}
2819
44a6b1b6 2820_pure_ static UnitActiveState service_active_state(Unit *u) {
e056b01d
LP
2821 const UnitActiveState *table;
2822
87f0e418 2823 assert(u);
5cb5a6ff 2824
e056b01d
LP
2825 table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2826
2827 return table[SERVICE(u)->state];
034c6ed7
LP
2828}
2829
10a94420
LP
2830static const char *service_sub_state_to_string(Unit *u) {
2831 assert(u);
2832
2833 return service_state_to_string(SERVICE(u)->state);
2834}
2835
f2f725e5 2836static bool service_may_gc(Unit *u) {
701cc384
LP
2837 Service *s = SERVICE(u);
2838
2839 assert(s);
2840
e98b2fbb 2841 /* Never clean up services that still have a process around, even if the service is formally dead. Note that
f2f725e5 2842 * unit_may_gc() already checked our cgroup for us, we just check our two additional PIDs, too, in case they
e98b2fbb
LP
2843 * have moved outside of the cgroup. */
2844
2845 if (main_pid_good(s) > 0 ||
6d55002a 2846 control_pid_good(s) > 0)
f2f725e5 2847 return false;
6d55002a 2848
f2f725e5 2849 return true;
6d55002a
LP
2850}
2851
3a111838
MS
2852static int service_retry_pid_file(Service *s) {
2853 int r;
2854
2855 assert(s->pid_file);
3742095b 2856 assert(IN_SET(s->state, SERVICE_START, SERVICE_START_POST));
3a111838
MS
2857
2858 r = service_load_pid_file(s, false);
2859 if (r < 0)
2860 return r;
2861
2862 service_unwatch_pid_file(s);
2863
f42806df 2864 service_enter_running(s, SERVICE_SUCCESS);
3a111838
MS
2865 return 0;
2866}
2867
2868static int service_watch_pid_file(Service *s) {
2869 int r;
2870
f2341e0a 2871 log_unit_debug(UNIT(s), "Setting watch for PID file %s", s->pid_file_pathspec->path);
8bb2d17d 2872
718db961 2873 r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
3a111838
MS
2874 if (r < 0)
2875 goto fail;
2876
2877 /* the pidfile might have appeared just before we set the watch */
f2341e0a 2878 log_unit_debug(UNIT(s), "Trying to read PID file %s in case it changed", s->pid_file_pathspec->path);
3a111838
MS
2879 service_retry_pid_file(s);
2880
2881 return 0;
2882fail:
f2341e0a 2883 log_unit_error_errno(UNIT(s), r, "Failed to set a watch for PID file %s: %m", s->pid_file_pathspec->path);
3a111838
MS
2884 service_unwatch_pid_file(s);
2885 return r;
2886}
2887
2888static int service_demand_pid_file(Service *s) {
2889 PathSpec *ps;
2890
2891 assert(s->pid_file);
2892 assert(!s->pid_file_pathspec);
2893
2894 ps = new0(PathSpec, 1);
2895 if (!ps)
2896 return -ENOMEM;
2897
718db961 2898 ps->unit = UNIT(s);
3a111838
MS
2899 ps->path = strdup(s->pid_file);
2900 if (!ps->path) {
2901 free(ps);
2902 return -ENOMEM;
2903 }
2904
2905 path_kill_slashes(ps->path);
2906
2907 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2908 * keep their PID file open all the time. */
2909 ps->type = PATH_MODIFIED;
2910 ps->inotify_fd = -1;
2911
2912 s->pid_file_pathspec = ps;
2913
2914 return service_watch_pid_file(s);
2915}
2916
718db961 2917static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
e14c2802
LP
2918 PathSpec *p = userdata;
2919 Service *s;
2920
2921 assert(p);
2922
2923 s = SERVICE(p->unit);
3a111838
MS
2924
2925 assert(s);
2926 assert(fd >= 0);
3742095b 2927 assert(IN_SET(s->state, SERVICE_START, SERVICE_START_POST));
3a111838 2928 assert(s->pid_file_pathspec);
57020a3a 2929 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
3a111838 2930
f2341e0a 2931 log_unit_debug(UNIT(s), "inotify event");
3a111838 2932
e14c2802 2933 if (path_spec_fd_event(p, events) < 0)
3a111838
MS
2934 goto fail;
2935
2936 if (service_retry_pid_file(s) == 0)
718db961 2937 return 0;
3a111838
MS
2938
2939 if (service_watch_pid_file(s) < 0)
2940 goto fail;
2941
718db961
LP
2942 return 0;
2943
3a111838
MS
2944fail:
2945 service_unwatch_pid_file(s);
f42806df 2946 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
718db961 2947 return 0;
3a111838
MS
2948}
2949
a911bb9a
LP
2950static void service_notify_cgroup_empty_event(Unit *u) {
2951 Service *s = SERVICE(u);
2952
2953 assert(u);
2954
f2341e0a 2955 log_unit_debug(u, "cgroup is empty");
a911bb9a
LP
2956
2957 switch (s->state) {
2958
2959 /* Waiting for SIGCHLD is usually more interesting,
2960 * because it includes return codes/signals. Which is
2961 * why we ignore the cgroup events for most cases,
2962 * except when we don't know pid which to expect the
2963 * SIGCHLD for. */
2964
2965 case SERVICE_START:
3c751b1b
LP
2966 if (s->type == SERVICE_NOTIFY &&
2967 main_pid_good(s) == 0 &&
2968 control_pid_good(s) == 0) {
3d474ef7 2969 /* No chance of getting a ready notification anymore */
c3fda31d 2970 service_enter_stop_post(s, SERVICE_FAILURE_PROTOCOL);
71e529fc
JW
2971 break;
2972 }
2973
4831981d 2974 _fallthrough_;
71e529fc 2975 case SERVICE_START_POST:
3c751b1b
LP
2976 if (s->pid_file_pathspec &&
2977 main_pid_good(s) == 0 &&
2978 control_pid_good(s) == 0) {
2979
3d474ef7 2980 /* Give up hoping for the daemon to write its PID file */
f2341e0a 2981 log_unit_warning(u, "Daemon never wrote its PID file. Failing.");
8bb2d17d 2982
a911bb9a
LP
2983 service_unwatch_pid_file(s);
2984 if (s->state == SERVICE_START)
c3fda31d 2985 service_enter_stop_post(s, SERVICE_FAILURE_PROTOCOL);
a911bb9a 2986 else
c35755fb 2987 service_enter_stop(s, SERVICE_FAILURE_PROTOCOL);
a911bb9a
LP
2988 }
2989 break;
2990
2991 case SERVICE_RUNNING:
2992 /* service_enter_running() will figure out what to do */
2993 service_enter_running(s, SERVICE_SUCCESS);
2994 break;
2995
db2cb23b 2996 case SERVICE_STOP_SIGABRT:
a911bb9a
LP
2997 case SERVICE_STOP_SIGTERM:
2998 case SERVICE_STOP_SIGKILL:
2999
b13ddbbc 3000 if (main_pid_good(s) <= 0 && control_pid_good(s) <= 0)
a911bb9a
LP
3001 service_enter_stop_post(s, SERVICE_SUCCESS);
3002
3003 break;
3004
3005 case SERVICE_STOP_POST:
3006 case SERVICE_FINAL_SIGTERM:
3007 case SERVICE_FINAL_SIGKILL:
b13ddbbc 3008 if (main_pid_good(s) <= 0 && control_pid_good(s) <= 0)
a911bb9a
LP
3009 service_enter_dead(s, SERVICE_SUCCESS, true);
3010
3011 break;
3012
3013 default:
3014 ;
3015 }
3016}
3017
87f0e418 3018static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
5cdabc8d 3019 bool notify_dbus = true;
87f0e418 3020 Service *s = SERVICE(u);
f42806df 3021 ServiceResult f;
5cb5a6ff
LP
3022
3023 assert(s);
034c6ed7
LP
3024 assert(pid >= 0);
3025
1f0958f6 3026 if (is_clean_exit(code, status, s->type == SERVICE_ONESHOT ? EXIT_CLEAN_COMMAND : EXIT_CLEAN_DAEMON, &s->success_status))
f42806df
LP
3027 f = SERVICE_SUCCESS;
3028 else if (code == CLD_EXITED)
3029 f = SERVICE_FAILURE_EXIT_CODE;
3030 else if (code == CLD_KILLED)
3031 f = SERVICE_FAILURE_SIGNAL;
3032 else if (code == CLD_DUMPED)
3033 f = SERVICE_FAILURE_CORE_DUMP;
d06dacd0 3034 else
cfc4eb4c 3035 assert_not_reached("Unknown code");
034c6ed7
LP
3036
3037 if (s->main_pid == pid) {
db01f8b3
MS
3038 /* Forking services may occasionally move to a new PID.
3039 * As long as they update the PID file before exiting the old
3040 * PID, they're fine. */
db256aab 3041 if (service_load_pid_file(s, false) > 0)
db01f8b3 3042 return;
034c6ed7 3043
034c6ed7 3044 s->main_pid = 0;
6ea832a2 3045 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
034c6ed7 3046
867b3b7d 3047 if (s->main_command) {
fbeefb45
LP
3048 /* If this is not a forking service than the
3049 * main process got started and hence we copy
3050 * the exit status so that it is recorded both
3051 * as main and as control process exit
3052 * status */
3053
867b3b7d 3054 s->main_command->exec_status = s->main_exec_status;
b708e7ce 3055
3ed0cd26 3056 if (s->main_command->flags & EXEC_COMMAND_IGNORE_FAILURE)
f42806df 3057 f = SERVICE_SUCCESS;
fbeefb45
LP
3058 } else if (s->exec_command[SERVICE_EXEC_START]) {
3059
3060 /* If this is a forked process, then we should
3061 * ignore the return value if this was
3062 * configured for the starter process */
3063
3ed0cd26 3064 if (s->exec_command[SERVICE_EXEC_START]->flags & EXEC_COMMAND_IGNORE_FAILURE)
fbeefb45 3065 f = SERVICE_SUCCESS;
034c6ed7
LP
3066 }
3067
5368222d
LP
3068 /* When this is a successful exit, let's log about the exit code on DEBUG level. If this is a failure
3069 * and the process exited on its own via exit(), then let's make this a NOTICE, under the assumption
3070 * that the service already logged the reason at a higher log level on its own. However, if the service
3071 * died due to a signal, then it most likely didn't say anything about any reason, hence let's raise
3072 * our log level to WARNING then. */
3073
3074 log_struct(f == SERVICE_SUCCESS ? LOG_DEBUG :
3075 (code == CLD_EXITED ? LOG_NOTICE : LOG_WARNING),
f2341e0a
LP
3076 LOG_UNIT_MESSAGE(u, "Main process exited, code=%s, status=%i/%s",
3077 sigchld_code_to_string(code), status,
e2cc6eca
LP
3078 strna(code == CLD_EXITED
3079 ? exit_status_to_string(status, EXIT_STATUS_FULL)
3080 : signal_to_string(status))),
f2341e0a
LP
3081 "EXIT_CODE=%s", sigchld_code_to_string(code),
3082 "EXIT_STATUS=%i", status,
ba360bb0 3083 LOG_UNIT_ID(u),
f1c50bec 3084 LOG_UNIT_INVOCATION_ID(u),
f2341e0a 3085 NULL);
f42806df 3086
a0fef983 3087 if (s->result == SERVICE_SUCCESS)
f42806df 3088 s->result = f;
034c6ed7 3089
867b3b7d
LP
3090 if (s->main_command &&
3091 s->main_command->command_next &&
b58aeb70 3092 s->type == SERVICE_ONESHOT &&
f42806df 3093 f == SERVICE_SUCCESS) {
034c6ed7 3094
34e9ba66
LP
3095 /* There is another command to *
3096 * execute, so let's do that. */
034c6ed7 3097
f2341e0a 3098 log_unit_debug(u, "Running next main command for state %s.", service_state_to_string(s->state));
f42806df 3099 service_run_next_main(s);
034c6ed7 3100
34e9ba66
LP
3101 } else {
3102
3103 /* The service exited, so the service is officially
3104 * gone. */
867b3b7d 3105 s->main_command = NULL;
34e9ba66
LP
3106
3107 switch (s->state) {
3108
3109 case SERVICE_START_POST:
3110 case SERVICE_RELOAD:
3111 case SERVICE_STOP:
3112 /* Need to wait until the operation is
3113 * done */
c4653a4d 3114 break;
7d55e835 3115
34e9ba66
LP
3116 case SERVICE_START:
3117 if (s->type == SERVICE_ONESHOT) {
3118 /* This was our main goal, so let's go on */
f42806df 3119 if (f == SERVICE_SUCCESS)
34e9ba66
LP
3120 service_enter_start_post(s);
3121 else
c3fda31d 3122 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
34e9ba66 3123 break;
3d474ef7
JW
3124 } else if (s->type == SERVICE_NOTIFY) {
3125 /* Only enter running through a notification, so that the
3126 * SERVICE_START state signifies that no ready notification
3127 * has been received */
3128 if (f != SERVICE_SUCCESS)
c3fda31d 3129 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
df66b93f
JW
3130 else if (!s->remain_after_exit || s->notify_access == NOTIFY_MAIN)
3131 /* The service has never been and will never be active */
c3fda31d 3132 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_PROTOCOL);
3d474ef7 3133 break;
34e9ba66 3134 }
034c6ed7 3135
4831981d 3136 _fallthrough_;
34e9ba66 3137 case SERVICE_RUNNING:
f42806df 3138 service_enter_running(s, f);
34e9ba66 3139 break;
034c6ed7 3140
db2cb23b 3141 case SERVICE_STOP_SIGABRT:
34e9ba66
LP
3142 case SERVICE_STOP_SIGTERM:
3143 case SERVICE_STOP_SIGKILL:
5cb5a6ff 3144
b13ddbbc 3145 if (control_pid_good(s) <= 0)
f42806df 3146 service_enter_stop_post(s, f);
5cb5a6ff 3147
34e9ba66
LP
3148 /* If there is still a control process, wait for that first */
3149 break;
3150
bf108e55
LP
3151 case SERVICE_STOP_POST:
3152 case SERVICE_FINAL_SIGTERM:
3153 case SERVICE_FINAL_SIGKILL:
3154
b13ddbbc 3155 if (control_pid_good(s) <= 0)
bf108e55
LP
3156 service_enter_dead(s, f, true);
3157 break;
3158
34e9ba66
LP
3159 default:
3160 assert_not_reached("Uh, main process died at wrong time.");
3161 }
034c6ed7 3162 }
5cb5a6ff 3163
034c6ed7 3164 } else if (s->control_pid == pid) {
34e9ba66
LP
3165 s->control_pid = 0;
3166
b708e7ce 3167 if (s->control_command) {
8bb2d17d 3168 exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
a16e1123 3169
3ed0cd26 3170 if (s->control_command->flags & EXEC_COMMAND_IGNORE_FAILURE)
f42806df 3171 f = SERVICE_SUCCESS;
b708e7ce
LP
3172 }
3173
f2341e0a
LP
3174 log_unit_full(u, f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, 0,
3175 "Control process exited, code=%s status=%i",
3176 sigchld_code_to_string(code), status);
f42806df 3177
a0fef983 3178 if (s->result == SERVICE_SUCCESS)
f42806df 3179 s->result = f;
034c6ed7 3180
34e9ba66
LP
3181 if (s->control_command &&
3182 s->control_command->command_next &&
f42806df 3183 f == SERVICE_SUCCESS) {
034c6ed7
LP
3184
3185 /* There is another command to *
3186 * execute, so let's do that. */
3187
f2341e0a 3188 log_unit_debug(u, "Running next control command for state %s.", service_state_to_string(s->state));
f42806df 3189 service_run_next_control(s);
034c6ed7 3190
80876c20 3191 } else {
034c6ed7
LP
3192 /* No further commands for this step, so let's
3193 * figure out what to do next */
3194
a16e1123
LP
3195 s->control_command = NULL;
3196 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3197
f2341e0a 3198 log_unit_debug(u, "Got final SIGCHLD for state %s.", service_state_to_string(s->state));
bd982a8b 3199
034c6ed7
LP
3200 switch (s->state) {
3201
3202 case SERVICE_START_PRE:
f42806df 3203 if (f == SERVICE_SUCCESS)
034c6ed7
LP
3204 service_enter_start(s);
3205 else
c3fda31d 3206 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
3207 break;
3208
3209 case SERVICE_START:
bfba3256
LP
3210 if (s->type != SERVICE_FORKING)
3211 /* Maybe spurious event due to a reload that changed the type? */
3212 break;
034c6ed7 3213
f42806df 3214 if (f != SERVICE_SUCCESS) {
c3fda31d 3215 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
3a111838
MS
3216 break;
3217 }
034c6ed7 3218
3a111838 3219 if (s->pid_file) {
f42806df
LP
3220 bool has_start_post;
3221 int r;
3222
3a111838
MS
3223 /* Let's try to load the pid file here if we can.
3224 * The PID file might actually be created by a START_POST
3225 * script. In that case don't worry if the loading fails. */
f42806df
LP
3226
3227 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3228 r = service_load_pid_file(s, !has_start_post);
3a111838
MS
3229 if (!has_start_post && r < 0) {
3230 r = service_demand_pid_file(s);
b13ddbbc 3231 if (r < 0 || cgroup_good(s) == 0)
c3fda31d 3232 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_PROTOCOL);
3a111838
MS
3233 break;
3234 }
034c6ed7 3235 } else
783e05d6 3236 service_search_main_pid(s);
034c6ed7 3237
3a111838 3238 service_enter_start_post(s);
034c6ed7
LP
3239 break;
3240
3241 case SERVICE_START_POST:
f42806df 3242 if (f != SERVICE_SUCCESS) {
ce359e98 3243 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
2096e009 3244 break;
034c6ed7
LP
3245 }
3246
2096e009 3247 if (s->pid_file) {
f42806df
LP
3248 int r;
3249
3250 r = service_load_pid_file(s, true);
2096e009
MS
3251 if (r < 0) {
3252 r = service_demand_pid_file(s);
b13ddbbc 3253 if (r < 0 || cgroup_good(s) == 0)
c35755fb 3254 service_enter_stop(s, SERVICE_FAILURE_PROTOCOL);
2096e009
MS
3255 break;
3256 }
3257 } else
783e05d6 3258 service_search_main_pid(s);
2096e009 3259
f42806df 3260 service_enter_running(s, SERVICE_SUCCESS);
3185a36b 3261 break;
034c6ed7
LP
3262
3263 case SERVICE_RELOAD:
7236ce6e
ZJS
3264 if (f == SERVICE_SUCCESS)
3265 if (service_load_pid_file(s, true) < 0)
3266 service_search_main_pid(s);
3185a36b 3267
f42806df
LP
3268 s->reload_result = f;
3269 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
3270 break;
3271
3272 case SERVICE_STOP:
f42806df 3273 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
3274 break;
3275
db2cb23b 3276 case SERVICE_STOP_SIGABRT:
034c6ed7
LP
3277 case SERVICE_STOP_SIGTERM:
3278 case SERVICE_STOP_SIGKILL:
3279 if (main_pid_good(s) <= 0)
f42806df 3280 service_enter_stop_post(s, f);
034c6ed7
LP
3281
3282 /* If there is still a service
3283 * process around, wait until
3284 * that one quit, too */
3285 break;
3286
3287 case SERVICE_STOP_POST:
3288 case SERVICE_FINAL_SIGTERM:
3289 case SERVICE_FINAL_SIGKILL:
bf108e55
LP
3290 if (main_pid_good(s) <= 0)
3291 service_enter_dead(s, f, true);
034c6ed7
LP
3292 break;
3293
3294 default:
3295 assert_not_reached("Uh, control process died at wrong time.");
3296 }
3297 }
5cdabc8d
LP
3298 } else /* Neither control nor main PID? If so, don't notify about anything */
3299 notify_dbus = false;
c4e2ceae
LP
3300
3301 /* Notify clients about changed exit status */
5cdabc8d
LP
3302 if (notify_dbus)
3303 unit_add_to_dbus_queue(u);
a911bb9a 3304
11aef522
LP
3305 /* If we get a SIGCHLD event for one of the processes we were interested in, then we look for others to watch,
3306 * under the assumption that we'll sooner or later get a SIGCHLD for them, as the original process we watched
3307 * was probably the parent of them, and they are hence now our children. */
a911bb9a
LP
3308 unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
3309 unit_watch_all_pids(u);
3310
11aef522
LP
3311 /* If the PID set is empty now, then let's check if the cgroup is empty too and finish off the unit. */
3312 unit_synthesize_cgroup_empty_event(u);
034c6ed7
LP
3313}
3314
718db961
LP
3315static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
3316 Service *s = SERVICE(userdata);
034c6ed7
LP
3317
3318 assert(s);
718db961 3319 assert(source == s->timer_event_source);
034c6ed7
LP
3320
3321 switch (s->state) {
3322
3323 case SERVICE_START_PRE:
3324 case SERVICE_START:
f2341e0a 3325 log_unit_warning(UNIT(s), "%s operation timed out. Terminating.", s->state == SERVICE_START ? "Start" : "Start-pre");
c3fda31d 3326 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
80876c20
LP
3327 break;
3328
034c6ed7 3329 case SERVICE_START_POST:
f2341e0a 3330 log_unit_warning(UNIT(s), "Start-post operation timed out. Stopping.");
ce359e98 3331 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3332 break;
3333
36c16a7c
LP
3334 case SERVICE_RUNNING:
3335 log_unit_warning(UNIT(s), "Service reached runtime time limit. Stopping.");
3336 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
3337 break;
3338
e2f3b44c 3339 case SERVICE_RELOAD:
089b64d5 3340 log_unit_warning(UNIT(s), "Reload operation timed out. Killing reload process.");
e9a4f676 3341 service_kill_control_process(s);
f42806df
LP
3342 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3343 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c
LP
3344 break;
3345
034c6ed7 3346 case SERVICE_STOP:
f2341e0a 3347 log_unit_warning(UNIT(s), "Stopping timed out. Terminating.");
f42806df 3348 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3349 break;
3350
db2cb23b 3351 case SERVICE_STOP_SIGABRT:
f2341e0a 3352 log_unit_warning(UNIT(s), "State 'stop-sigabrt' timed out. Terminating.");
2ab2ab7b 3353 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
db2cb23b
UTL
3354 break;
3355
034c6ed7 3356 case SERVICE_STOP_SIGTERM:
4819ff03 3357 if (s->kill_context.send_sigkill) {
f2341e0a 3358 log_unit_warning(UNIT(s), "State 'stop-sigterm' timed out. Killing.");
f42806df 3359 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3360 } else {
f2341e0a 3361 log_unit_warning(UNIT(s), "State 'stop-sigterm' timed out. Skipping SIGKILL.");
f42806df 3362 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
ba035df2
LP
3363 }
3364
034c6ed7
LP
3365 break;
3366
3367 case SERVICE_STOP_SIGKILL:
35b8ca3a 3368 /* Uh, we sent a SIGKILL and it is still not gone?
034c6ed7
LP
3369 * Must be something we cannot kill, so let's just be
3370 * weirded out and continue */
3371
f2341e0a 3372 log_unit_warning(UNIT(s), "Processes still around after SIGKILL. Ignoring.");
f42806df 3373 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3374 break;
3375
3376 case SERVICE_STOP_POST:
f2341e0a 3377 log_unit_warning(UNIT(s), "State 'stop-post' timed out. Terminating.");
f42806df 3378 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3379 break;
3380
3381 case SERVICE_FINAL_SIGTERM:
4819ff03 3382 if (s->kill_context.send_sigkill) {
f2341e0a 3383 log_unit_warning(UNIT(s), "State 'stop-final-sigterm' timed out. Killing.");
f42806df 3384 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3385 } else {
f2341e0a 3386 log_unit_warning(UNIT(s), "State 'stop-final-sigterm' timed out. Skipping SIGKILL. Entering failed mode.");
f42806df 3387 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
ba035df2
LP
3388 }
3389
034c6ed7
LP
3390 break;
3391
3392 case SERVICE_FINAL_SIGKILL:
f2341e0a 3393 log_unit_warning(UNIT(s), "Processes still around after final SIGKILL. Entering failed mode.");
f42806df 3394 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
034c6ed7
LP
3395 break;
3396
3397 case SERVICE_AUTO_RESTART:
f2341e0a 3398 log_unit_info(UNIT(s),
ef417cfd 3399 s->restart_usec > 0 ?
f2341e0a
LP
3400 "Service hold-off time over, scheduling restart." :
3401 "Service has no hold-off time, scheduling restart.");
034c6ed7
LP
3402 service_enter_restart(s);
3403 break;
3404
3405 default:
3406 assert_not_reached("Timeout at wrong time.");
3407 }
718db961
LP
3408
3409 return 0;
3410}
3411
3412static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
3413 Service *s = SERVICE(userdata);
a7850c7d 3414 char t[FORMAT_TIMESPAN_MAX];
2787d83c 3415 usec_t watchdog_usec;
718db961
LP
3416
3417 assert(s);
3418 assert(source == s->watchdog_event_source);
3419
2787d83c
M
3420 watchdog_usec = service_get_watchdog_usec(s);
3421
2a12e32e
JK
3422 if (UNIT(s)->manager->service_watchdogs) {
3423 log_unit_error(UNIT(s), "Watchdog timeout (limit %s)!",
3424 format_timespan(t, sizeof(t), watchdog_usec, 1));
8bb2d17d 3425
2a12e32e
JK
3426 service_enter_signal(s, SERVICE_STOP_SIGABRT, SERVICE_FAILURE_WATCHDOG);
3427 } else
3428 log_unit_warning(UNIT(s), "Watchdog disabled! Ignoring watchdog timeout (limit %s)!",
3429 format_timespan(t, sizeof(t), watchdog_usec, 1));
842129f5 3430
718db961 3431 return 0;
5cb5a6ff
LP
3432}
3433
e3285237
LP
3434static bool service_notify_message_authorized(Service *s, pid_t pid, char **tags, FDSet *fds) {
3435 assert(s);
8c47c732 3436
c952c6ec 3437 if (s->notify_access == NOTIFY_NONE) {
e3285237
LP
3438 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception is disabled.", pid);
3439 return false;
3440 }
3441
3442 if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
336c6e46 3443 if (s->main_pid != 0)
e3285237 3444 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for main PID "PID_FMT, pid, s->main_pid);
336c6e46 3445 else
e3285237
LP
3446 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for main PID which is currently not known", pid);
3447
3448 return false;
3449 }
3450
3451 if (s->notify_access == NOTIFY_EXEC && pid != s->main_pid && pid != s->control_pid) {
6375bd20 3452 if (s->main_pid != 0 && s->control_pid != 0)
e3285237 3453 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for main PID "PID_FMT" and control PID "PID_FMT,
6375bd20
JW
3454 pid, s->main_pid, s->control_pid);
3455 else if (s->main_pid != 0)
e3285237 3456 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for main PID "PID_FMT, pid, s->main_pid);
6375bd20 3457 else if (s->control_pid != 0)
e3285237 3458 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for control PID "PID_FMT, pid, s->control_pid);
6375bd20 3459 else
e3285237
LP
3460 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for main PID and control PID which are currently not known", pid);
3461
3462 return false;
9711848f
LP
3463 }
3464
e3285237
LP
3465 return true;
3466}
3467
db256aab
LP
3468static void service_notify_message(
3469 Unit *u,
3470 const struct ucred *ucred,
3471 char **tags,
3472 FDSet *fds) {
3473
e3285237
LP
3474 Service *s = SERVICE(u);
3475 bool notify_dbus = false;
3476 const char *e;
cc2b7b11 3477 char **i;
db256aab 3478 int r;
e3285237
LP
3479
3480 assert(u);
db256aab 3481 assert(ucred);
e3285237 3482
db256aab 3483 if (!service_notify_message_authorized(SERVICE(u), ucred->pid, tags, fds))
e3285237
LP
3484 return;
3485
f1d34068 3486 if (DEBUG_LOGGING) {
9711848f
LP
3487 _cleanup_free_ char *cc = NULL;
3488
3489 cc = strv_join(tags, ", ");
db256aab 3490 log_unit_debug(u, "Got notification message from PID "PID_FMT" (%s)", ucred->pid, isempty(cc) ? "n/a" : cc);
9711848f 3491 }
c952c6ec 3492
8c47c732 3493 /* Interpret MAINPID= */
28849dba 3494 e = strv_find_startswith(tags, "MAINPID=");
5e56b378 3495 if (e && IN_SET(s->state, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD)) {
db256aab
LP
3496 pid_t new_main_pid;
3497
3498 if (parse_pid(e, &new_main_pid) < 0)
3499 log_unit_warning(u, "Failed to parse MAINPID= field in notification message, ignoring: %s", e);
3500 else if (!s->main_pid_known || new_main_pid != s->main_pid) {
3501
3502 r = service_is_suitable_main_pid(s, new_main_pid, LOG_WARNING);
3503 if (r == 0) {
3504 /* The new main PID is a bit suspicous, which is OK if the sender is privileged. */
3505
3506 if (ucred->uid == 0) {
3507 log_unit_debug(u, "New main PID "PID_FMT" does not belong to service, but we'll accept it as the request to change it came from a privileged process.", new_main_pid);
3508 r = 1;
3509 } else
3510 log_unit_debug(u, "New main PID "PID_FMT" does not belong to service, refusing.", new_main_pid);
3511 }
3512 if (r > 0) {
3513 service_set_main_pid(s, new_main_pid);
3514 unit_watch_pid(UNIT(s), new_main_pid);
3515 notify_dbus = true;
3516 }
8c47c732
LP
3517 }
3518 }
3519
cc2b7b11
LP
3520 /* Interpret READY=/STOPPING=/RELOADING=. Last one wins. */
3521 STRV_FOREACH_BACKWARDS(i, tags) {
308d72dc 3522
cc2b7b11
LP
3523 if (streq(*i, "READY=1")) {
3524 s->notify_state = NOTIFY_READY;
308d72dc 3525
cc2b7b11
LP
3526 /* Type=notify services inform us about completed
3527 * initialization with READY=1 */
3528 if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START)
3529 service_enter_start_post(s);
308d72dc 3530
cc2b7b11
LP
3531 /* Sending READY=1 while we are reloading informs us
3532 * that the reloading is complete */
3533 if (s->state == SERVICE_RELOAD && s->control_pid == 0)
3534 service_enter_running(s, SERVICE_SUCCESS);
308d72dc 3535
cc2b7b11
LP
3536 notify_dbus = true;
3537 break;
308d72dc 3538
cc2b7b11
LP
3539 } else if (streq(*i, "RELOADING=1")) {
3540 s->notify_state = NOTIFY_RELOADING;
308d72dc 3541
cc2b7b11
LP
3542 if (s->state == SERVICE_RUNNING)
3543 service_enter_reload_by_notify(s);
308d72dc 3544
cc2b7b11
LP
3545 notify_dbus = true;
3546 break;
308d72dc 3547
cc2b7b11
LP
3548 } else if (streq(*i, "STOPPING=1")) {
3549 s->notify_state = NOTIFY_STOPPING;
308d72dc 3550
cc2b7b11
LP
3551 if (s->state == SERVICE_RUNNING)
3552 service_enter_stop_by_notify(s);
308d72dc 3553
cc2b7b11
LP
3554 notify_dbus = true;
3555 break;
3556 }
8c47c732
LP
3557 }
3558
3559 /* Interpret STATUS= */
28849dba 3560 e = strv_find_startswith(tags, "STATUS=");
7f110ff9 3561 if (e) {
28849dba 3562 _cleanup_free_ char *t = NULL;
8c47c732 3563
28849dba
LP
3564 if (!isempty(e)) {
3565 if (!utf8_is_valid(e))
f2341e0a 3566 log_unit_warning(u, "Status message in notification message is not UTF-8 clean.");
28849dba 3567 else {
28849dba
LP
3568 t = strdup(e);
3569 if (!t)
3570 log_oom();
3a2776bc 3571 }
28849dba 3572 }
8c47c732 3573
30b5275a 3574 if (!streq_ptr(s->status_text, t)) {
3b319885 3575 free_and_replace(s->status_text, t);
30b5275a 3576 notify_dbus = true;
28849dba 3577 }
8c47c732 3578 }
842129f5 3579
4774e357 3580 /* Interpret ERRNO= */
28849dba 3581 e = strv_find_startswith(tags, "ERRNO=");
4774e357
MAA
3582 if (e) {
3583 int status_errno;
3584
2fa40742
LP
3585 status_errno = parse_errno(e);
3586 if (status_errno < 0)
3587 log_unit_warning_errno(u, status_errno,
3588 "Failed to parse ERRNO= field in notification message: %s", e);
3589 else if (s->status_errno != status_errno) {
3590 s->status_errno = status_errno;
3591 notify_dbus = true;
4774e357
MAA
3592 }
3593 }
3594
a327431b
DB
3595 /* Interpret EXTEND_TIMEOUT= */
3596 e = strv_find_startswith(tags, "EXTEND_TIMEOUT_USEC=");
3597 if (e) {
3598 usec_t extend_timeout_usec;
3599 if (safe_atou64(e, &extend_timeout_usec) < 0)
3600 log_unit_warning(u, "Failed to parse EXTEND_TIMEOUT_USEC=%s", e);
3601 else
3602 service_extend_timeout(s, extend_timeout_usec);
3603 }
3604
6f285378 3605 /* Interpret WATCHDOG= */
1f6b4113 3606 if (strv_find(tags, "WATCHDOG=1"))
842129f5 3607 service_reset_watchdog(s);
c4e2ceae 3608
c45d11cb
LP
3609 e = strv_find_startswith(tags, "WATCHDOG_USEC=");
3610 if (e) {
3611 usec_t watchdog_override_usec;
3612 if (safe_atou64(e, &watchdog_override_usec) < 0)
3613 log_unit_warning(u, "Failed to parse WATCHDOG_USEC=%s", e);
3614 else
3615 service_reset_watchdog_timeout(s, watchdog_override_usec);
3616 }
3617
e78ee06d
LP
3618 /* Process FD store messages. Either FDSTOREREMOVE=1 for removal, or FDSTORE=1 for addition. In both cases,
3619 * process FDNAME= for picking the file descriptor name to use. Note that FDNAME= is required when removing
3620 * fds, but optional when pushing in new fds, for compatibility reasons. */
3621 if (strv_find(tags, "FDSTOREREMOVE=1")) {
3622 const char *name;
3623
3624 name = strv_find_startswith(tags, "FDNAME=");
3625 if (!name || !fdname_is_valid(name))
3626 log_unit_warning(u, "FDSTOREREMOVE=1 requested, but no valid file descriptor name passed, ignoring.");
3627 else
3628 service_remove_fd_store(s, name);
3629
3630 } else if (strv_find(tags, "FDSTORE=1")) {
8dd4c05b
LP
3631 const char *name;
3632
3633 name = strv_find_startswith(tags, "FDNAME=");
3634 if (name && !fdname_is_valid(name)) {
3635 log_unit_warning(u, "Passed FDNAME= name is invalid, ignoring.");
3636 name = NULL;
3637 }
3638
e78ee06d 3639 (void) service_add_fd_store_set(s, fds, name);
8dd4c05b 3640 }
a354329f 3641
c4e2ceae 3642 /* Notify clients about changed status or main pid */
30b5275a
LP
3643 if (notify_dbus)
3644 unit_add_to_dbus_queue(u);
8c47c732
LP
3645}
3646
7a7821c8 3647static int service_get_timeout(Unit *u, usec_t *timeout) {
68db7a3b 3648 Service *s = SERVICE(u);
7a7821c8 3649 uint64_t t;
68db7a3b
ZJS
3650 int r;
3651
3652 if (!s->timer_event_source)
3653 return 0;
3654
7a7821c8 3655 r = sd_event_source_get_time(s->timer_event_source, &t);
68db7a3b
ZJS
3656 if (r < 0)
3657 return r;
7a7821c8
LP
3658 if (t == USEC_INFINITY)
3659 return 0;
68db7a3b 3660
7a7821c8 3661 *timeout = t;
68db7a3b
ZJS
3662 return 1;
3663}
3664
05e343b7
LP
3665static void service_bus_name_owner_change(
3666 Unit *u,
3667 const char *name,
3668 const char *old_owner,
3669 const char *new_owner) {
3670
3671 Service *s = SERVICE(u);
718db961 3672 int r;
05e343b7
LP
3673
3674 assert(s);
3675 assert(name);
3676
3677 assert(streq(s->bus_name, name));
3678 assert(old_owner || new_owner);
3679
3680 if (old_owner && new_owner)
f2341e0a 3681 log_unit_debug(u, "D-Bus name %s changed owner from %s to %s", name, old_owner, new_owner);
05e343b7 3682 else if (old_owner)
f2341e0a 3683 log_unit_debug(u, "D-Bus name %s no longer registered by %s", name, old_owner);
05e343b7 3684 else
f2341e0a 3685 log_unit_debug(u, "D-Bus name %s now registered by %s", name, new_owner);
05e343b7
LP
3686
3687 s->bus_name_good = !!new_owner;
3688
d8ccf5fd
DM
3689 /* Track the current owner, so we can reconstruct changes after a daemon reload */
3690 r = free_and_strdup(&s->bus_name_owner, new_owner);
3691 if (r < 0) {
3692 log_unit_error_errno(u, r, "Unable to set new bus name owner %s: %m", new_owner);
3693 return;
3694 }
3695
05e343b7
LP
3696 if (s->type == SERVICE_DBUS) {
3697
3698 /* service_enter_running() will figure out what to
3699 * do */
3700 if (s->state == SERVICE_RUNNING)
f42806df 3701 service_enter_running(s, SERVICE_SUCCESS);
05e343b7
LP
3702 else if (s->state == SERVICE_START && new_owner)
3703 service_enter_start_post(s);
3704
3705 } else if (new_owner &&
3706 s->main_pid <= 0 &&
a6951a50
LP
3707 IN_SET(s->state,
3708 SERVICE_START,
3709 SERVICE_START_POST,
3710 SERVICE_RUNNING,
3711 SERVICE_RELOAD)) {
05e343b7 3712
4afd3348 3713 _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
718db961 3714 pid_t pid;
05e343b7 3715
718db961 3716 /* Try to acquire PID from bus service */
05e343b7 3717
056f95d0 3718 r = sd_bus_get_name_creds(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
5b12334d
LP
3719 if (r >= 0)
3720 r = sd_bus_creds_get_pid(creds, &pid);
718db961 3721 if (r >= 0) {
7c102d60 3722 log_unit_debug(u, "D-Bus name %s is now owned by process " PID_FMT, name, pid);
05e343b7 3723
718db961
LP
3724 service_set_main_pid(s, pid);
3725 unit_watch_pid(UNIT(s), pid);
3726 }
7400b9d2 3727 }
05e343b7
LP
3728}
3729
16115b0a 3730int service_set_socket_fd(Service *s, int fd, Socket *sock, bool selinux_context_net) {
79a98c60
LP
3731 _cleanup_free_ char *peer = NULL;
3732 int r;
57020a3a 3733
4f2d528d
LP
3734 assert(s);
3735 assert(fd >= 0);
3736
7f2fbbff
LP
3737 /* This is called by the socket code when instantiating a new service for a stream socket and the socket needs
3738 * to be configured. We take ownership of the passed fd on success. */
4f2d528d 3739
1124fe6f 3740 if (UNIT(s)->load_state != UNIT_LOADED)
4f2d528d
LP
3741 return -EINVAL;
3742
3743 if (s->socket_fd >= 0)
3744 return -EBUSY;
3745
3746 if (s->state != SERVICE_DEAD)
3747 return -EAGAIN;
3748
366b7db4 3749 if (getpeername_pretty(fd, true, &peer) >= 0) {
79a98c60
LP
3750
3751 if (UNIT(s)->description) {
3752 _cleanup_free_ char *a;
3753
605405c6 3754 a = strjoin(UNIT(s)->description, " (", peer, ")");
79a98c60
LP
3755 if (!a)
3756 return -ENOMEM;
3757
3758 r = unit_set_description(UNIT(s), a);
3759 } else
3760 r = unit_set_description(UNIT(s), peer);
3761
3762 if (r < 0)
3763 return r;
3764 }
3765
eef85c4a 3766 r = unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false, UNIT_DEPENDENCY_IMPLICIT);
7f2fbbff
LP
3767 if (r < 0)
3768 return r;
3769
4f2d528d 3770 s->socket_fd = fd;
16115b0a 3771 s->socket_fd_selinux_context_net = selinux_context_net;
6cf6bbc2 3772
57020a3a 3773 unit_ref_set(&s->accept_socket, UNIT(sock));
7f2fbbff 3774 return 0;
4f2d528d
LP
3775}
3776
fdf20a31 3777static void service_reset_failed(Unit *u) {
5632e374
LP
3778 Service *s = SERVICE(u);
3779
3780 assert(s);
3781
fdf20a31 3782 if (s->state == SERVICE_FAILED)
5632e374
LP
3783 service_set_state(s, SERVICE_DEAD);
3784
f42806df
LP
3785 s->result = SERVICE_SUCCESS;
3786 s->reload_result = SERVICE_SUCCESS;
7a0019d3
LP
3787 s->n_restarts = 0;
3788 s->flush_n_restarts = false;
5632e374
LP
3789}
3790
718db961 3791static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
8a0867d6 3792 Service *s = SERVICE(u);
41efeaec 3793
a6951a50
LP
3794 assert(s);
3795
814cc562 3796 return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
8a0867d6
LP
3797}
3798
291d565a
LP
3799static int service_main_pid(Unit *u) {
3800 Service *s = SERVICE(u);
3801
3802 assert(s);
3803
3804 return s->main_pid;
3805}
3806
3807static int service_control_pid(Unit *u) {
3808 Service *s = SERVICE(u);
3809
3810 assert(s);
3811
3812 return s->control_pid;
3813}
3814
bb2c7685
LP
3815static bool service_needs_console(Unit *u) {
3816 Service *s = SERVICE(u);
3817
3818 assert(s);
3819
3820 /* We provide our own implementation of this here, instead of relying of the generic implementation
3821 * unit_needs_console() provides, since we want to return false if we are in SERVICE_EXITED state. */
3822
3823 if (!exec_context_may_touch_console(&s->exec_context))
3824 return false;
3825
3826 return IN_SET(s->state,
3827 SERVICE_START_PRE,
3828 SERVICE_START,
3829 SERVICE_START_POST,
3830 SERVICE_RUNNING,
3831 SERVICE_RELOAD,
3832 SERVICE_STOP,
3833 SERVICE_STOP_SIGABRT,
3834 SERVICE_STOP_SIGTERM,
3835 SERVICE_STOP_SIGKILL,
3836 SERVICE_STOP_POST,
3837 SERVICE_FINAL_SIGTERM,
3838 SERVICE_FINAL_SIGKILL);
3839}
3840
94f04347 3841static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
525ee6f4
LP
3842 [SERVICE_RESTART_NO] = "no",
3843 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
50caaedb 3844 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
6cfe2fde 3845 [SERVICE_RESTART_ON_ABNORMAL] = "on-abnormal",
dc99a976 3846 [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
50caaedb 3847 [SERVICE_RESTART_ON_ABORT] = "on-abort",
6cfe2fde 3848 [SERVICE_RESTART_ALWAYS] = "always",
94f04347
LP
3849};
3850
3851DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3852
3853static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
94f04347 3854 [SERVICE_SIMPLE] = "simple",
0d624a78 3855 [SERVICE_FORKING] = "forking",
34e9ba66 3856 [SERVICE_ONESHOT] = "oneshot",
8c47c732 3857 [SERVICE_DBUS] = "dbus",
f2b68789
LP
3858 [SERVICE_NOTIFY] = "notify",
3859 [SERVICE_IDLE] = "idle"
94f04347
LP
3860};
3861
3862DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3863
e537352b 3864static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
94f04347
LP
3865 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
3866 [SERVICE_EXEC_START] = "ExecStart",
3867 [SERVICE_EXEC_START_POST] = "ExecStartPost",
3868 [SERVICE_EXEC_RELOAD] = "ExecReload",
3869 [SERVICE_EXEC_STOP] = "ExecStop",
3870 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3871};
3872
3873DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3874
308d72dc
LP
3875static const char* const notify_state_table[_NOTIFY_STATE_MAX] = {
3876 [NOTIFY_UNKNOWN] = "unknown",
3877 [NOTIFY_READY] = "ready",
3878 [NOTIFY_RELOADING] = "reloading",
3879 [NOTIFY_STOPPING] = "stopping",
3880};
3881
3882DEFINE_STRING_TABLE_LOOKUP(notify_state, NotifyState);
3883
f42806df
LP
3884static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3885 [SERVICE_SUCCESS] = "success",
3886 [SERVICE_FAILURE_RESOURCES] = "resources",
c35755fb 3887 [SERVICE_FAILURE_PROTOCOL] = "protocol",
f42806df
LP
3888 [SERVICE_FAILURE_TIMEOUT] = "timeout",
3889 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3890 [SERVICE_FAILURE_SIGNAL] = "signal",
bb242b7b 3891 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
8d1b002a 3892 [SERVICE_FAILURE_WATCHDOG] = "watchdog",
07299350 3893 [SERVICE_FAILURE_START_LIMIT_HIT] = "start-limit-hit",
f42806df
LP
3894};
3895
3896DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3897
87f0e418 3898const UnitVTable service_vtable = {
7d17cfbc 3899 .object_size = sizeof(Service),
718db961
LP
3900 .exec_context_offset = offsetof(Service, exec_context),
3901 .cgroup_context_offset = offsetof(Service, cgroup_context),
3902 .kill_context_offset = offsetof(Service, kill_context),
613b411c 3903 .exec_runtime_offset = offsetof(Service, exec_runtime),
29206d46 3904 .dynamic_creds_offset = offsetof(Service, dynamic_creds),
3ef63c31 3905
f975e971
LP
3906 .sections =
3907 "Unit\0"
3908 "Service\0"
3909 "Install\0",
4ad49000 3910 .private_section = "Service",
71645aca 3911
034c6ed7
LP
3912 .init = service_init,
3913 .done = service_done,
a16e1123 3914 .load = service_load,
a354329f 3915 .release_resources = service_release_resources,
a16e1123
LP
3916
3917 .coldplug = service_coldplug,
034c6ed7 3918
5cb5a6ff
LP
3919 .dump = service_dump,
3920
3921 .start = service_start,
3922 .stop = service_stop,
3923 .reload = service_reload,
3924
034c6ed7
LP
3925 .can_reload = service_can_reload,
3926
8a0867d6
LP
3927 .kill = service_kill,
3928
a16e1123
LP
3929 .serialize = service_serialize,
3930 .deserialize_item = service_deserialize_item,
3931
5cb5a6ff 3932 .active_state = service_active_state,
10a94420 3933 .sub_state_to_string = service_sub_state_to_string,
5cb5a6ff 3934
deb4e708
MK
3935 .will_restart = service_will_restart,
3936
f2f725e5 3937 .may_gc = service_may_gc,
701cc384 3938
034c6ed7 3939 .sigchld_event = service_sigchld_event,
2c4104f0 3940
fdf20a31 3941 .reset_failed = service_reset_failed,
5632e374 3942
4ad49000 3943 .notify_cgroup_empty = service_notify_cgroup_empty_event,
8c47c732 3944 .notify_message = service_notify_message,
8e274523 3945
291d565a
LP
3946 .main_pid = service_main_pid,
3947 .control_pid = service_control_pid,
3948
05e343b7 3949 .bus_name_owner_change = service_bus_name_owner_change,
05e343b7 3950
718db961 3951 .bus_vtable = bus_service_vtable,
74c964d3
LP
3952 .bus_set_property = bus_service_set_property,
3953 .bus_commit_properties = bus_service_commit_properties,
4139c1b2 3954
68db7a3b 3955 .get_timeout = service_get_timeout,
bb2c7685 3956 .needs_console = service_needs_console,
718db961
LP
3957 .can_transient = true,
3958
c6918296
MS
3959 .status_message_formats = {
3960 .starting_stopping = {
3961 [0] = "Starting %s...",
3962 [1] = "Stopping %s...",
3963 },
3964 .finished_start_job = {
3965 [JOB_DONE] = "Started %s.",
3966 [JOB_FAILED] = "Failed to start %s.",
c6918296
MS
3967 },
3968 .finished_stop_job = {
3969 [JOB_DONE] = "Stopped %s.",
3970 [JOB_FAILED] = "Stopped (with error) %s.",
c6918296
MS
3971 },
3972 },
5cb5a6ff 3973};