]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/service.c
cgroup: remove logic for maintaining /control subcgroup for the service unit type
[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
5bf7569c
LP
1346 /* System services should get a new keyring by default. */
1347 SET_FLAG(exec_params.flags, EXEC_NEW_KEYRING, MANAGER_IS_SYSTEM(UNIT(s)->manager));
ac647978
LP
1348
1349 /* System D-Bus needs nss-systemd disabled, so that we don't deadlock */
1350 SET_FLAG(exec_params.flags, EXEC_NSS_BYPASS_BUS,
1351 MANAGER_IS_SYSTEM(UNIT(s)->manager) && unit_has_name(UNIT(s), SPECIAL_DBUS_SERVICE));
4ad49000 1352
5125e762 1353 exec_params.argv = c->argv;
c39f1ce2 1354 exec_params.environment = final_env;
9fa95f85 1355 exec_params.fds = fds;
8dd4c05b 1356 exec_params.fd_names = fd_names;
4c47affc 1357 exec_params.n_storage_fds = n_storage_fds;
9b141911 1358 exec_params.n_socket_fds = n_socket_fds;
9fa95f85 1359 exec_params.watchdog_usec = s->watchdog_usec;
a34ceba6 1360 exec_params.selinux_context_net = s->socket_fd_selinux_context_net;
9fa95f85
DM
1361 if (s->type == SERVICE_IDLE)
1362 exec_params.idle_pipe = UNIT(s)->manager->idle_pipe;
a34ceba6
LP
1363 exec_params.stdin_fd = s->stdin_fd;
1364 exec_params.stdout_fd = s->stdout_fd;
1365 exec_params.stderr_fd = s->stderr_fd;
9fa95f85 1366
f2341e0a
LP
1367 r = exec_spawn(UNIT(s),
1368 c,
9e2f7c11 1369 &s->exec_context,
9fa95f85 1370 &exec_params,
613b411c 1371 s->exec_runtime,
29206d46 1372 &s->dynamic_creds,
9e2f7c11 1373 &pid);
9e2f7c11 1374 if (r < 0)
36c16a7c 1375 return r;
034c6ed7 1376
117dcc57 1377 r = unit_watch_pid(UNIT(s), pid);
e8b509d3 1378 if (r < 0) /* FIXME: we need to do something here */
36c16a7c 1379 return r;
034c6ed7
LP
1380
1381 *_pid = pid;
1382
5cb5a6ff 1383 return 0;
034c6ed7
LP
1384}
1385
80876c20
LP
1386static int main_pid_good(Service *s) {
1387 assert(s);
1388
51894d70 1389 /* Returns 0 if the pid is dead, > 0 if it is good, < 0 if we don't know */
80876c20 1390
fc08079e 1391 /* If we know the pid file, then let's just check if it is
80876c20 1392 * still valid */
6dfa5494
LP
1393 if (s->main_pid_known) {
1394
1395 /* If it's an alien child let's check if it is still
1396 * alive ... */
62220cf7 1397 if (s->main_pid_alien && s->main_pid > 0)
9f5650ae 1398 return pid_is_alive(s->main_pid);
6dfa5494
LP
1399
1400 /* .. otherwise assume we'll get a SIGCHLD for it,
1401 * which we really should wait for to collect exit
1402 * status and code */
80876c20 1403 return s->main_pid > 0;
6dfa5494 1404 }
80876c20
LP
1405
1406 /* We don't know the pid */
1407 return -EAGAIN;
1408}
1409
019be286 1410static int control_pid_good(Service *s) {
80876c20
LP
1411 assert(s);
1412
07697d7e
LP
1413 /* Returns 0 if the control PID is dead, > 0 if it is good. We never actually return < 0 here, but in order to
1414 * make this function as similar as possible to main_pid_good() and cgroup_good(), we pretend that < 0 also
1415 * means: we can't figure it out. */
1416
80876c20
LP
1417 return s->control_pid > 0;
1418}
1419
1420static int cgroup_good(Service *s) {
1421 int r;
1422
1423 assert(s);
1424
07697d7e
LP
1425 /* Returns 0 if the cgroup is empty or doesn't exist, > 0 if it is exists and is populated, < 0 if we can't
1426 * figure it out */
1427
4ad49000
LP
1428 if (!UNIT(s)->cgroup_path)
1429 return 0;
1430
6f883237 1431 r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path);
117dcc57 1432 if (r < 0)
80876c20
LP
1433 return r;
1434
b13ddbbc 1435 return r == 0;
80876c20
LP
1436}
1437
a509f0e6
LP
1438static bool service_shall_restart(Service *s) {
1439 assert(s);
1440
1441 /* Don't restart after manual stops */
1442 if (s->forbid_restart)
1443 return false;
1444
1445 /* Never restart if this is configured as special exception */
1446 if (exit_status_set_test(&s->restart_prevent_status, s->main_exec_status.code, s->main_exec_status.status))
1447 return false;
1448
1449 /* Restart if the exit code/status are configured as restart triggers */
1450 if (exit_status_set_test(&s->restart_force_status, s->main_exec_status.code, s->main_exec_status.status))
1451 return true;
1452
1453 switch (s->restart) {
1454
1455 case SERVICE_RESTART_NO:
1456 return false;
1457
1458 case SERVICE_RESTART_ALWAYS:
1459 return true;
1460
1461 case SERVICE_RESTART_ON_SUCCESS:
1462 return s->result == SERVICE_SUCCESS;
1463
1464 case SERVICE_RESTART_ON_FAILURE:
1465 return s->result != SERVICE_SUCCESS;
1466
1467 case SERVICE_RESTART_ON_ABNORMAL:
1468 return !IN_SET(s->result, SERVICE_SUCCESS, SERVICE_FAILURE_EXIT_CODE);
1469
1470 case SERVICE_RESTART_ON_WATCHDOG:
1471 return s->result == SERVICE_FAILURE_WATCHDOG;
1472
1473 case SERVICE_RESTART_ON_ABORT:
1474 return IN_SET(s->result, SERVICE_FAILURE_SIGNAL, SERVICE_FAILURE_CORE_DUMP);
1475
1476 default:
1477 assert_not_reached("unknown restart setting");
1478 }
1479}
1480
53f47dfc
YW
1481static bool service_will_restart(Service *s) {
1482 assert(s);
1483
1484 if (s->state == SERVICE_AUTO_RESTART)
1485 return true;
1486 if (!UNIT(s)->job)
1487 return false;
1488 if (UNIT(s)->job->type == JOB_START)
1489 return true;
1490 return false;
1491}
1492
f42806df 1493static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
034c6ed7 1494 int r;
0f52f8e5 1495
034c6ed7
LP
1496 assert(s);
1497
0f52f8e5
LP
1498 /* If there's a stop job queued before we enter the DEAD state, we shouldn't act on Restart=, in order to not
1499 * undo what has already been enqueued. */
1500 if (unit_stop_pending(UNIT(s)))
1501 allow_restart = false;
1502
a0fef983 1503 if (s->result == SERVICE_SUCCESS)
f42806df 1504 s->result = f;
034c6ed7 1505
ed77d407
LP
1506 if (s->result != SERVICE_SUCCESS)
1507 log_unit_warning(UNIT(s), "Failed with result '%s'.", service_result_to_string(s->result));
1508
7eb2a8a1
LP
1509 /* Make sure service_release_resources() doesn't destroy our FD store, while we are changing through
1510 * SERVICE_FAILED/SERVICE_DEAD before entering into SERVICE_AUTO_RESTART. */
1511 s->n_keep_fd_store ++;
1512
0c7f15b3
MS
1513 service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1514
a509f0e6 1515 if (allow_restart && service_shall_restart(s)) {
034c6ed7 1516
36c16a7c 1517 r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->restart_usec));
7eb2a8a1
LP
1518 if (r < 0) {
1519 s->n_keep_fd_store--;
034c6ed7 1520 goto fail;
7eb2a8a1 1521 }
034c6ed7
LP
1522
1523 service_set_state(s, SERVICE_AUTO_RESTART);
7a0019d3
LP
1524 } else
1525 /* If we shan't restart, then flush out the restart counter. But don't do that immediately, so that the
1526 * user can still introspect the counter. Do so on the next start. */
1527 s->flush_n_restarts = true;
034c6ed7 1528
7eb2a8a1
LP
1529 /* The new state is in effect, let's decrease the fd store ref counter again. Let's also readd us to the GC
1530 * queue, so that the fd store is possibly gc'ed again */
1531 s->n_keep_fd_store--;
1532 unit_add_to_gc_queue(UNIT(s));
1533
f2341e0a 1534 /* The next restart might not be a manual stop, hence reset the flag indicating manual stops */
47342320
LP
1535 s->forbid_restart = false;
1536
e66cf1a3 1537 /* We want fresh tmpdirs in case service is started again immediately */
613b411c
LP
1538 exec_runtime_destroy(s->exec_runtime);
1539 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
c17ec25e 1540
53f47dfc
YW
1541 if (s->exec_context.runtime_directory_preserve_mode == EXEC_PRESERVE_NO ||
1542 (s->exec_context.runtime_directory_preserve_mode == EXEC_PRESERVE_RESTART && !service_will_restart(s)))
1543 /* Also, remove the runtime directory */
3536f49e 1544 exec_context_destroy_runtime_directory(&s->exec_context, UNIT(s)->manager->prefix[EXEC_DIRECTORY_RUNTIME]);
e66cf1a3 1545
00d9ef85
LP
1546 /* Get rid of the IPC bits of the user */
1547 unit_unref_uid_gid(UNIT(s), true);
1548
29206d46
LP
1549 /* Release the user, and destroy it if we are the only remaining owner */
1550 dynamic_creds_destroy(&s->dynamic_creds);
1551
9285c9ff
LN
1552 /* Try to delete the pid file. At this point it will be
1553 * out-of-date, and some software might be confused by it, so
1554 * let's remove it. */
1555 if (s->pid_file)
fabab190 1556 (void) unlink(s->pid_file);
9285c9ff 1557
034c6ed7
LP
1558 return;
1559
1560fail:
f2341e0a 1561 log_unit_warning_errno(UNIT(s), r, "Failed to run install restart timer: %m");
f42806df 1562 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1563}
1564
f42806df 1565static void service_enter_stop_post(Service *s, ServiceResult f) {
034c6ed7
LP
1566 int r;
1567 assert(s);
1568
a0fef983 1569 if (s->result == SERVICE_SUCCESS)
f42806df 1570 s->result = f;
034c6ed7 1571
5e94833f 1572 service_unwatch_control_pid(s);
a911bb9a 1573 unit_watch_all_pids(UNIT(s));
5e94833f 1574
117dcc57
ZJS
1575 s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1576 if (s->control_command) {
867b3b7d
LP
1577 s->control_command_id = SERVICE_EXEC_STOP_POST;
1578
ecedd90f
LP
1579 r = service_spawn(s,
1580 s->control_command,
21b2ce39 1581 s->timeout_stop_usec,
1703fa41 1582 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_IS_CONTROL|EXEC_SETENV_RESULT,
ecedd90f
LP
1583 &s->control_pid);
1584 if (r < 0)
034c6ed7
LP
1585 goto fail;
1586
80876c20
LP
1587 service_set_state(s, SERVICE_STOP_POST);
1588 } else
ac84d1fb 1589 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1590
1591 return;
1592
1593fail:
f2341e0a 1594 log_unit_warning_errno(UNIT(s), r, "Failed to run 'stop-post' task: %m");
f42806df 1595 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1596}
1597
4940c0b0
LP
1598static int state_to_kill_operation(ServiceState state) {
1599 switch (state) {
1600
1601 case SERVICE_STOP_SIGABRT:
1602 return KILL_ABORT;
1603
1604 case SERVICE_STOP_SIGTERM:
1605 case SERVICE_FINAL_SIGTERM:
1606 return KILL_TERMINATE;
1607
1608 case SERVICE_STOP_SIGKILL:
1609 case SERVICE_FINAL_SIGKILL:
1610 return KILL_KILL;
1611
1612 default:
1613 return _KILL_OPERATION_INVALID;
1614 }
1615}
1616
f42806df 1617static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
034c6ed7 1618 int r;
034c6ed7
LP
1619
1620 assert(s);
1621
a0fef983 1622 if (s->result == SERVICE_SUCCESS)
f42806df 1623 s->result = f;
034c6ed7 1624
a911bb9a
LP
1625 unit_watch_all_pids(UNIT(s));
1626
cd2086fe
LP
1627 r = unit_kill_context(
1628 UNIT(s),
1629 &s->kill_context,
4940c0b0 1630 state_to_kill_operation(state),
cd2086fe
LP
1631 s->main_pid,
1632 s->control_pid,
1633 s->main_pid_alien);
1634 if (r < 0)
1635 goto fail;
034c6ed7 1636
cd2086fe 1637 if (r > 0) {
36c16a7c
LP
1638 r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_stop_usec));
1639 if (r < 0)
1640 goto fail;
d6ea93e3 1641
80876c20 1642 service_set_state(s, state);
1db0db4b 1643 } else if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM) && s->kill_context.send_sigkill)
ac84d1fb 1644 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1db0db4b 1645 else if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL))
f42806df 1646 service_enter_stop_post(s, SERVICE_SUCCESS);
1db0db4b 1647 else if (state == SERVICE_FINAL_SIGTERM && s->kill_context.send_sigkill)
ac84d1fb 1648 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
80876c20 1649 else
f42806df 1650 service_enter_dead(s, SERVICE_SUCCESS, true);
034c6ed7
LP
1651
1652 return;
1653
1654fail:
f2341e0a 1655 log_unit_warning_errno(UNIT(s), r, "Failed to kill processes: %m");
034c6ed7 1656
a00973af 1657 if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL))
f42806df 1658 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
034c6ed7 1659 else
f42806df 1660 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1661}
1662
308d72dc
LP
1663static void service_enter_stop_by_notify(Service *s) {
1664 assert(s);
1665
1666 unit_watch_all_pids(UNIT(s));
1667
36c16a7c 1668 service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_stop_usec));
308d72dc 1669
6041a7ee
MS
1670 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1671 service_set_state(s, SERVICE_STOP_SIGTERM);
308d72dc
LP
1672}
1673
f42806df 1674static void service_enter_stop(Service *s, ServiceResult f) {
034c6ed7 1675 int r;
5925dd3c 1676
034c6ed7
LP
1677 assert(s);
1678
a0fef983 1679 if (s->result == SERVICE_SUCCESS)
f42806df 1680 s->result = f;
034c6ed7 1681
5e94833f 1682 service_unwatch_control_pid(s);
a911bb9a 1683 unit_watch_all_pids(UNIT(s));
5e94833f 1684
117dcc57
ZJS
1685 s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1686 if (s->control_command) {
867b3b7d
LP
1687 s->control_command_id = SERVICE_EXEC_STOP;
1688
ecedd90f
LP
1689 r = service_spawn(s,
1690 s->control_command,
21b2ce39 1691 s->timeout_stop_usec,
1703fa41 1692 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|EXEC_SETENV_RESULT,
ecedd90f
LP
1693 &s->control_pid);
1694 if (r < 0)
034c6ed7
LP
1695 goto fail;
1696
80876c20
LP
1697 service_set_state(s, SERVICE_STOP);
1698 } else
f42806df 1699 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1700
1701 return;
1702
1703fail:
f2341e0a 1704 log_unit_warning_errno(UNIT(s), r, "Failed to run 'stop' task: %m");
f42806df 1705 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1706}
1707
957c3cf9
LP
1708static bool service_good(Service *s) {
1709 int main_pid_ok;
1710 assert(s);
1711
1712 if (s->type == SERVICE_DBUS && !s->bus_name_good)
1713 return false;
1714
1715 main_pid_ok = main_pid_good(s);
1716 if (main_pid_ok > 0) /* It's alive */
1717 return true;
1718 if (main_pid_ok == 0) /* It's dead */
1719 return false;
1720
1721 /* OK, we don't know anything about the main PID, maybe
1722 * because there is none. Let's check the control group
1723 * instead. */
1724
1725 return cgroup_good(s) != 0;
1726}
1727
f42806df 1728static void service_enter_running(Service *s, ServiceResult f) {
80876c20
LP
1729 assert(s);
1730
a0fef983 1731 if (s->result == SERVICE_SUCCESS)
f42806df 1732 s->result = f;
80876c20 1733
089b64d5
LP
1734 service_unwatch_control_pid(s);
1735
957c3cf9 1736 if (service_good(s)) {
308d72dc
LP
1737
1738 /* If there are any queued up sd_notify()
1739 * notifications, process them now */
1740 if (s->notify_state == NOTIFY_RELOADING)
1741 service_enter_reload_by_notify(s);
1742 else if (s->notify_state == NOTIFY_STOPPING)
1743 service_enter_stop_by_notify(s);
36c16a7c 1744 else {
308d72dc 1745 service_set_state(s, SERVICE_RUNNING);
36c16a7c
LP
1746 service_arm_timer(s, usec_add(UNIT(s)->active_enter_timestamp.monotonic, s->runtime_max_usec));
1747 }
308d72dc 1748
3d474ef7 1749 } else if (f != SERVICE_SUCCESS)
c3fda31d 1750 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
3d474ef7 1751 else if (s->remain_after_exit)
80876c20
LP
1752 service_set_state(s, SERVICE_EXITED);
1753 else
f42806df 1754 service_enter_stop(s, SERVICE_SUCCESS);
80876c20
LP
1755}
1756
034c6ed7
LP
1757static void service_enter_start_post(Service *s) {
1758 int r;
1759 assert(s);
1760
5e94833f 1761 service_unwatch_control_pid(s);
842129f5 1762 service_reset_watchdog(s);
bb242b7b 1763
117dcc57
ZJS
1764 s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
1765 if (s->control_command) {
867b3b7d
LP
1766 s->control_command_id = SERVICE_EXEC_START_POST;
1767
ecedd90f
LP
1768 r = service_spawn(s,
1769 s->control_command,
21b2ce39 1770 s->timeout_start_usec,
1703fa41 1771 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL,
ecedd90f
LP
1772 &s->control_pid);
1773 if (r < 0)
034c6ed7
LP
1774 goto fail;
1775
80876c20
LP
1776 service_set_state(s, SERVICE_START_POST);
1777 } else
f42806df 1778 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1779
1780 return;
1781
1782fail:
f2341e0a 1783 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start-post' task: %m");
f42806df 1784 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1785}
1786
e9a4f676 1787static void service_kill_control_process(Service *s) {
a6951a50 1788 int r;
4ad49000 1789
a6951a50
LP
1790 assert(s);
1791
e9a4f676
LP
1792 if (s->control_pid <= 0)
1793 return;
4ad49000 1794
e9a4f676
LP
1795 r = kill_and_sigcont(s->control_pid, SIGKILL);
1796 if (r < 0) {
1797 _cleanup_free_ char *comm = NULL;
a6951a50 1798
e9a4f676 1799 (void) get_process_comm(s->control_pid, &comm);
a6951a50 1800
e9a4f676
LP
1801 log_unit_debug_errno(UNIT(s), r, "Failed to kill control process " PID_FMT " (%s), ignoring: %m",
1802 s->control_pid, strna(comm));
a6951a50 1803 }
4ad49000
LP
1804}
1805
034c6ed7 1806static void service_enter_start(Service *s) {
4ad49000 1807 ExecCommand *c;
36c16a7c 1808 usec_t timeout;
034c6ed7
LP
1809 pid_t pid;
1810 int r;
1811
1812 assert(s);
1813
41efeaec
LP
1814 service_unwatch_control_pid(s);
1815 service_unwatch_main_pid(s);
80876c20 1816
867b3b7d
LP
1817 if (s->type == SERVICE_FORKING) {
1818 s->control_command_id = SERVICE_EXEC_START;
1819 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
1820
1821 s->main_command = NULL;
1822 } else {
1823 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1824 s->control_command = NULL;
1825
1826 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
1827 }
34e9ba66 1828
96fb8242 1829 if (!c) {
47fffb35
LP
1830 if (s->type != SERVICE_ONESHOT) {
1831 /* There's no command line configured for the main command? Hmm, that is strange. This can only
1832 * happen if the configuration changes at runtime. In this case, let's enter a failure
1833 * state. */
1834 log_unit_error(UNIT(s), "There's no 'start' task anymore we could start: %m");
1835 r = -ENXIO;
1836 goto fail;
1837 }
1838
96fb8242
LP
1839 service_enter_start_post(s);
1840 return;
1841 }
1842
36c16a7c
LP
1843 if (IN_SET(s->type, SERVICE_SIMPLE, SERVICE_IDLE))
1844 /* For simple + idle this is the main process. We don't apply any timeout here, but
1845 * service_enter_running() will later apply the .runtime_max_usec timeout. */
1846 timeout = USEC_INFINITY;
1847 else
1848 timeout = s->timeout_start_usec;
1849
ecedd90f
LP
1850 r = service_spawn(s,
1851 c,
36c16a7c 1852 timeout,
1703fa41 1853 EXEC_PASS_FDS|EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_SET_WATCHDOG,
ecedd90f
LP
1854 &pid);
1855 if (r < 0)
034c6ed7
LP
1856 goto fail;
1857
36c16a7c 1858 if (IN_SET(s->type, SERVICE_SIMPLE, SERVICE_IDLE)) {
034c6ed7
LP
1859 /* For simple services we immediately start
1860 * the START_POST binaries. */
1861
5925dd3c 1862 service_set_main_pid(s, pid);
034c6ed7
LP
1863 service_enter_start_post(s);
1864
1865 } else if (s->type == SERVICE_FORKING) {
1866
1867 /* For forking services we wait until the start
1868 * process exited. */
1869
e55224ca 1870 s->control_pid = pid;
80876c20
LP
1871 service_set_state(s, SERVICE_START);
1872
36c16a7c 1873 } else if (IN_SET(s->type, SERVICE_ONESHOT, SERVICE_DBUS, SERVICE_NOTIFY)) {
7d55e835 1874
34e9ba66 1875 /* For oneshot services we wait until the start
7d55e835
LP
1876 * process exited, too, but it is our main process. */
1877
05e343b7 1878 /* For D-Bus services we know the main pid right away,
8c47c732
LP
1879 * but wait for the bus name to appear on the
1880 * bus. Notify services are similar. */
05e343b7 1881
5925dd3c 1882 service_set_main_pid(s, pid);
80876c20 1883 service_set_state(s, SERVICE_START);
034c6ed7
LP
1884 } else
1885 assert_not_reached("Unknown service type");
1886
1887 return;
1888
1889fail:
f2341e0a 1890 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start' task: %m");
c3fda31d 1891 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1892}
1893
1894static void service_enter_start_pre(Service *s) {
1895 int r;
1896
1897 assert(s);
1898
5e94833f
LP
1899 service_unwatch_control_pid(s);
1900
117dcc57
ZJS
1901 s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
1902 if (s->control_command) {
8f53a7b8 1903
867b3b7d
LP
1904 s->control_command_id = SERVICE_EXEC_START_PRE;
1905
ecedd90f
LP
1906 r = service_spawn(s,
1907 s->control_command,
21b2ce39 1908 s->timeout_start_usec,
1703fa41 1909 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|EXEC_APPLY_TTY_STDIN,
ecedd90f
LP
1910 &s->control_pid);
1911 if (r < 0)
034c6ed7
LP
1912 goto fail;
1913
80876c20
LP
1914 service_set_state(s, SERVICE_START_PRE);
1915 } else
034c6ed7
LP
1916 service_enter_start(s);
1917
1918 return;
1919
1920fail:
f2341e0a 1921 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start-pre' task: %m");
f42806df 1922 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1923}
1924
1925static void service_enter_restart(Service *s) {
4afd3348 1926 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
034c6ed7 1927 int r;
398ef8ba 1928
034c6ed7
LP
1929 assert(s);
1930
a8bb2e65
LP
1931 if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
1932 /* Don't restart things if we are going down anyway */
f2341e0a 1933 log_unit_info(UNIT(s), "Stop job pending for unit, delaying automatic restart.");
2edfa366 1934
36c16a7c 1935 r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->restart_usec));
a8bb2e65 1936 if (r < 0)
2edfa366 1937 goto fail;
feae8adb
DW
1938
1939 return;
2edfa366
LP
1940 }
1941
48bb5876
DW
1942 /* Any units that are bound to this service must also be
1943 * restarted. We use JOB_RESTART (instead of the more obvious
1944 * JOB_START) here so that those dependency jobs will be added
1945 * as well. */
4bd29fe5 1946 r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, &error, NULL);
48bb5876 1947 if (r < 0)
034c6ed7
LP
1948 goto fail;
1949
7a0019d3
LP
1950 /* Count the jobs we enqueue for restarting. This counter is maintained as long as the unit isn't fully
1951 * stopped, i.e. as long as it remains up or remains in auto-start states. The use can reset the counter
1952 * explicitly however via the usual "systemctl reset-failure" logic. */
1953 s->n_restarts ++;
1954 s->flush_n_restarts = false;
1955
1956 log_struct(LOG_INFO,
1957 "MESSAGE_ID=" SD_MESSAGE_UNIT_RESTART_SCHEDULED_STR,
1958 LOG_UNIT_ID(UNIT(s)),
f1c50bec 1959 LOG_UNIT_INVOCATION_ID(UNIT(s)),
7a0019d3
LP
1960 LOG_UNIT_MESSAGE(UNIT(s), "Scheduled restart job, restart counter is at %u.", s->n_restarts),
1961 "N_RESTARTS=%u", s->n_restarts,
1962 NULL);
1963
1964 /* Notify clients about changed restart counter */
1965 unit_add_to_dbus_queue(UNIT(s));
1966
a8bb2e65
LP
1967 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
1968 * it will be canceled as part of the service_stop() call that
1969 * is executed as part of JOB_RESTART. */
1970
034c6ed7
LP
1971 return;
1972
1973fail:
f2341e0a 1974 log_unit_warning(UNIT(s), "Failed to schedule restart job: %s", bus_error_message(&error, -r));
f42806df 1975 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1976}
1977
308d72dc 1978static void service_enter_reload_by_notify(Service *s) {
15d167f8
JW
1979 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
1980 int r;
1981
308d72dc
LP
1982 assert(s);
1983
36c16a7c 1984 service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_start_usec));
308d72dc 1985 service_set_state(s, SERVICE_RELOAD);
15d167f8
JW
1986
1987 /* service_enter_reload_by_notify is never called during a reload, thus no loops are possible. */
1988 r = manager_propagate_reload(UNIT(s)->manager, UNIT(s), JOB_FAIL, &error);
1989 if (r < 0)
1990 log_unit_warning(UNIT(s), "Failed to schedule propagation of reload: %s", bus_error_message(&error, -r));
308d72dc
LP
1991}
1992
034c6ed7
LP
1993static void service_enter_reload(Service *s) {
1994 int r;
1995
1996 assert(s);
1997
5e94833f 1998 service_unwatch_control_pid(s);
95c906ae 1999 s->reload_result = SERVICE_SUCCESS;
5e94833f 2000
117dcc57
ZJS
2001 s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2002 if (s->control_command) {
867b3b7d
LP
2003 s->control_command_id = SERVICE_EXEC_RELOAD;
2004
ecedd90f
LP
2005 r = service_spawn(s,
2006 s->control_command,
21b2ce39 2007 s->timeout_start_usec,
1703fa41 2008 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL,
ecedd90f
LP
2009 &s->control_pid);
2010 if (r < 0)
034c6ed7
LP
2011 goto fail;
2012
80876c20
LP
2013 service_set_state(s, SERVICE_RELOAD);
2014 } else
f42806df 2015 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2016
2017 return;
2018
2019fail:
f2341e0a 2020 log_unit_warning_errno(UNIT(s), r, "Failed to run 'reload' task: %m");
f42806df
LP
2021 s->reload_result = SERVICE_FAILURE_RESOURCES;
2022 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2023}
2024
f42806df 2025static void service_run_next_control(Service *s) {
36c16a7c 2026 usec_t timeout;
034c6ed7
LP
2027 int r;
2028
2029 assert(s);
2030 assert(s->control_command);
2031 assert(s->control_command->command_next);
2032
34e9ba66 2033 assert(s->control_command_id != SERVICE_EXEC_START);
034c6ed7 2034
34e9ba66 2035 s->control_command = s->control_command->command_next;
5e94833f
LP
2036 service_unwatch_control_pid(s);
2037
36c16a7c
LP
2038 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
2039 timeout = s->timeout_start_usec;
2040 else
2041 timeout = s->timeout_stop_usec;
2042
ecedd90f
LP
2043 r = service_spawn(s,
2044 s->control_command,
36c16a7c 2045 timeout,
1703fa41 2046 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|
136dc4c4
LP
2047 (IN_SET(s->control_command_id, SERVICE_EXEC_START_PRE, SERVICE_EXEC_STOP_POST) ? EXEC_APPLY_TTY_STDIN : 0)|
2048 (IN_SET(s->control_command_id, SERVICE_EXEC_STOP, SERVICE_EXEC_STOP_POST) ? EXEC_SETENV_RESULT : 0),
ecedd90f
LP
2049 &s->control_pid);
2050 if (r < 0)
034c6ed7
LP
2051 goto fail;
2052
2053 return;
2054
2055fail:
f2341e0a 2056 log_unit_warning_errno(UNIT(s), r, "Failed to run next control task: %m");
034c6ed7 2057
4cd9fa81 2058 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START_POST, SERVICE_STOP))
f42806df 2059 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7 2060 else if (s->state == SERVICE_STOP_POST)
f42806df 2061 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
e2f3b44c 2062 else if (s->state == SERVICE_RELOAD) {
f42806df
LP
2063 s->reload_result = SERVICE_FAILURE_RESOURCES;
2064 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c 2065 } else
f42806df 2066 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
5cb5a6ff
LP
2067}
2068
f42806df 2069static void service_run_next_main(Service *s) {
34e9ba66
LP
2070 pid_t pid;
2071 int r;
2072
2073 assert(s);
867b3b7d
LP
2074 assert(s->main_command);
2075 assert(s->main_command->command_next);
2076 assert(s->type == SERVICE_ONESHOT);
34e9ba66 2077
867b3b7d 2078 s->main_command = s->main_command->command_next;
34e9ba66
LP
2079 service_unwatch_main_pid(s);
2080
ecedd90f
LP
2081 r = service_spawn(s,
2082 s->main_command,
21b2ce39 2083 s->timeout_start_usec,
1703fa41 2084 EXEC_PASS_FDS|EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_SET_WATCHDOG,
ecedd90f
LP
2085 &pid);
2086 if (r < 0)
34e9ba66
LP
2087 goto fail;
2088
2089 service_set_main_pid(s, pid);
2090
2091 return;
2092
2093fail:
f2341e0a 2094 log_unit_warning_errno(UNIT(s), r, "Failed to run next main task: %m");
f42806df 2095 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
34e9ba66
LP
2096}
2097
87f0e418
LP
2098static int service_start(Unit *u) {
2099 Service *s = SERVICE(u);
07299350 2100 int r;
5cb5a6ff
LP
2101
2102 assert(s);
2103
034c6ed7
LP
2104 /* We cannot fulfill this request right now, try again later
2105 * please! */
a00973af
LP
2106 if (IN_SET(s->state,
2107 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
2108 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))
5cb5a6ff
LP
2109 return -EAGAIN;
2110
034c6ed7 2111 /* Already on it! */
a00973af 2112 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST))
034c6ed7
LP
2113 return 0;
2114
2e9d6c12 2115 /* A service that will be restarted must be stopped first to
7f2cddae 2116 * trigger BindsTo and/or OnFailure dependencies. If a user
2e9d6c12 2117 * does not want to wait for the holdoff time to elapse, the
d4943dc7
LP
2118 * service should be manually restarted, not started. We
2119 * simply return EAGAIN here, so that any start jobs stay
2120 * queued, and assume that the auto restart timer will
2121 * eventually trigger the restart. */
2122 if (s->state == SERVICE_AUTO_RESTART)
a8bb2e65 2123 return -EAGAIN;
2e9d6c12 2124
a00973af 2125 assert(IN_SET(s->state, SERVICE_DEAD, SERVICE_FAILED));
5cb5a6ff 2126
07299350
LP
2127 /* Make sure we don't enter a busy loop of some kind. */
2128 r = unit_start_limit_test(u);
2129 if (r < 0) {
2130 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT_HIT, false);
2131 return r;
2132 }
2133
4b58153d
LP
2134 r = unit_acquire_invocation_id(u);
2135 if (r < 0)
2136 return r;
2137
f42806df
LP
2138 s->result = SERVICE_SUCCESS;
2139 s->reload_result = SERVICE_SUCCESS;
034c6ed7 2140 s->main_pid_known = false;
6dfa5494 2141 s->main_pid_alien = false;
47342320 2142 s->forbid_restart = false;
3c7416b6
LP
2143
2144 u->reset_accounting = true;
034c6ed7 2145
a1e58e8e 2146 s->status_text = mfree(s->status_text);
8cfdb077
LP
2147 s->status_errno = 0;
2148
308d72dc
LP
2149 s->notify_state = NOTIFY_UNKNOWN;
2150
2787d83c
M
2151 s->watchdog_override_enable = false;
2152 s->watchdog_override_usec = 0;
2153
7a0019d3
LP
2154 /* This is not an automatic restart? Flush the restart counter then */
2155 if (s->flush_n_restarts) {
2156 s->n_restarts = 0;
2157 s->flush_n_restarts = false;
2158 }
2159
034c6ed7 2160 service_enter_start_pre(s);
82a2b6bb 2161 return 1;
5cb5a6ff
LP
2162}
2163
87f0e418
LP
2164static int service_stop(Unit *u) {
2165 Service *s = SERVICE(u);
5cb5a6ff
LP
2166
2167 assert(s);
2168
a509f0e6 2169 /* Don't create restart jobs from manual stops. */
47342320 2170 s->forbid_restart = true;
034c6ed7 2171
e537352b 2172 /* Already on it */
a00973af
LP
2173 if (IN_SET(s->state,
2174 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
2175 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))
e537352b
LP
2176 return 0;
2177
f0c7b229 2178 /* A restart will be scheduled or is in progress. */
034c6ed7 2179 if (s->state == SERVICE_AUTO_RESTART) {
0c7f15b3 2180 service_set_state(s, SERVICE_DEAD);
034c6ed7
LP
2181 return 0;
2182 }
2183
3f6c78dc
LP
2184 /* If there's already something running we go directly into
2185 * kill mode. */
a00973af 2186 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD)) {
f42806df 2187 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
3f6c78dc
LP
2188 return 0;
2189 }
5cb5a6ff 2190
a00973af 2191 assert(IN_SET(s->state, SERVICE_RUNNING, SERVICE_EXITED));
3a762661 2192
f42806df 2193 service_enter_stop(s, SERVICE_SUCCESS);
82a2b6bb 2194 return 1;
5cb5a6ff
LP
2195}
2196
87f0e418
LP
2197static int service_reload(Unit *u) {
2198 Service *s = SERVICE(u);
034c6ed7
LP
2199
2200 assert(s);
2201
3742095b 2202 assert(IN_SET(s->state, SERVICE_RUNNING, SERVICE_EXITED));
034c6ed7
LP
2203
2204 service_enter_reload(s);
2d018ae2 2205 return 1;
5cb5a6ff
LP
2206}
2207
44a6b1b6 2208_pure_ static bool service_can_reload(Unit *u) {
87f0e418 2209 Service *s = SERVICE(u);
034c6ed7
LP
2210
2211 assert(s);
2212
2213 return !!s->exec_command[SERVICE_EXEC_RELOAD];
2214}
2215
e266c068
MS
2216static unsigned service_exec_command_index(Unit *u, ServiceExecCommand id, ExecCommand *current) {
2217 Service *s = SERVICE(u);
2218 unsigned idx = 0;
2219 ExecCommand *first, *c;
2220
2221 assert(s);
2222
2223 first = s->exec_command[id];
2224
2225 /* Figure out where we are in the list by walking back to the beginning */
2226 for (c = current; c != first; c = c->command_prev)
2227 idx++;
2228
2229 return idx;
2230}
2231
2232static int service_serialize_exec_command(Unit *u, FILE *f, ExecCommand *command) {
2233 Service *s = SERVICE(u);
2234 ServiceExecCommand id;
2235 unsigned idx;
2236 const char *type;
2237 char **arg;
e266c068
MS
2238 _cleanup_free_ char *args = NULL, *p = NULL;
2239 size_t allocated = 0, length = 0;
2240
2241 assert(s);
2242 assert(f);
2243
2244 if (!command)
2245 return 0;
2246
2247 if (command == s->control_command) {
2248 type = "control";
2249 id = s->control_command_id;
2250 } else {
2251 type = "main";
2252 id = SERVICE_EXEC_START;
2253 }
2254
2255 idx = service_exec_command_index(u, id, command);
2256
2257 STRV_FOREACH(arg, command->argv) {
2258 size_t n;
2259 _cleanup_free_ char *e = NULL;
2260
2261 e = xescape(*arg, WHITESPACE);
2262 if (!e)
2263 return -ENOMEM;
2264
2265 n = strlen(e);
2266 if (!GREEDY_REALLOC(args, allocated, length + 1 + n + 1))
2267 return -ENOMEM;
2268
2269 if (length > 0)
2270 args[length++] = ' ';
2271
2272 memcpy(args + length, e, n);
2273 length += n;
2274 }
2275
2276 if (!GREEDY_REALLOC(args, allocated, length + 1))
2277 return -ENOMEM;
2278 args[length++] = 0;
2279
2280 p = xescape(command->path, WHITESPACE);
2281 if (!p)
2282 return -ENOMEM;
2283
2284 fprintf(f, "%s-command=%s %u %s %s\n", type, service_exec_command_to_string(id), idx, p, args);
2285
2286 return 0;
2287}
2288
a16e1123
LP
2289static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2290 Service *s = SERVICE(u);
2339fc93 2291 ServiceFDStore *fs;
a34ceba6 2292 int r;
a16e1123
LP
2293
2294 assert(u);
2295 assert(f);
2296 assert(fds);
2297
2298 unit_serialize_item(u, f, "state", service_state_to_string(s->state));
f42806df
LP
2299 unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2300 unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
a16e1123
LP
2301
2302 if (s->control_pid > 0)
f06db334 2303 unit_serialize_item_format(u, f, "control-pid", PID_FMT, s->control_pid);
a16e1123 2304
5925dd3c 2305 if (s->main_pid_known && s->main_pid > 0)
ccd06097 2306 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
a16e1123
LP
2307
2308 unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
de1d4f9b 2309 unit_serialize_item(u, f, "bus-name-good", yes_no(s->bus_name_good));
d8ccf5fd 2310 unit_serialize_item(u, f, "bus-name-owner", s->bus_name_owner);
a16e1123 2311
7a0019d3 2312 unit_serialize_item_format(u, f, "n-restarts", "%u", s->n_restarts);
7f923884 2313 unit_serialize_item(u, f, "flush-n-restarts", yes_no(s->flush_n_restarts));
7a0019d3 2314
a34ceba6
LP
2315 r = unit_serialize_item_escaped(u, f, "status-text", s->status_text);
2316 if (r < 0)
2317 return r;
3a2776bc 2318
e266c068
MS
2319 service_serialize_exec_command(u, f, s->control_command);
2320 service_serialize_exec_command(u, f, s->main_command);
a16e1123 2321
a34ceba6
LP
2322 r = unit_serialize_item_fd(u, f, fds, "stdin-fd", s->stdin_fd);
2323 if (r < 0)
2324 return r;
2325 r = unit_serialize_item_fd(u, f, fds, "stdout-fd", s->stdout_fd);
2326 if (r < 0)
2327 return r;
2328 r = unit_serialize_item_fd(u, f, fds, "stderr-fd", s->stderr_fd);
2329 if (r < 0)
2330 return r;
e44da745 2331
9dfb64f8
ZJS
2332 if (UNIT_ISSET(s->accept_socket)) {
2333 r = unit_serialize_item(u, f, "accept-socket", UNIT_DEREF(s->accept_socket)->id);
2334 if (r < 0)
2335 return r;
2336 }
2337
a34ceba6 2338 r = unit_serialize_item_fd(u, f, fds, "socket-fd", s->socket_fd);
a34ceba6
LP
2339 if (r < 0)
2340 return r;
e44da745 2341
2339fc93 2342 LIST_FOREACH(fd_store, fs, s->fd_store) {
8dd4c05b 2343 _cleanup_free_ char *c = NULL;
2339fc93
LP
2344 int copy;
2345
2346 copy = fdset_put_dup(fds, fs->fd);
2347 if (copy < 0)
2348 return copy;
2349
8dd4c05b
LP
2350 c = cescape(fs->fdname);
2351
2352 unit_serialize_item_format(u, f, "fd-store-fd", "%i %s", copy, strempty(c));
2339fc93
LP
2353 }
2354
ecdbca40 2355 if (s->main_exec_status.pid > 0) {
f06db334
LP
2356 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT, s->main_exec_status.pid);
2357 dual_timestamp_serialize(f, "main-exec-status-start", &s->main_exec_status.start_timestamp);
2358 dual_timestamp_serialize(f, "main-exec-status-exit", &s->main_exec_status.exit_timestamp);
ecdbca40 2359
799fd0fd 2360 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
f06db334
LP
2361 unit_serialize_item_format(u, f, "main-exec-status-code", "%i", s->main_exec_status.code);
2362 unit_serialize_item_format(u, f, "main-exec-status-status", "%i", s->main_exec_status.status);
ecdbca40
LP
2363 }
2364 }
f06db334 2365
36b693a6 2366 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
ecdbca40 2367
a34ceba6 2368 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
6aca9a58 2369
2787d83c
M
2370 if (s->watchdog_override_enable)
2371 unit_serialize_item_format(u, f, "watchdog-override-usec", USEC_FMT, s->watchdog_override_usec);
2372
a16e1123
LP
2373 return 0;
2374}
2375
e266c068
MS
2376static int service_deserialize_exec_command(Unit *u, const char *key, const char *value) {
2377 Service *s = SERVICE(u);
2378 int r;
2379 unsigned idx = 0, i;
2380 bool control, found = false;
2381 ServiceExecCommand id = _SERVICE_EXEC_COMMAND_INVALID;
2382 ExecCommand *command = NULL;
6eeec374 2383 _cleanup_free_ char *path = NULL;
e266c068
MS
2384 _cleanup_strv_free_ char **argv = NULL;
2385
2386 enum ExecCommandState {
2387 STATE_EXEC_COMMAND_TYPE,
2388 STATE_EXEC_COMMAND_INDEX,
2389 STATE_EXEC_COMMAND_PATH,
2390 STATE_EXEC_COMMAND_ARGS,
2391 _STATE_EXEC_COMMAND_MAX,
2392 _STATE_EXEC_COMMAND_INVALID = -1,
2393 } state;
2394
2395 assert(s);
2396 assert(key);
2397 assert(value);
2398
2399 control = streq(key, "control-command");
2400
2401 state = STATE_EXEC_COMMAND_TYPE;
2402
2403 for (;;) {
2404 _cleanup_free_ char *arg = NULL;
2405
2406 r = extract_first_word(&value, &arg, NULL, EXTRACT_CUNESCAPE);
2407 if (r == 0)
2408 break;
2409 else if (r < 0)
2410 return r;
2411
2412 switch (state) {
2413 case STATE_EXEC_COMMAND_TYPE:
2414 id = service_exec_command_from_string(arg);
2415 if (id < 0)
2416 return -EINVAL;
2417
2418 state = STATE_EXEC_COMMAND_INDEX;
2419 break;
2420 case STATE_EXEC_COMMAND_INDEX:
2421 r = safe_atou(arg, &idx);
2422 if (r < 0)
2423 return -EINVAL;
2424
2425 state = STATE_EXEC_COMMAND_PATH;
2426 break;
2427 case STATE_EXEC_COMMAND_PATH:
2428 path = arg;
2429 arg = NULL;
2430 state = STATE_EXEC_COMMAND_ARGS;
2431
2432 if (!path_is_absolute(path))
2433 return -EINVAL;
2434 break;
2435 case STATE_EXEC_COMMAND_ARGS:
2436 r = strv_extend(&argv, arg);
2437 if (r < 0)
2438 return -ENOMEM;
2439 break;
2440 default:
2441 assert_not_reached("Unknown error at deserialization of exec command");
2442 break;
2443 }
2444 }
2445
2446 if (state != STATE_EXEC_COMMAND_ARGS)
2447 return -EINVAL;
2448
2449 /* Let's check whether exec command on given offset matches data that we just deserialized */
2450 for (command = s->exec_command[id], i = 0; command; command = command->command_next, i++) {
2451 if (i != idx)
2452 continue;
2453
2454 found = strv_equal(argv, command->argv) && streq(command->path, path);
2455 break;
2456 }
2457
2458 if (!found) {
2459 /* Command at the index we serialized is different, let's look for command that exactly
2460 * matches but is on different index. If there is no such command we will not resume execution. */
2461 for (command = s->exec_command[id]; command; command = command->command_next)
2462 if (strv_equal(command->argv, argv) && streq(command->path, path))
2463 break;
2464 }
2465
2466 if (command && control)
2467 s->control_command = command;
2468 else if (command)
2469 s->main_command = command;
2470 else
2471 log_unit_warning(u, "Current command vanished from the unit file, execution of the command list won't be resumed.");
2472
2473 return 0;
2474}
2475
a16e1123
LP
2476static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2477 Service *s = SERVICE(u);
2339fc93 2478 int r;
a16e1123
LP
2479
2480 assert(u);
2481 assert(key);
2482 assert(value);
2483 assert(fds);
2484
2485 if (streq(key, "state")) {
2486 ServiceState state;
2487
117dcc57
ZJS
2488 state = service_state_from_string(value);
2489 if (state < 0)
f2341e0a 2490 log_unit_debug(u, "Failed to parse state value: %s", value);
a16e1123
LP
2491 else
2492 s->deserialized_state = state;
f42806df
LP
2493 } else if (streq(key, "result")) {
2494 ServiceResult f;
2495
2496 f = service_result_from_string(value);
2497 if (f < 0)
f2341e0a 2498 log_unit_debug(u, "Failed to parse result value: %s", value);
f42806df
LP
2499 else if (f != SERVICE_SUCCESS)
2500 s->result = f;
2501
2502 } else if (streq(key, "reload-result")) {
2503 ServiceResult f;
2504
2505 f = service_result_from_string(value);
2506 if (f < 0)
f2341e0a 2507 log_unit_debug(u, "Failed to parse reload result value: %s", value);
f42806df
LP
2508 else if (f != SERVICE_SUCCESS)
2509 s->reload_result = f;
a16e1123 2510
a16e1123 2511 } else if (streq(key, "control-pid")) {
5925dd3c 2512 pid_t pid;
a16e1123 2513
e364ad06 2514 if (parse_pid(value, &pid) < 0)
f2341e0a 2515 log_unit_debug(u, "Failed to parse control-pid value: %s", value);
a16e1123 2516 else
e55224ca 2517 s->control_pid = pid;
a16e1123 2518 } else if (streq(key, "main-pid")) {
5925dd3c 2519 pid_t pid;
a16e1123 2520
e364ad06 2521 if (parse_pid(value, &pid) < 0)
f2341e0a 2522 log_unit_debug(u, "Failed to parse main-pid value: %s", value);
7400b9d2
LP
2523 else {
2524 service_set_main_pid(s, pid);
2525 unit_watch_pid(UNIT(s), pid);
2526 }
a16e1123
LP
2527 } else if (streq(key, "main-pid-known")) {
2528 int b;
2529
117dcc57
ZJS
2530 b = parse_boolean(value);
2531 if (b < 0)
f2341e0a 2532 log_unit_debug(u, "Failed to parse main-pid-known value: %s", value);
a16e1123
LP
2533 else
2534 s->main_pid_known = b;
de1d4f9b
WF
2535 } else if (streq(key, "bus-name-good")) {
2536 int b;
2537
2538 b = parse_boolean(value);
2539 if (b < 0)
2540 log_unit_debug(u, "Failed to parse bus-name-good value: %s", value);
2541 else
2542 s->bus_name_good = b;
d8ccf5fd
DM
2543 } else if (streq(key, "bus-name-owner")) {
2544 r = free_and_strdup(&s->bus_name_owner, value);
2545 if (r < 0)
2546 log_unit_error_errno(u, r, "Unable to deserialize current bus owner %s: %m", value);
3a2776bc
LP
2547 } else if (streq(key, "status-text")) {
2548 char *t;
2549
f2341e0a
LP
2550 r = cunescape(value, 0, &t);
2551 if (r < 0)
2552 log_unit_debug_errno(u, r, "Failed to unescape status text: %s", value);
117dcc57 2553 else {
3a2776bc
LP
2554 free(s->status_text);
2555 s->status_text = t;
2556 }
2557
9dfb64f8
ZJS
2558 } else if (streq(key, "accept-socket")) {
2559 Unit *socket;
2560
2561 r = manager_load_unit(u->manager, value, NULL, NULL, &socket);
2562 if (r < 0)
2563 log_unit_debug_errno(u, r, "Failed to load accept-socket unit: %s", value);
2564 else {
2565 unit_ref_set(&s->accept_socket, socket);
2566 SOCKET(socket)->n_connections++;
2567 }
2568
a16e1123
LP
2569 } else if (streq(key, "socket-fd")) {
2570 int fd;
2571
2572 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
f2341e0a 2573 log_unit_debug(u, "Failed to parse socket-fd value: %s", value);
a16e1123 2574 else {
574634bc 2575 asynchronous_close(s->socket_fd);
a16e1123
LP
2576 s->socket_fd = fdset_remove(fds, fd);
2577 }
2339fc93 2578 } else if (streq(key, "fd-store-fd")) {
8dd4c05b
LP
2579 const char *fdv;
2580 size_t pf;
2339fc93
LP
2581 int fd;
2582
8dd4c05b
LP
2583 pf = strcspn(value, WHITESPACE);
2584 fdv = strndupa(value, pf);
2585
2586 if (safe_atoi(fdv, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
f2341e0a 2587 log_unit_debug(u, "Failed to parse fd-store-fd value: %s", value);
2339fc93 2588 else {
8dd4c05b
LP
2589 _cleanup_free_ char *t = NULL;
2590 const char *fdn;
2591
2592 fdn = value + pf;
2593 fdn += strspn(fdn, WHITESPACE);
2594 (void) cunescape(fdn, 0, &t);
2595
2596 r = service_add_fd_store(s, fd, t);
2339fc93 2597 if (r < 0)
f2341e0a 2598 log_unit_error_errno(u, r, "Failed to add fd to store: %m");
9021ff17 2599 else
2339fc93
LP
2600 fdset_remove(fds, fd);
2601 }
2602
ecdbca40
LP
2603 } else if (streq(key, "main-exec-status-pid")) {
2604 pid_t pid;
2605
e364ad06 2606 if (parse_pid(value, &pid) < 0)
f2341e0a 2607 log_unit_debug(u, "Failed to parse main-exec-status-pid value: %s", value);
ecdbca40
LP
2608 else
2609 s->main_exec_status.pid = pid;
2610 } else if (streq(key, "main-exec-status-code")) {
2611 int i;
2612
e364ad06 2613 if (safe_atoi(value, &i) < 0)
f2341e0a 2614 log_unit_debug(u, "Failed to parse main-exec-status-code value: %s", value);
ecdbca40
LP
2615 else
2616 s->main_exec_status.code = i;
2617 } else if (streq(key, "main-exec-status-status")) {
2618 int i;
2619
e364ad06 2620 if (safe_atoi(value, &i) < 0)
f2341e0a 2621 log_unit_debug(u, "Failed to parse main-exec-status-status value: %s", value);
ecdbca40
LP
2622 else
2623 s->main_exec_status.status = i;
799fd0fd
LP
2624 } else if (streq(key, "main-exec-status-start"))
2625 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2626 else if (streq(key, "main-exec-status-exit"))
2627 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
a6927d7f
MO
2628 else if (streq(key, "watchdog-timestamp"))
2629 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
613b411c 2630 else if (streq(key, "forbid-restart")) {
6aca9a58
SE
2631 int b;
2632
2633 b = parse_boolean(value);
2634 if (b < 0)
f2341e0a 2635 log_unit_debug(u, "Failed to parse forbid-restart value: %s", value);
6aca9a58
SE
2636 else
2637 s->forbid_restart = b;
a34ceba6
LP
2638 } else if (streq(key, "stdin-fd")) {
2639 int fd;
2640
2641 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2642 log_unit_debug(u, "Failed to parse stdin-fd value: %s", value);
2643 else {
2644 asynchronous_close(s->stdin_fd);
2645 s->stdin_fd = fdset_remove(fds, fd);
1e22b5cd 2646 s->exec_context.stdio_as_fds = true;
a34ceba6
LP
2647 }
2648 } else if (streq(key, "stdout-fd")) {
2649 int fd;
2650
2651 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2652 log_unit_debug(u, "Failed to parse stdout-fd value: %s", value);
2653 else {
2654 asynchronous_close(s->stdout_fd);
2655 s->stdout_fd = fdset_remove(fds, fd);
1e22b5cd 2656 s->exec_context.stdio_as_fds = true;
a34ceba6
LP
2657 }
2658 } else if (streq(key, "stderr-fd")) {
2659 int fd;
2660
2661 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2662 log_unit_debug(u, "Failed to parse stderr-fd value: %s", value);
2663 else {
2664 asynchronous_close(s->stderr_fd);
2665 s->stderr_fd = fdset_remove(fds, fd);
1e22b5cd 2666 s->exec_context.stdio_as_fds = true;
a34ceba6 2667 }
2787d83c
M
2668 } else if (streq(key, "watchdog-override-usec")) {
2669 usec_t watchdog_override_usec;
2670 if (timestamp_deserialize(value, &watchdog_override_usec) < 0)
2671 log_unit_debug(u, "Failed to parse watchdog_override_usec value: %s", value);
2672 else {
2673 s->watchdog_override_enable = true;
2674 s->watchdog_override_usec = watchdog_override_usec;
2675 }
e266c068
MS
2676 } else if (STR_IN_SET(key, "main-command", "control-command")) {
2677 r = service_deserialize_exec_command(u, key, value);
2678 if (r < 0)
2679 log_unit_debug_errno(u, r, "Failed to parse serialized command \"%s\": %m", value);
7a0019d3
LP
2680
2681 } else if (streq(key, "n-restarts")) {
2682 r = safe_atou(value, &s->n_restarts);
2683 if (r < 0)
2684 log_unit_debug_errno(u, r, "Failed to parse serialized restart counter '%s': %m", value);
2685
2686 } else if (streq(key, "flush-n-restarts")) {
2687 r = parse_boolean(value);
2688 if (r < 0)
2689 log_unit_debug_errno(u, r, "Failed to parse serialized flush restart counter setting '%s': %m", value);
2690 else
2691 s->flush_n_restarts = r;
c17ec25e 2692 } else
f2341e0a 2693 log_unit_debug(u, "Unknown serialization key: %s", key);
a16e1123
LP
2694
2695 return 0;
2696}
2697
44a6b1b6 2698_pure_ static UnitActiveState service_active_state(Unit *u) {
e056b01d
LP
2699 const UnitActiveState *table;
2700
87f0e418 2701 assert(u);
5cb5a6ff 2702
e056b01d
LP
2703 table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2704
2705 return table[SERVICE(u)->state];
034c6ed7
LP
2706}
2707
10a94420
LP
2708static const char *service_sub_state_to_string(Unit *u) {
2709 assert(u);
2710
2711 return service_state_to_string(SERVICE(u)->state);
2712}
2713
701cc384
LP
2714static bool service_check_gc(Unit *u) {
2715 Service *s = SERVICE(u);
2716
2717 assert(s);
2718
6d55002a
LP
2719 /* Never clean up services that still have a process around,
2720 * even if the service is formally dead. */
2721 if (cgroup_good(s) > 0 ||
2722 main_pid_good(s) > 0 ||
2723 control_pid_good(s) > 0)
2724 return true;
2725
6d55002a
LP
2726 return false;
2727}
2728
3a111838
MS
2729static int service_retry_pid_file(Service *s) {
2730 int r;
2731
2732 assert(s->pid_file);
3742095b 2733 assert(IN_SET(s->state, SERVICE_START, SERVICE_START_POST));
3a111838
MS
2734
2735 r = service_load_pid_file(s, false);
2736 if (r < 0)
2737 return r;
2738
2739 service_unwatch_pid_file(s);
2740
f42806df 2741 service_enter_running(s, SERVICE_SUCCESS);
3a111838
MS
2742 return 0;
2743}
2744
2745static int service_watch_pid_file(Service *s) {
2746 int r;
2747
f2341e0a 2748 log_unit_debug(UNIT(s), "Setting watch for PID file %s", s->pid_file_pathspec->path);
8bb2d17d 2749
718db961 2750 r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
3a111838
MS
2751 if (r < 0)
2752 goto fail;
2753
2754 /* the pidfile might have appeared just before we set the watch */
f2341e0a 2755 log_unit_debug(UNIT(s), "Trying to read PID file %s in case it changed", s->pid_file_pathspec->path);
3a111838
MS
2756 service_retry_pid_file(s);
2757
2758 return 0;
2759fail:
f2341e0a 2760 log_unit_error_errno(UNIT(s), r, "Failed to set a watch for PID file %s: %m", s->pid_file_pathspec->path);
3a111838
MS
2761 service_unwatch_pid_file(s);
2762 return r;
2763}
2764
2765static int service_demand_pid_file(Service *s) {
2766 PathSpec *ps;
2767
2768 assert(s->pid_file);
2769 assert(!s->pid_file_pathspec);
2770
2771 ps = new0(PathSpec, 1);
2772 if (!ps)
2773 return -ENOMEM;
2774
718db961 2775 ps->unit = UNIT(s);
3a111838
MS
2776 ps->path = strdup(s->pid_file);
2777 if (!ps->path) {
2778 free(ps);
2779 return -ENOMEM;
2780 }
2781
2782 path_kill_slashes(ps->path);
2783
2784 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2785 * keep their PID file open all the time. */
2786 ps->type = PATH_MODIFIED;
2787 ps->inotify_fd = -1;
2788
2789 s->pid_file_pathspec = ps;
2790
2791 return service_watch_pid_file(s);
2792}
2793
718db961 2794static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
e14c2802
LP
2795 PathSpec *p = userdata;
2796 Service *s;
2797
2798 assert(p);
2799
2800 s = SERVICE(p->unit);
3a111838
MS
2801
2802 assert(s);
2803 assert(fd >= 0);
3742095b 2804 assert(IN_SET(s->state, SERVICE_START, SERVICE_START_POST));
3a111838 2805 assert(s->pid_file_pathspec);
57020a3a 2806 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
3a111838 2807
f2341e0a 2808 log_unit_debug(UNIT(s), "inotify event");
3a111838 2809
e14c2802 2810 if (path_spec_fd_event(p, events) < 0)
3a111838
MS
2811 goto fail;
2812
2813 if (service_retry_pid_file(s) == 0)
718db961 2814 return 0;
3a111838
MS
2815
2816 if (service_watch_pid_file(s) < 0)
2817 goto fail;
2818
718db961
LP
2819 return 0;
2820
3a111838
MS
2821fail:
2822 service_unwatch_pid_file(s);
f42806df 2823 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
718db961 2824 return 0;
3a111838
MS
2825}
2826
a911bb9a
LP
2827static void service_notify_cgroup_empty_event(Unit *u) {
2828 Service *s = SERVICE(u);
2829
2830 assert(u);
2831
f2341e0a 2832 log_unit_debug(u, "cgroup is empty");
a911bb9a
LP
2833
2834 switch (s->state) {
2835
2836 /* Waiting for SIGCHLD is usually more interesting,
2837 * because it includes return codes/signals. Which is
2838 * why we ignore the cgroup events for most cases,
2839 * except when we don't know pid which to expect the
2840 * SIGCHLD for. */
2841
2842 case SERVICE_START:
3c751b1b
LP
2843 if (s->type == SERVICE_NOTIFY &&
2844 main_pid_good(s) == 0 &&
2845 control_pid_good(s) == 0) {
3d474ef7 2846 /* No chance of getting a ready notification anymore */
c3fda31d 2847 service_enter_stop_post(s, SERVICE_FAILURE_PROTOCOL);
71e529fc
JW
2848 break;
2849 }
2850
4831981d 2851 _fallthrough_;
71e529fc 2852 case SERVICE_START_POST:
3c751b1b
LP
2853 if (s->pid_file_pathspec &&
2854 main_pid_good(s) == 0 &&
2855 control_pid_good(s) == 0) {
2856
3d474ef7 2857 /* Give up hoping for the daemon to write its PID file */
f2341e0a 2858 log_unit_warning(u, "Daemon never wrote its PID file. Failing.");
8bb2d17d 2859
a911bb9a
LP
2860 service_unwatch_pid_file(s);
2861 if (s->state == SERVICE_START)
c3fda31d 2862 service_enter_stop_post(s, SERVICE_FAILURE_PROTOCOL);
a911bb9a 2863 else
c35755fb 2864 service_enter_stop(s, SERVICE_FAILURE_PROTOCOL);
a911bb9a
LP
2865 }
2866 break;
2867
2868 case SERVICE_RUNNING:
2869 /* service_enter_running() will figure out what to do */
2870 service_enter_running(s, SERVICE_SUCCESS);
2871 break;
2872
db2cb23b 2873 case SERVICE_STOP_SIGABRT:
a911bb9a
LP
2874 case SERVICE_STOP_SIGTERM:
2875 case SERVICE_STOP_SIGKILL:
2876
b13ddbbc 2877 if (main_pid_good(s) <= 0 && control_pid_good(s) <= 0)
a911bb9a
LP
2878 service_enter_stop_post(s, SERVICE_SUCCESS);
2879
2880 break;
2881
2882 case SERVICE_STOP_POST:
2883 case SERVICE_FINAL_SIGTERM:
2884 case SERVICE_FINAL_SIGKILL:
b13ddbbc 2885 if (main_pid_good(s) <= 0 && control_pid_good(s) <= 0)
a911bb9a
LP
2886 service_enter_dead(s, SERVICE_SUCCESS, true);
2887
2888 break;
2889
2890 default:
2891 ;
2892 }
2893}
2894
87f0e418
LP
2895static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2896 Service *s = SERVICE(u);
f42806df 2897 ServiceResult f;
5cb5a6ff
LP
2898
2899 assert(s);
034c6ed7
LP
2900 assert(pid >= 0);
2901
1f0958f6 2902 if (is_clean_exit(code, status, s->type == SERVICE_ONESHOT ? EXIT_CLEAN_COMMAND : EXIT_CLEAN_DAEMON, &s->success_status))
f42806df
LP
2903 f = SERVICE_SUCCESS;
2904 else if (code == CLD_EXITED)
2905 f = SERVICE_FAILURE_EXIT_CODE;
2906 else if (code == CLD_KILLED)
2907 f = SERVICE_FAILURE_SIGNAL;
2908 else if (code == CLD_DUMPED)
2909 f = SERVICE_FAILURE_CORE_DUMP;
d06dacd0 2910 else
cfc4eb4c 2911 assert_not_reached("Unknown code");
034c6ed7
LP
2912
2913 if (s->main_pid == pid) {
db01f8b3
MS
2914 /* Forking services may occasionally move to a new PID.
2915 * As long as they update the PID file before exiting the old
2916 * PID, they're fine. */
5375410b 2917 if (service_load_pid_file(s, false) == 0)
db01f8b3 2918 return;
034c6ed7 2919
034c6ed7 2920 s->main_pid = 0;
6ea832a2 2921 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
034c6ed7 2922
867b3b7d 2923 if (s->main_command) {
fbeefb45
LP
2924 /* If this is not a forking service than the
2925 * main process got started and hence we copy
2926 * the exit status so that it is recorded both
2927 * as main and as control process exit
2928 * status */
2929
867b3b7d 2930 s->main_command->exec_status = s->main_exec_status;
b708e7ce 2931
3ed0cd26 2932 if (s->main_command->flags & EXEC_COMMAND_IGNORE_FAILURE)
f42806df 2933 f = SERVICE_SUCCESS;
fbeefb45
LP
2934 } else if (s->exec_command[SERVICE_EXEC_START]) {
2935
2936 /* If this is a forked process, then we should
2937 * ignore the return value if this was
2938 * configured for the starter process */
2939
3ed0cd26 2940 if (s->exec_command[SERVICE_EXEC_START]->flags & EXEC_COMMAND_IGNORE_FAILURE)
fbeefb45 2941 f = SERVICE_SUCCESS;
034c6ed7
LP
2942 }
2943
5368222d
LP
2944 /* When this is a successful exit, let's log about the exit code on DEBUG level. If this is a failure
2945 * and the process exited on its own via exit(), then let's make this a NOTICE, under the assumption
2946 * that the service already logged the reason at a higher log level on its own. However, if the service
2947 * died due to a signal, then it most likely didn't say anything about any reason, hence let's raise
2948 * our log level to WARNING then. */
2949
2950 log_struct(f == SERVICE_SUCCESS ? LOG_DEBUG :
2951 (code == CLD_EXITED ? LOG_NOTICE : LOG_WARNING),
f2341e0a
LP
2952 LOG_UNIT_MESSAGE(u, "Main process exited, code=%s, status=%i/%s",
2953 sigchld_code_to_string(code), status,
e2cc6eca
LP
2954 strna(code == CLD_EXITED
2955 ? exit_status_to_string(status, EXIT_STATUS_FULL)
2956 : signal_to_string(status))),
f2341e0a
LP
2957 "EXIT_CODE=%s", sigchld_code_to_string(code),
2958 "EXIT_STATUS=%i", status,
ba360bb0 2959 LOG_UNIT_ID(u),
f1c50bec 2960 LOG_UNIT_INVOCATION_ID(u),
f2341e0a 2961 NULL);
f42806df 2962
a0fef983 2963 if (s->result == SERVICE_SUCCESS)
f42806df 2964 s->result = f;
034c6ed7 2965
867b3b7d
LP
2966 if (s->main_command &&
2967 s->main_command->command_next &&
b58aeb70 2968 s->type == SERVICE_ONESHOT &&
f42806df 2969 f == SERVICE_SUCCESS) {
034c6ed7 2970
34e9ba66
LP
2971 /* There is another command to *
2972 * execute, so let's do that. */
034c6ed7 2973
f2341e0a 2974 log_unit_debug(u, "Running next main command for state %s.", service_state_to_string(s->state));
f42806df 2975 service_run_next_main(s);
034c6ed7 2976
34e9ba66
LP
2977 } else {
2978
2979 /* The service exited, so the service is officially
2980 * gone. */
867b3b7d 2981 s->main_command = NULL;
34e9ba66
LP
2982
2983 switch (s->state) {
2984
2985 case SERVICE_START_POST:
2986 case SERVICE_RELOAD:
2987 case SERVICE_STOP:
2988 /* Need to wait until the operation is
2989 * done */
c4653a4d 2990 break;
7d55e835 2991
34e9ba66
LP
2992 case SERVICE_START:
2993 if (s->type == SERVICE_ONESHOT) {
2994 /* This was our main goal, so let's go on */
f42806df 2995 if (f == SERVICE_SUCCESS)
34e9ba66
LP
2996 service_enter_start_post(s);
2997 else
c3fda31d 2998 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
34e9ba66 2999 break;
3d474ef7
JW
3000 } else if (s->type == SERVICE_NOTIFY) {
3001 /* Only enter running through a notification, so that the
3002 * SERVICE_START state signifies that no ready notification
3003 * has been received */
3004 if (f != SERVICE_SUCCESS)
c3fda31d 3005 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
df66b93f
JW
3006 else if (!s->remain_after_exit || s->notify_access == NOTIFY_MAIN)
3007 /* The service has never been and will never be active */
c3fda31d 3008 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_PROTOCOL);
3d474ef7 3009 break;
34e9ba66 3010 }
034c6ed7 3011
4831981d 3012 _fallthrough_;
34e9ba66 3013 case SERVICE_RUNNING:
f42806df 3014 service_enter_running(s, f);
34e9ba66 3015 break;
034c6ed7 3016
db2cb23b 3017 case SERVICE_STOP_SIGABRT:
34e9ba66
LP
3018 case SERVICE_STOP_SIGTERM:
3019 case SERVICE_STOP_SIGKILL:
5cb5a6ff 3020
b13ddbbc 3021 if (control_pid_good(s) <= 0)
f42806df 3022 service_enter_stop_post(s, f);
5cb5a6ff 3023
34e9ba66
LP
3024 /* If there is still a control process, wait for that first */
3025 break;
3026
bf108e55
LP
3027 case SERVICE_STOP_POST:
3028 case SERVICE_FINAL_SIGTERM:
3029 case SERVICE_FINAL_SIGKILL:
3030
b13ddbbc 3031 if (control_pid_good(s) <= 0)
bf108e55
LP
3032 service_enter_dead(s, f, true);
3033 break;
3034
34e9ba66
LP
3035 default:
3036 assert_not_reached("Uh, main process died at wrong time.");
3037 }
034c6ed7 3038 }
5cb5a6ff 3039
034c6ed7 3040 } else if (s->control_pid == pid) {
34e9ba66
LP
3041 s->control_pid = 0;
3042
b708e7ce 3043 if (s->control_command) {
8bb2d17d 3044 exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
a16e1123 3045
3ed0cd26 3046 if (s->control_command->flags & EXEC_COMMAND_IGNORE_FAILURE)
f42806df 3047 f = SERVICE_SUCCESS;
b708e7ce
LP
3048 }
3049
f2341e0a
LP
3050 log_unit_full(u, f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, 0,
3051 "Control process exited, code=%s status=%i",
3052 sigchld_code_to_string(code), status);
f42806df 3053
a0fef983 3054 if (s->result == SERVICE_SUCCESS)
f42806df 3055 s->result = f;
034c6ed7 3056
34e9ba66
LP
3057 if (s->control_command &&
3058 s->control_command->command_next &&
f42806df 3059 f == SERVICE_SUCCESS) {
034c6ed7
LP
3060
3061 /* There is another command to *
3062 * execute, so let's do that. */
3063
f2341e0a 3064 log_unit_debug(u, "Running next control command for state %s.", service_state_to_string(s->state));
f42806df 3065 service_run_next_control(s);
034c6ed7 3066
80876c20 3067 } else {
034c6ed7
LP
3068 /* No further commands for this step, so let's
3069 * figure out what to do next */
3070
a16e1123
LP
3071 s->control_command = NULL;
3072 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3073
f2341e0a 3074 log_unit_debug(u, "Got final SIGCHLD for state %s.", service_state_to_string(s->state));
bd982a8b 3075
034c6ed7
LP
3076 switch (s->state) {
3077
3078 case SERVICE_START_PRE:
f42806df 3079 if (f == SERVICE_SUCCESS)
034c6ed7
LP
3080 service_enter_start(s);
3081 else
c3fda31d 3082 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
3083 break;
3084
3085 case SERVICE_START:
bfba3256
LP
3086 if (s->type != SERVICE_FORKING)
3087 /* Maybe spurious event due to a reload that changed the type? */
3088 break;
034c6ed7 3089
f42806df 3090 if (f != SERVICE_SUCCESS) {
c3fda31d 3091 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
3a111838
MS
3092 break;
3093 }
034c6ed7 3094
3a111838 3095 if (s->pid_file) {
f42806df
LP
3096 bool has_start_post;
3097 int r;
3098
3a111838
MS
3099 /* Let's try to load the pid file here if we can.
3100 * The PID file might actually be created by a START_POST
3101 * script. In that case don't worry if the loading fails. */
f42806df
LP
3102
3103 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3104 r = service_load_pid_file(s, !has_start_post);
3a111838
MS
3105 if (!has_start_post && r < 0) {
3106 r = service_demand_pid_file(s);
b13ddbbc 3107 if (r < 0 || cgroup_good(s) == 0)
c3fda31d 3108 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_PROTOCOL);
3a111838
MS
3109 break;
3110 }
034c6ed7 3111 } else
783e05d6 3112 service_search_main_pid(s);
034c6ed7 3113
3a111838 3114 service_enter_start_post(s);
034c6ed7
LP
3115 break;
3116
3117 case SERVICE_START_POST:
f42806df 3118 if (f != SERVICE_SUCCESS) {
ce359e98 3119 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
2096e009 3120 break;
034c6ed7
LP
3121 }
3122
2096e009 3123 if (s->pid_file) {
f42806df
LP
3124 int r;
3125
3126 r = service_load_pid_file(s, true);
2096e009
MS
3127 if (r < 0) {
3128 r = service_demand_pid_file(s);
b13ddbbc 3129 if (r < 0 || cgroup_good(s) == 0)
c35755fb 3130 service_enter_stop(s, SERVICE_FAILURE_PROTOCOL);
2096e009
MS
3131 break;
3132 }
3133 } else
783e05d6 3134 service_search_main_pid(s);
2096e009 3135
f42806df 3136 service_enter_running(s, SERVICE_SUCCESS);
3185a36b 3137 break;
034c6ed7
LP
3138
3139 case SERVICE_RELOAD:
7236ce6e
ZJS
3140 if (f == SERVICE_SUCCESS)
3141 if (service_load_pid_file(s, true) < 0)
3142 service_search_main_pid(s);
3185a36b 3143
f42806df
LP
3144 s->reload_result = f;
3145 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
3146 break;
3147
3148 case SERVICE_STOP:
f42806df 3149 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
3150 break;
3151
db2cb23b 3152 case SERVICE_STOP_SIGABRT:
034c6ed7
LP
3153 case SERVICE_STOP_SIGTERM:
3154 case SERVICE_STOP_SIGKILL:
3155 if (main_pid_good(s) <= 0)
f42806df 3156 service_enter_stop_post(s, f);
034c6ed7
LP
3157
3158 /* If there is still a service
3159 * process around, wait until
3160 * that one quit, too */
3161 break;
3162
3163 case SERVICE_STOP_POST:
3164 case SERVICE_FINAL_SIGTERM:
3165 case SERVICE_FINAL_SIGKILL:
bf108e55
LP
3166 if (main_pid_good(s) <= 0)
3167 service_enter_dead(s, f, true);
034c6ed7
LP
3168 break;
3169
3170 default:
3171 assert_not_reached("Uh, control process died at wrong time.");
3172 }
3173 }
8c47c732 3174 }
c4e2ceae
LP
3175
3176 /* Notify clients about changed exit status */
3177 unit_add_to_dbus_queue(u);
a911bb9a
LP
3178
3179 /* We got one SIGCHLD for the service, let's watch all
3180 * processes that are now running of the service, and watch
3181 * that. Among the PIDs we then watch will be children
3182 * reassigned to us, which hopefully allows us to identify
3183 * when all children are gone */
3184 unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
3185 unit_watch_all_pids(u);
3186
bbc85a16
EV
3187 /* If the PID set is empty now, then let's finish this off
3188 (On unified we use proper notifications) */
c22800e4 3189 if (cg_unified_controller(SYSTEMD_CGROUP_CONTROLLER) == 0 && set_isempty(u->pids))
09e24654 3190 unit_add_to_cgroup_empty_queue(u);
034c6ed7
LP
3191}
3192
718db961
LP
3193static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
3194 Service *s = SERVICE(userdata);
034c6ed7
LP
3195
3196 assert(s);
718db961 3197 assert(source == s->timer_event_source);
034c6ed7
LP
3198
3199 switch (s->state) {
3200
3201 case SERVICE_START_PRE:
3202 case SERVICE_START:
f2341e0a 3203 log_unit_warning(UNIT(s), "%s operation timed out. Terminating.", s->state == SERVICE_START ? "Start" : "Start-pre");
c3fda31d 3204 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
80876c20
LP
3205 break;
3206
034c6ed7 3207 case SERVICE_START_POST:
f2341e0a 3208 log_unit_warning(UNIT(s), "Start-post operation timed out. Stopping.");
ce359e98 3209 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3210 break;
3211
36c16a7c
LP
3212 case SERVICE_RUNNING:
3213 log_unit_warning(UNIT(s), "Service reached runtime time limit. Stopping.");
3214 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
3215 break;
3216
e2f3b44c 3217 case SERVICE_RELOAD:
089b64d5 3218 log_unit_warning(UNIT(s), "Reload operation timed out. Killing reload process.");
e9a4f676 3219 service_kill_control_process(s);
f42806df
LP
3220 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3221 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c
LP
3222 break;
3223
034c6ed7 3224 case SERVICE_STOP:
f2341e0a 3225 log_unit_warning(UNIT(s), "Stopping timed out. Terminating.");
f42806df 3226 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3227 break;
3228
db2cb23b 3229 case SERVICE_STOP_SIGABRT:
f2341e0a 3230 log_unit_warning(UNIT(s), "State 'stop-sigabrt' timed out. Terminating.");
2ab2ab7b 3231 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
db2cb23b
UTL
3232 break;
3233
034c6ed7 3234 case SERVICE_STOP_SIGTERM:
4819ff03 3235 if (s->kill_context.send_sigkill) {
f2341e0a 3236 log_unit_warning(UNIT(s), "State 'stop-sigterm' timed out. Killing.");
f42806df 3237 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3238 } else {
f2341e0a 3239 log_unit_warning(UNIT(s), "State 'stop-sigterm' timed out. Skipping SIGKILL.");
f42806df 3240 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
ba035df2
LP
3241 }
3242
034c6ed7
LP
3243 break;
3244
3245 case SERVICE_STOP_SIGKILL:
35b8ca3a 3246 /* Uh, we sent a SIGKILL and it is still not gone?
034c6ed7
LP
3247 * Must be something we cannot kill, so let's just be
3248 * weirded out and continue */
3249
f2341e0a 3250 log_unit_warning(UNIT(s), "Processes still around after SIGKILL. Ignoring.");
f42806df 3251 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3252 break;
3253
3254 case SERVICE_STOP_POST:
f2341e0a 3255 log_unit_warning(UNIT(s), "State 'stop-post' timed out. Terminating.");
f42806df 3256 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3257 break;
3258
3259 case SERVICE_FINAL_SIGTERM:
4819ff03 3260 if (s->kill_context.send_sigkill) {
f2341e0a 3261 log_unit_warning(UNIT(s), "State 'stop-final-sigterm' timed out. Killing.");
f42806df 3262 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3263 } else {
f2341e0a 3264 log_unit_warning(UNIT(s), "State 'stop-final-sigterm' timed out. Skipping SIGKILL. Entering failed mode.");
f42806df 3265 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
ba035df2
LP
3266 }
3267
034c6ed7
LP
3268 break;
3269
3270 case SERVICE_FINAL_SIGKILL:
f2341e0a 3271 log_unit_warning(UNIT(s), "Processes still around after final SIGKILL. Entering failed mode.");
f42806df 3272 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
034c6ed7
LP
3273 break;
3274
3275 case SERVICE_AUTO_RESTART:
f2341e0a 3276 log_unit_info(UNIT(s),
ef417cfd 3277 s->restart_usec > 0 ?
f2341e0a
LP
3278 "Service hold-off time over, scheduling restart." :
3279 "Service has no hold-off time, scheduling restart.");
034c6ed7
LP
3280 service_enter_restart(s);
3281 break;
3282
3283 default:
3284 assert_not_reached("Timeout at wrong time.");
3285 }
718db961
LP
3286
3287 return 0;
3288}
3289
3290static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
3291 Service *s = SERVICE(userdata);
a7850c7d 3292 char t[FORMAT_TIMESPAN_MAX];
2787d83c 3293 usec_t watchdog_usec;
718db961
LP
3294
3295 assert(s);
3296 assert(source == s->watchdog_event_source);
3297
2787d83c
M
3298 watchdog_usec = service_get_watchdog_usec(s);
3299
f2341e0a 3300 log_unit_error(UNIT(s), "Watchdog timeout (limit %s)!",
2787d83c 3301 format_timespan(t, sizeof(t), watchdog_usec, 1));
8bb2d17d 3302
db2cb23b 3303 service_enter_signal(s, SERVICE_STOP_SIGABRT, SERVICE_FAILURE_WATCHDOG);
842129f5 3304
718db961 3305 return 0;
5cb5a6ff
LP
3306}
3307
a354329f 3308static void service_notify_message(Unit *u, pid_t pid, char **tags, FDSet *fds) {
8c47c732 3309 Service *s = SERVICE(u);
308d72dc 3310 _cleanup_free_ char *cc = NULL;
30b5275a 3311 bool notify_dbus = false;
308d72dc 3312 const char *e;
8c47c732
LP
3313
3314 assert(u);
3315
308d72dc 3316 cc = strv_join(tags, ", ");
da13d4d2 3317
c952c6ec 3318 if (s->notify_access == NOTIFY_NONE) {
f2341e0a 3319 log_unit_warning(u, "Got notification message from PID "PID_FMT", but reception is disabled.", pid);
c952c6ec 3320 return;
34959677 3321 } else if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
336c6e46 3322 if (s->main_pid != 0)
f2341e0a 3323 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 3324 else
6375bd20
JW
3325 log_unit_warning(u, "Got notification message from PID "PID_FMT", but reception only permitted for main PID which is currently not known", pid);
3326 return;
3327 } else if (s->notify_access == NOTIFY_EXEC && pid != s->main_pid && pid != s->control_pid) {
3328 if (s->main_pid != 0 && s->control_pid != 0)
3329 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,
3330 pid, s->main_pid, s->control_pid);
3331 else if (s->main_pid != 0)
3332 log_unit_warning(u, "Got notification message from PID "PID_FMT", but reception only permitted for main PID "PID_FMT, pid, s->main_pid);
3333 else if (s->control_pid != 0)
3334 log_unit_warning(u, "Got notification message from PID "PID_FMT", but reception only permitted for control PID "PID_FMT, pid, s->control_pid);
3335 else
3336 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 3337 return;
34959677
TG
3338 } else
3339 log_unit_debug(u, "Got notification message from PID "PID_FMT" (%s)", pid, isempty(cc) ? "n/a" : cc);
c952c6ec 3340
8c47c732 3341 /* Interpret MAINPID= */
28849dba 3342 e = strv_find_startswith(tags, "MAINPID=");
5e56b378 3343 if (e && IN_SET(s->state, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD)) {
28849dba 3344 if (parse_pid(e, &pid) < 0)
f2341e0a 3345 log_unit_warning(u, "Failed to parse MAINPID= field in notification message: %s", e);
3c9512c7
JW
3346 else if (pid == s->control_pid)
3347 log_unit_warning(u, "A control process cannot also be the main process");
df0ff127 3348 else if (pid == getpid_cached() || pid == 1)
6939ce64 3349 log_unit_warning(u, "Service manager can't be main process, ignoring sd_notify() MAINPID= field");
8c47c732 3350 else {
5925dd3c 3351 service_set_main_pid(s, pid);
7400b9d2 3352 unit_watch_pid(UNIT(s), pid);
30b5275a 3353 notify_dbus = true;
8c47c732
LP
3354 }
3355 }
3356
308d72dc
LP
3357 /* Interpret RELOADING= */
3358 if (strv_find(tags, "RELOADING=1")) {
3359
308d72dc
LP
3360 s->notify_state = NOTIFY_RELOADING;
3361
3362 if (s->state == SERVICE_RUNNING)
3363 service_enter_reload_by_notify(s);
3364
3365 notify_dbus = true;
3366 }
3367
8c47c732 3368 /* Interpret READY= */
308d72dc
LP
3369 if (strv_find(tags, "READY=1")) {
3370
308d72dc
LP
3371 s->notify_state = NOTIFY_READY;
3372
3373 /* Type=notify services inform us about completed
3374 * initialization with READY=1 */
3375 if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START)
3376 service_enter_start_post(s);
3377
3378 /* Sending READY=1 while we are reloading informs us
3379 * that the reloading is complete */
3380 if (s->state == SERVICE_RELOAD && s->control_pid == 0)
3381 service_enter_running(s, SERVICE_SUCCESS);
3382
3383 notify_dbus = true;
3384 }
3385
3386 /* Interpret STOPPING= */
3387 if (strv_find(tags, "STOPPING=1")) {
3388
308d72dc
LP
3389 s->notify_state = NOTIFY_STOPPING;
3390
3391 if (s->state == SERVICE_RUNNING)
3392 service_enter_stop_by_notify(s);
3393
30b5275a 3394 notify_dbus = true;
8c47c732
LP
3395 }
3396
3397 /* Interpret STATUS= */
28849dba 3398 e = strv_find_startswith(tags, "STATUS=");
7f110ff9 3399 if (e) {
28849dba 3400 _cleanup_free_ char *t = NULL;
8c47c732 3401
28849dba
LP
3402 if (!isempty(e)) {
3403 if (!utf8_is_valid(e))
f2341e0a 3404 log_unit_warning(u, "Status message in notification message is not UTF-8 clean.");
28849dba 3405 else {
28849dba
LP
3406 t = strdup(e);
3407 if (!t)
3408 log_oom();
3a2776bc 3409 }
28849dba 3410 }
8c47c732 3411
30b5275a 3412 if (!streq_ptr(s->status_text, t)) {
3b319885 3413 free_and_replace(s->status_text, t);
30b5275a 3414 notify_dbus = true;
28849dba 3415 }
8c47c732 3416 }
842129f5 3417
4774e357 3418 /* Interpret ERRNO= */
28849dba 3419 e = strv_find_startswith(tags, "ERRNO=");
4774e357
MAA
3420 if (e) {
3421 int status_errno;
3422
28849dba 3423 if (safe_atoi(e, &status_errno) < 0 || status_errno < 0)
f2341e0a 3424 log_unit_warning(u, "Failed to parse ERRNO= field in notification message: %s", e);
4774e357 3425 else {
4774e357
MAA
3426 if (s->status_errno != status_errno) {
3427 s->status_errno = status_errno;
3428 notify_dbus = true;
3429 }
3430 }
3431 }
3432
6f285378 3433 /* Interpret WATCHDOG= */
1f6b4113 3434 if (strv_find(tags, "WATCHDOG=1"))
842129f5 3435 service_reset_watchdog(s);
c4e2ceae 3436
8dd4c05b
LP
3437 if (strv_find(tags, "FDSTORE=1")) {
3438 const char *name;
3439
3440 name = strv_find_startswith(tags, "FDNAME=");
3441 if (name && !fdname_is_valid(name)) {
3442 log_unit_warning(u, "Passed FDNAME= name is invalid, ignoring.");
3443 name = NULL;
3444 }
3445
3446 service_add_fd_store_set(s, fds, name);
3447 }
a354329f 3448
2787d83c
M
3449 e = strv_find_startswith(tags, "WATCHDOG_USEC=");
3450 if (e) {
3451 usec_t watchdog_override_usec;
3452 if (safe_atou64(e, &watchdog_override_usec) < 0)
3453 log_unit_warning(u, "Failed to parse WATCHDOG_USEC=%s", e);
3454 else
3455 service_reset_watchdog_timeout(s, watchdog_override_usec);
3456 }
3457
c4e2ceae 3458 /* Notify clients about changed status or main pid */
30b5275a
LP
3459 if (notify_dbus)
3460 unit_add_to_dbus_queue(u);
8c47c732
LP
3461}
3462
7a7821c8 3463static int service_get_timeout(Unit *u, usec_t *timeout) {
68db7a3b 3464 Service *s = SERVICE(u);
7a7821c8 3465 uint64_t t;
68db7a3b
ZJS
3466 int r;
3467
3468 if (!s->timer_event_source)
3469 return 0;
3470
7a7821c8 3471 r = sd_event_source_get_time(s->timer_event_source, &t);
68db7a3b
ZJS
3472 if (r < 0)
3473 return r;
7a7821c8
LP
3474 if (t == USEC_INFINITY)
3475 return 0;
68db7a3b 3476
7a7821c8 3477 *timeout = t;
68db7a3b
ZJS
3478 return 1;
3479}
3480
05e343b7
LP
3481static void service_bus_name_owner_change(
3482 Unit *u,
3483 const char *name,
3484 const char *old_owner,
3485 const char *new_owner) {
3486
3487 Service *s = SERVICE(u);
718db961 3488 int r;
05e343b7
LP
3489
3490 assert(s);
3491 assert(name);
3492
3493 assert(streq(s->bus_name, name));
3494 assert(old_owner || new_owner);
3495
3496 if (old_owner && new_owner)
f2341e0a 3497 log_unit_debug(u, "D-Bus name %s changed owner from %s to %s", name, old_owner, new_owner);
05e343b7 3498 else if (old_owner)
f2341e0a 3499 log_unit_debug(u, "D-Bus name %s no longer registered by %s", name, old_owner);
05e343b7 3500 else
f2341e0a 3501 log_unit_debug(u, "D-Bus name %s now registered by %s", name, new_owner);
05e343b7
LP
3502
3503 s->bus_name_good = !!new_owner;
3504
d8ccf5fd
DM
3505 /* Track the current owner, so we can reconstruct changes after a daemon reload */
3506 r = free_and_strdup(&s->bus_name_owner, new_owner);
3507 if (r < 0) {
3508 log_unit_error_errno(u, r, "Unable to set new bus name owner %s: %m", new_owner);
3509 return;
3510 }
3511
05e343b7
LP
3512 if (s->type == SERVICE_DBUS) {
3513
3514 /* service_enter_running() will figure out what to
3515 * do */
3516 if (s->state == SERVICE_RUNNING)
f42806df 3517 service_enter_running(s, SERVICE_SUCCESS);
05e343b7
LP
3518 else if (s->state == SERVICE_START && new_owner)
3519 service_enter_start_post(s);
3520
3521 } else if (new_owner &&
3522 s->main_pid <= 0 &&
a6951a50
LP
3523 IN_SET(s->state,
3524 SERVICE_START,
3525 SERVICE_START_POST,
3526 SERVICE_RUNNING,
3527 SERVICE_RELOAD)) {
05e343b7 3528
4afd3348 3529 _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
718db961 3530 pid_t pid;
05e343b7 3531
718db961 3532 /* Try to acquire PID from bus service */
05e343b7 3533
056f95d0 3534 r = sd_bus_get_name_creds(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
5b12334d
LP
3535 if (r >= 0)
3536 r = sd_bus_creds_get_pid(creds, &pid);
718db961 3537 if (r >= 0) {
7c102d60 3538 log_unit_debug(u, "D-Bus name %s is now owned by process " PID_FMT, name, pid);
05e343b7 3539
718db961
LP
3540 service_set_main_pid(s, pid);
3541 unit_watch_pid(UNIT(s), pid);
3542 }
7400b9d2 3543 }
05e343b7
LP
3544}
3545
16115b0a 3546int service_set_socket_fd(Service *s, int fd, Socket *sock, bool selinux_context_net) {
79a98c60
LP
3547 _cleanup_free_ char *peer = NULL;
3548 int r;
57020a3a 3549
4f2d528d
LP
3550 assert(s);
3551 assert(fd >= 0);
3552
7f2fbbff
LP
3553 /* This is called by the socket code when instantiating a new service for a stream socket and the socket needs
3554 * to be configured. We take ownership of the passed fd on success. */
4f2d528d 3555
1124fe6f 3556 if (UNIT(s)->load_state != UNIT_LOADED)
4f2d528d
LP
3557 return -EINVAL;
3558
3559 if (s->socket_fd >= 0)
3560 return -EBUSY;
3561
3562 if (s->state != SERVICE_DEAD)
3563 return -EAGAIN;
3564
366b7db4 3565 if (getpeername_pretty(fd, true, &peer) >= 0) {
79a98c60
LP
3566
3567 if (UNIT(s)->description) {
3568 _cleanup_free_ char *a;
3569
605405c6 3570 a = strjoin(UNIT(s)->description, " (", peer, ")");
79a98c60
LP
3571 if (!a)
3572 return -ENOMEM;
3573
3574 r = unit_set_description(UNIT(s), a);
3575 } else
3576 r = unit_set_description(UNIT(s), peer);
3577
3578 if (r < 0)
3579 return r;
3580 }
3581
eef85c4a 3582 r = unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false, UNIT_DEPENDENCY_IMPLICIT);
7f2fbbff
LP
3583 if (r < 0)
3584 return r;
3585
4f2d528d 3586 s->socket_fd = fd;
16115b0a 3587 s->socket_fd_selinux_context_net = selinux_context_net;
6cf6bbc2 3588
57020a3a 3589 unit_ref_set(&s->accept_socket, UNIT(sock));
7f2fbbff 3590 return 0;
4f2d528d
LP
3591}
3592
fdf20a31 3593static void service_reset_failed(Unit *u) {
5632e374
LP
3594 Service *s = SERVICE(u);
3595
3596 assert(s);
3597
fdf20a31 3598 if (s->state == SERVICE_FAILED)
5632e374
LP
3599 service_set_state(s, SERVICE_DEAD);
3600
f42806df
LP
3601 s->result = SERVICE_SUCCESS;
3602 s->reload_result = SERVICE_SUCCESS;
7a0019d3
LP
3603 s->n_restarts = 0;
3604 s->flush_n_restarts = false;
5632e374
LP
3605}
3606
718db961 3607static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
8a0867d6 3608 Service *s = SERVICE(u);
41efeaec 3609
a6951a50
LP
3610 assert(s);
3611
814cc562 3612 return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
8a0867d6
LP
3613}
3614
291d565a
LP
3615static int service_main_pid(Unit *u) {
3616 Service *s = SERVICE(u);
3617
3618 assert(s);
3619
3620 return s->main_pid;
3621}
3622
3623static int service_control_pid(Unit *u) {
3624 Service *s = SERVICE(u);
3625
3626 assert(s);
3627
3628 return s->control_pid;
3629}
3630
94f04347 3631static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
525ee6f4
LP
3632 [SERVICE_RESTART_NO] = "no",
3633 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
50caaedb 3634 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
6cfe2fde 3635 [SERVICE_RESTART_ON_ABNORMAL] = "on-abnormal",
dc99a976 3636 [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
50caaedb 3637 [SERVICE_RESTART_ON_ABORT] = "on-abort",
6cfe2fde 3638 [SERVICE_RESTART_ALWAYS] = "always",
94f04347
LP
3639};
3640
3641DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3642
3643static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
94f04347 3644 [SERVICE_SIMPLE] = "simple",
0d624a78 3645 [SERVICE_FORKING] = "forking",
34e9ba66 3646 [SERVICE_ONESHOT] = "oneshot",
8c47c732 3647 [SERVICE_DBUS] = "dbus",
f2b68789
LP
3648 [SERVICE_NOTIFY] = "notify",
3649 [SERVICE_IDLE] = "idle"
94f04347
LP
3650};
3651
3652DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3653
e537352b 3654static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
94f04347
LP
3655 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
3656 [SERVICE_EXEC_START] = "ExecStart",
3657 [SERVICE_EXEC_START_POST] = "ExecStartPost",
3658 [SERVICE_EXEC_RELOAD] = "ExecReload",
3659 [SERVICE_EXEC_STOP] = "ExecStop",
3660 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3661};
3662
3663DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3664
308d72dc
LP
3665static const char* const notify_state_table[_NOTIFY_STATE_MAX] = {
3666 [NOTIFY_UNKNOWN] = "unknown",
3667 [NOTIFY_READY] = "ready",
3668 [NOTIFY_RELOADING] = "reloading",
3669 [NOTIFY_STOPPING] = "stopping",
3670};
3671
3672DEFINE_STRING_TABLE_LOOKUP(notify_state, NotifyState);
3673
f42806df
LP
3674static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3675 [SERVICE_SUCCESS] = "success",
3676 [SERVICE_FAILURE_RESOURCES] = "resources",
c35755fb 3677 [SERVICE_FAILURE_PROTOCOL] = "protocol",
f42806df
LP
3678 [SERVICE_FAILURE_TIMEOUT] = "timeout",
3679 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3680 [SERVICE_FAILURE_SIGNAL] = "signal",
bb242b7b 3681 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
8d1b002a 3682 [SERVICE_FAILURE_WATCHDOG] = "watchdog",
07299350 3683 [SERVICE_FAILURE_START_LIMIT_HIT] = "start-limit-hit",
f42806df
LP
3684};
3685
3686DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3687
87f0e418 3688const UnitVTable service_vtable = {
7d17cfbc 3689 .object_size = sizeof(Service),
718db961
LP
3690 .exec_context_offset = offsetof(Service, exec_context),
3691 .cgroup_context_offset = offsetof(Service, cgroup_context),
3692 .kill_context_offset = offsetof(Service, kill_context),
613b411c 3693 .exec_runtime_offset = offsetof(Service, exec_runtime),
29206d46 3694 .dynamic_creds_offset = offsetof(Service, dynamic_creds),
3ef63c31 3695
f975e971
LP
3696 .sections =
3697 "Unit\0"
3698 "Service\0"
3699 "Install\0",
4ad49000 3700 .private_section = "Service",
71645aca 3701
034c6ed7
LP
3702 .init = service_init,
3703 .done = service_done,
a16e1123 3704 .load = service_load,
a354329f 3705 .release_resources = service_release_resources,
a16e1123
LP
3706
3707 .coldplug = service_coldplug,
034c6ed7 3708
5cb5a6ff
LP
3709 .dump = service_dump,
3710
3711 .start = service_start,
3712 .stop = service_stop,
3713 .reload = service_reload,
3714
034c6ed7
LP
3715 .can_reload = service_can_reload,
3716
8a0867d6
LP
3717 .kill = service_kill,
3718
a16e1123
LP
3719 .serialize = service_serialize,
3720 .deserialize_item = service_deserialize_item,
3721
5cb5a6ff 3722 .active_state = service_active_state,
10a94420 3723 .sub_state_to_string = service_sub_state_to_string,
5cb5a6ff 3724
701cc384 3725 .check_gc = service_check_gc,
701cc384 3726
034c6ed7 3727 .sigchld_event = service_sigchld_event,
2c4104f0 3728
fdf20a31 3729 .reset_failed = service_reset_failed,
5632e374 3730
4ad49000 3731 .notify_cgroup_empty = service_notify_cgroup_empty_event,
8c47c732 3732 .notify_message = service_notify_message,
8e274523 3733
291d565a
LP
3734 .main_pid = service_main_pid,
3735 .control_pid = service_control_pid,
3736
05e343b7 3737 .bus_name_owner_change = service_bus_name_owner_change,
05e343b7 3738
718db961 3739 .bus_vtable = bus_service_vtable,
74c964d3
LP
3740 .bus_set_property = bus_service_set_property,
3741 .bus_commit_properties = bus_service_commit_properties,
4139c1b2 3742
68db7a3b 3743 .get_timeout = service_get_timeout,
718db961
LP
3744 .can_transient = true,
3745
c6918296
MS
3746 .status_message_formats = {
3747 .starting_stopping = {
3748 [0] = "Starting %s...",
3749 [1] = "Stopping %s...",
3750 },
3751 .finished_start_job = {
3752 [JOB_DONE] = "Started %s.",
3753 [JOB_FAILED] = "Failed to start %s.",
c6918296
MS
3754 },
3755 .finished_stop_job = {
3756 [JOB_DONE] = "Stopped %s.",
3757 [JOB_FAILED] = "Stopped (with error) %s.",
c6918296
MS
3758 },
3759 },
5cb5a6ff 3760};