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