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