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