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