]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/service.c
core: simplify fd collection code, return number of fds as return value
[thirdparty/systemd.git] / src / core / service.c
CommitLineData
d6c9574f 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
5cb5a6ff 2
a7334b09
LP
3/***
4 This file is part of systemd.
5
6 Copyright 2010 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
a7334b09
LP
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 16 Lesser General Public License for more details.
a7334b09 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
5cb5a6ff 22#include <errno.h>
034c6ed7 23#include <signal.h>
2c4104f0 24#include <unistd.h>
5cb5a6ff 25
574634bc 26#include "async.h"
4b939747 27#include "manager.h"
87f0e418 28#include "unit.h"
5cb5a6ff
LP
29#include "service.h"
30#include "load-fragment.h"
31#include "load-dropin.h"
034c6ed7 32#include "log.h"
2c4104f0 33#include "strv.h"
9e2f7c11 34#include "unit-name.h"
41f9172f 35#include "unit-printf.h"
4139c1b2 36#include "dbus-service.h"
514f4ef5 37#include "special.h"
9a57c629 38#include "exit-status.h"
f6a6225e 39#include "def.h"
9eb977db 40#include "path-util.h"
f6a6225e 41#include "util.h"
7f110ff9 42#include "utf8.h"
4d1a6904 43#include "env-util.h"
a5c32cff 44#include "fileio.h"
057171ef 45#include "bus-error.h"
718db961 46#include "bus-util.h"
e44da745 47#include "bus-kernel.h"
6482f626 48#include "formats-util.h"
0b452006 49#include "process-util.h"
24882e06 50#include "signal-util.h"
034c6ed7 51
acbb0225 52static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
87f0e418
LP
53 [SERVICE_DEAD] = UNIT_INACTIVE,
54 [SERVICE_START_PRE] = UNIT_ACTIVATING,
55 [SERVICE_START] = UNIT_ACTIVATING,
56 [SERVICE_START_POST] = UNIT_ACTIVATING,
57 [SERVICE_RUNNING] = UNIT_ACTIVE,
80876c20 58 [SERVICE_EXITED] = UNIT_ACTIVE,
032ff4af 59 [SERVICE_RELOAD] = UNIT_RELOADING,
87f0e418 60 [SERVICE_STOP] = UNIT_DEACTIVATING,
db2cb23b 61 [SERVICE_STOP_SIGABRT] = UNIT_DEACTIVATING,
87f0e418
LP
62 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
63 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
64 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
65 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
66 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
fdf20a31 67 [SERVICE_FAILED] = UNIT_FAILED,
6124958c 68 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
034c6ed7 69};
5cb5a6ff 70
e056b01d
LP
71/* For Type=idle we never want to delay any other jobs, hence we
72 * consider idle jobs active as soon as we start working on them */
73static const UnitActiveState state_translation_table_idle[_SERVICE_STATE_MAX] = {
74 [SERVICE_DEAD] = UNIT_INACTIVE,
75 [SERVICE_START_PRE] = UNIT_ACTIVE,
76 [SERVICE_START] = UNIT_ACTIVE,
77 [SERVICE_START_POST] = UNIT_ACTIVE,
78 [SERVICE_RUNNING] = UNIT_ACTIVE,
79 [SERVICE_EXITED] = UNIT_ACTIVE,
80 [SERVICE_RELOAD] = UNIT_RELOADING,
81 [SERVICE_STOP] = UNIT_DEACTIVATING,
db2cb23b 82 [SERVICE_STOP_SIGABRT] = UNIT_DEACTIVATING,
e056b01d
LP
83 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
84 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
85 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
86 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
87 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
88 [SERVICE_FAILED] = UNIT_FAILED,
89 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
90};
91
718db961
LP
92static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata);
93static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata);
94static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata);
95
842129f5 96static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
308d72dc 97static void service_enter_reload_by_notify(Service *s);
842129f5 98
a16e1123
LP
99static void service_init(Unit *u) {
100 Service *s = SERVICE(u);
101
102 assert(u);
ac155bb8 103 assert(u->load_state == UNIT_STUB);
a16e1123 104
1f19a534
OS
105 s->timeout_start_usec = u->manager->default_timeout_start_usec;
106 s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
107 s->restart_usec = u->manager->default_restart_usec;
0b86feac 108 s->type = _SERVICE_TYPE_INVALID;
a16e1123 109 s->socket_fd = -1;
e44da745 110 s->bus_endpoint_fd = -1;
3185a36b 111 s->guess_main_pid = true;
a16e1123 112
085afe36 113 RATELIMIT_INIT(s->start_limit, u->manager->default_start_limit_interval, u->manager->default_start_limit_burst);
a16e1123
LP
114
115 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
116}
117
5e94833f
LP
118static void service_unwatch_control_pid(Service *s) {
119 assert(s);
120
121 if (s->control_pid <= 0)
122 return;
123
124 unit_unwatch_pid(UNIT(s), s->control_pid);
125 s->control_pid = 0;
126}
127
128static void service_unwatch_main_pid(Service *s) {
129 assert(s);
130
131 if (s->main_pid <= 0)
132 return;
133
134 unit_unwatch_pid(UNIT(s), s->main_pid);
135 s->main_pid = 0;
136}
137
3e52541e
MS
138static void service_unwatch_pid_file(Service *s) {
139 if (!s->pid_file_pathspec)
140 return;
141
f2341e0a 142 log_unit_debug(UNIT(s), "Stopping watch for PID file %s", s->pid_file_pathspec->path);
718db961 143 path_spec_unwatch(s->pid_file_pathspec);
3e52541e 144 path_spec_done(s->pid_file_pathspec);
a1e58e8e 145 s->pid_file_pathspec = mfree(s->pid_file_pathspec);
3e52541e
MS
146}
147
5925dd3c 148static int service_set_main_pid(Service *s, pid_t pid) {
e55224ca
LP
149 pid_t ppid;
150
5925dd3c
LP
151 assert(s);
152
153 if (pid <= 1)
154 return -EINVAL;
155
156 if (pid == getpid())
157 return -EINVAL;
158
7400b9d2
LP
159 if (s->main_pid == pid && s->main_pid_known)
160 return 0;
161
162 if (s->main_pid != pid) {
163 service_unwatch_main_pid(s);
164 exec_status_start(&s->main_exec_status, pid);
165 }
41efeaec 166
6dfa5494
LP
167 s->main_pid = pid;
168 s->main_pid_known = true;
169
170 if (get_parent_of_pid(pid, &ppid) >= 0 && ppid != getpid()) {
f2341e0a 171 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
172 s->main_pid_alien = true;
173 } else
174 s->main_pid_alien = false;
5925dd3c
LP
175
176 return 0;
177}
178
4f2d528d
LP
179static void service_close_socket_fd(Service *s) {
180 assert(s);
181
574634bc 182 s->socket_fd = asynchronous_close(s->socket_fd);
4f2d528d
LP
183}
184
6cf6bbc2
LP
185static void service_connection_unref(Service *s) {
186 assert(s);
187
9444b1f2 188 if (!UNIT_ISSET(s->accept_socket))
6cf6bbc2
LP
189 return;
190
57020a3a
LP
191 socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
192 unit_ref_unset(&s->accept_socket);
6cf6bbc2
LP
193}
194
a6927d7f
MO
195static void service_stop_watchdog(Service *s) {
196 assert(s);
197
718db961 198 s->watchdog_event_source = sd_event_source_unref(s->watchdog_event_source);
842129f5 199 s->watchdog_timestamp = DUAL_TIMESTAMP_NULL;
a6927d7f
MO
200}
201
842129f5 202static void service_start_watchdog(Service *s) {
bb242b7b
MO
203 int r;
204
205 assert(s);
206
842129f5 207 if (s->watchdog_usec <= 0)
bb242b7b
MO
208 return;
209
718db961
LP
210 if (s->watchdog_event_source) {
211 r = sd_event_source_set_time(s->watchdog_event_source, s->watchdog_timestamp.monotonic + s->watchdog_usec);
212 if (r < 0) {
f2341e0a 213 log_unit_warning_errno(UNIT(s), r, "Failed to reset watchdog timer: %m");
718db961
LP
214 return;
215 }
216
842129f5 217 r = sd_event_source_set_enabled(s->watchdog_event_source, SD_EVENT_ONESHOT);
c4ef3317 218 } else {
6a0f1f6d
LP
219 r = sd_event_add_time(
220 UNIT(s)->manager->event,
221 &s->watchdog_event_source,
222 CLOCK_MONOTONIC,
223 s->watchdog_timestamp.monotonic + s->watchdog_usec, 0,
224 service_dispatch_watchdog, s);
c4ef3317 225 if (r < 0) {
f2341e0a 226 log_unit_warning_errno(UNIT(s), r, "Failed to add watchdog timer: %m");
c4ef3317
LP
227 return;
228 }
229
7dfbe2e3
TG
230 (void) sd_event_source_set_description(s->watchdog_event_source, "service-watchdog");
231
c4ef3317
LP
232 /* Let's process everything else which might be a sign
233 * of living before we consider a service died. */
234 r = sd_event_source_set_priority(s->watchdog_event_source, SD_EVENT_PRIORITY_IDLE);
235 }
718db961 236
bb242b7b 237 if (r < 0)
f2341e0a 238 log_unit_warning_errno(UNIT(s), r, "Failed to install watchdog timer: %m");
bb242b7b
MO
239}
240
a6927d7f
MO
241static void service_reset_watchdog(Service *s) {
242 assert(s);
243
244 dual_timestamp_get(&s->watchdog_timestamp);
842129f5 245 service_start_watchdog(s);
a6927d7f
MO
246}
247
a354329f
LP
248static void service_fd_store_unlink(ServiceFDStore *fs) {
249
250 if (!fs)
251 return;
252
253 if (fs->service) {
254 assert(fs->service->n_fd_store > 0);
255 LIST_REMOVE(fd_store, fs->service->fd_store, fs);
256 fs->service->n_fd_store--;
257 }
258
259 if (fs->event_source) {
260 sd_event_source_set_enabled(fs->event_source, SD_EVENT_OFF);
261 sd_event_source_unref(fs->event_source);
262 }
263
264 safe_close(fs->fd);
265 free(fs);
266}
267
268static void service_release_resources(Unit *u) {
269 Service *s = SERVICE(u);
270
271 assert(s);
272
273 if (!s->fd_store)
274 return;
275
f2341e0a 276 log_unit_debug(u, "Releasing all resources.");
a354329f
LP
277
278 while (s->fd_store)
279 service_fd_store_unlink(s->fd_store);
280
281 assert(s->n_fd_store == 0);
282}
283
87f0e418
LP
284static void service_done(Unit *u) {
285 Service *s = SERVICE(u);
44d8db9e
LP
286
287 assert(s);
288
a1e58e8e
LP
289 s->pid_file = mfree(s->pid_file);
290 s->status_text = mfree(s->status_text);
291 s->reboot_arg = mfree(s->reboot_arg);
efe6e7d3 292
613b411c 293 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
e537352b 294 exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
44d8db9e 295 s->control_command = NULL;
867b3b7d 296 s->main_command = NULL;
44d8db9e 297
37520c1b
LP
298 exit_status_set_free(&s->restart_prevent_status);
299 exit_status_set_free(&s->restart_force_status);
300 exit_status_set_free(&s->success_status);
96342de6 301
44d8db9e
LP
302 /* This will leak a process, but at least no memory or any of
303 * our resources */
5e94833f
LP
304 service_unwatch_main_pid(s);
305 service_unwatch_control_pid(s);
3e52541e 306 service_unwatch_pid_file(s);
44d8db9e 307
05e343b7 308 if (s->bus_name) {
ac155bb8 309 unit_unwatch_bus_name(u, s->bus_name);
a1e58e8e 310 s->bus_name = mfree(s->bus_name);
05e343b7
LP
311 }
312
e44da745 313 s->bus_endpoint_fd = safe_close(s->bus_endpoint_fd);
4f2d528d 314 service_close_socket_fd(s);
6cf6bbc2 315 service_connection_unref(s);
4f2d528d 316
57020a3a 317 unit_ref_unset(&s->accept_socket);
f976f3f6 318
bb242b7b
MO
319 service_stop_watchdog(s);
320
718db961 321 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
a354329f
LP
322
323 service_release_resources(u);
718db961
LP
324}
325
2339fc93
LP
326static int on_fd_store_io(sd_event_source *e, int fd, uint32_t revents, void *userdata) {
327 ServiceFDStore *fs = userdata;
328
329 assert(e);
330 assert(fs);
331
332 /* If we get either EPOLLHUP or EPOLLERR, it's time to remove this entry from the fd store */
333 service_fd_store_unlink(fs);
334 return 0;
335}
336
337static int service_add_fd_store(Service *s, int fd) {
338 ServiceFDStore *fs;
339 int r;
340
341 assert(s);
342 assert(fd >= 0);
343
344 if (s->n_fd_store >= s->n_fd_store_max)
345 return 0;
346
347 LIST_FOREACH(fd_store, fs, s->fd_store) {
348 r = same_fd(fs->fd, fd);
349 if (r < 0)
350 return r;
351 if (r > 0) {
352 /* Already included */
353 safe_close(fd);
354 return 1;
355 }
356 }
357
358 fs = new0(ServiceFDStore, 1);
359 if (!fs)
360 return -ENOMEM;
361
362 fs->fd = fd;
363 fs->service = s;
364
365 r = sd_event_add_io(UNIT(s)->manager->event, &fs->event_source, fd, 0, on_fd_store_io, fs);
366 if (r < 0) {
367 free(fs);
368 return r;
369 }
370
7dfbe2e3
TG
371 (void) sd_event_source_set_description(fs->event_source, "service-fd-store");
372
2339fc93
LP
373 LIST_PREPEND(fd_store, s->fd_store, fs);
374 s->n_fd_store++;
375
376 return 1;
377}
378
379static int service_add_fd_store_set(Service *s, FDSet *fds) {
380 int r;
381
382 assert(s);
383
384 if (fdset_size(fds) <= 0)
385 return 0;
386
387 while (s->n_fd_store < s->n_fd_store_max) {
388 _cleanup_close_ int fd = -1;
389
390 fd = fdset_steal_first(fds);
391 if (fd < 0)
392 break;
393
394 r = service_add_fd_store(s, fd);
395 if (r < 0)
f2341e0a 396 return log_unit_error_errno(UNIT(s), r, "Couldn't add fd to fd store: %m");
2339fc93 397 if (r > 0) {
f2341e0a 398 log_unit_debug(UNIT(s), "Added fd to fd store.");
2339fc93
LP
399 fd = -1;
400 }
401 }
402
403 if (fdset_size(fds) > 0)
f2341e0a 404 log_unit_warning(UNIT(s), "Tried to store more fds than FDStoreMax=%u allows, closing remaining.", s->n_fd_store_max);
2339fc93
LP
405
406 return 0;
407}
408
718db961
LP
409static int service_arm_timer(Service *s, usec_t usec) {
410 int r;
411
412 assert(s);
413
718db961
LP
414 if (s->timer_event_source) {
415 r = sd_event_source_set_time(s->timer_event_source, now(CLOCK_MONOTONIC) + usec);
416 if (r < 0)
417 return r;
418
419 return sd_event_source_set_enabled(s->timer_event_source, SD_EVENT_ONESHOT);
420 }
421
7dfbe2e3 422 r = sd_event_add_time(
6a0f1f6d
LP
423 UNIT(s)->manager->event,
424 &s->timer_event_source,
425 CLOCK_MONOTONIC,
426 now(CLOCK_MONOTONIC) + usec, 0,
427 service_dispatch_timer, s);
7dfbe2e3
TG
428 if (r < 0)
429 return r;
430
431 (void) sd_event_source_set_description(s->timer_event_source, "service-timer");
432
433 return 0;
44d8db9e
LP
434}
435
243b1432
LP
436static int service_verify(Service *s) {
437 assert(s);
438
1124fe6f 439 if (UNIT(s)->load_state != UNIT_LOADED)
243b1432
LP
440 return 0;
441
96fb8242 442 if (!s->exec_command[SERVICE_EXEC_START] && !s->exec_command[SERVICE_EXEC_STOP]) {
f2341e0a 443 log_unit_error(UNIT(s), "Service lacks both ExecStart= and ExecStop= setting. Refusing.");
243b1432
LP
444 return -EINVAL;
445 }
446
96fb8242 447 if (s->type != SERVICE_ONESHOT && !s->exec_command[SERVICE_EXEC_START]) {
f2341e0a 448 log_unit_error(UNIT(s), "Service has no ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
96fb8242
LP
449 return -EINVAL;
450 }
451
452 if (!s->remain_after_exit && !s->exec_command[SERVICE_EXEC_START]) {
f2341e0a 453 log_unit_error(UNIT(s), "Service has no ExecStart= setting, which is only allowed for RemainAfterExit=yes services. Refusing.");
96fb8242
LP
454 return -EINVAL;
455 }
456
457 if (s->type != SERVICE_ONESHOT && s->exec_command[SERVICE_EXEC_START]->command_next) {
f2341e0a 458 log_unit_error(UNIT(s), "Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
6cf6bbc2
LP
459 return -EINVAL;
460 }
461
b0693d30 462 if (s->type == SERVICE_ONESHOT && s->restart != SERVICE_RESTART_NO) {
f2341e0a 463 log_unit_error(UNIT(s), "Service has Restart= setting other than no, which isn't allowed for Type=oneshot services. Refusing.");
37520c1b
LP
464 return -EINVAL;
465 }
466
55ebf98c 467 if (s->type == SERVICE_ONESHOT && !exit_status_set_is_empty(&s->restart_force_status)) {
f2341e0a 468 log_unit_error(UNIT(s), "Service has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.");
b0693d30
MW
469 return -EINVAL;
470 }
471
05e343b7 472 if (s->type == SERVICE_DBUS && !s->bus_name) {
f2341e0a 473 log_unit_error(UNIT(s), "Service is of type D-Bus but no D-Bus service name has been specified. Refusing.");
4d0e5dbd
LP
474 return -EINVAL;
475 }
476
7e2668c6 477 if (s->bus_name && s->type != SERVICE_DBUS)
f2341e0a 478 log_unit_warning(UNIT(s), "Service has a D-Bus service name specified, but is not of type dbus. Ignoring.");
7e2668c6 479
ebc2259d 480 if (s->exec_context.pam_name && !(s->kill_context.kill_mode == KILL_CONTROL_GROUP || s->kill_context.kill_mode == KILL_MIXED)) {
f2341e0a 481 log_unit_error(UNIT(s), "Service has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.");
05e343b7
LP
482 return -EINVAL;
483 }
484
6b7e5923
PS
485 if (s->usb_function_descriptors && !s->usb_function_strings)
486 log_unit_warning(UNIT(s), "Service has USBFunctionDescriptors= setting, but no USBFunctionStrings=. Ignoring.");
487
488 if (!s->usb_function_descriptors && s->usb_function_strings)
489 log_unit_warning(UNIT(s), "Service has USBFunctionStrings= setting, but no USBFunctionDescriptors=. Ignoring.");
490
243b1432
LP
491 return 0;
492}
493
a40eb732
LP
494static int service_add_default_dependencies(Service *s) {
495 int r;
496
497 assert(s);
498
499 /* Add a number of automatic dependencies useful for the
500 * majority of services. */
501
502 /* First, pull in base system */
8bb2d17d 503 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_BASIC_TARGET, NULL, true);
fccd44ec
KS
504 if (r < 0)
505 return r;
a40eb732
LP
506
507 /* Second, activate normal shutdown */
8545f7ce 508 return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
a40eb732
LP
509}
510
4dfc092a
LP
511static void service_fix_output(Service *s) {
512 assert(s);
513
514 /* If nothing has been explicitly configured, patch default
515 * output in. If input is socket/tty we avoid this however,
516 * since in that case we want output to default to the same
517 * place as we read input from. */
518
519 if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
520 s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
521 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 522 s->exec_context.std_error = UNIT(s)->manager->default_std_error;
4dfc092a
LP
523
524 if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
525 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 526 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
4dfc092a
LP
527}
528
8545f7ce
LP
529static int service_add_extras(Service *s) {
530 int r;
531
532 assert(s);
533
534 if (s->type == _SERVICE_TYPE_INVALID) {
535 /* Figure out a type automatically */
536 if (s->bus_name)
537 s->type = SERVICE_DBUS;
538 else if (s->exec_command[SERVICE_EXEC_START])
539 s->type = SERVICE_SIMPLE;
540 else
541 s->type = SERVICE_ONESHOT;
542 }
543
544 /* Oneshot services have disabled start timeout by default */
545 if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
546 s->timeout_start_usec = 0;
547
548 service_fix_output(s);
549
550 r = unit_patch_contexts(UNIT(s));
551 if (r < 0)
552 return r;
553
554 r = unit_add_exec_dependencies(UNIT(s), &s->exec_context);
555 if (r < 0)
556 return r;
557
d79200e2 558 r = unit_set_default_slice(UNIT(s));
8545f7ce
LP
559 if (r < 0)
560 return r;
561
562 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
563 s->notify_access = NOTIFY_MAIN;
564
565 if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
566 s->notify_access = NOTIFY_MAIN;
567
568 if (s->bus_name) {
569 const char *n;
570
6962fd3b
MB
571 n = strjoina(s->bus_name, ".busname");
572 r = unit_add_dependency_by_name(UNIT(s), UNIT_AFTER, n, NULL, true);
8545f7ce
LP
573 if (r < 0)
574 return r;
575
6962fd3b 576 r = unit_watch_bus_name(UNIT(s), s->bus_name);
fc1ba5d1
LP
577 if (r == -EEXIST)
578 return log_unit_error_errno(UNIT(s), r, "Two services allocated for the same bus name %s, refusing operation.", s->bus_name);
8545f7ce 579 if (r < 0)
fc1ba5d1 580 return log_unit_error_errno(UNIT(s), r, "Cannot watch bus name %s: %m", s->bus_name);
8545f7ce
LP
581 }
582
583 if (UNIT(s)->default_dependencies) {
584 r = service_add_default_dependencies(s);
585 if (r < 0)
586 return r;
587 }
588
589 return 0;
590}
591
e537352b 592static int service_load(Unit *u) {
e537352b 593 Service *s = SERVICE(u);
8bb2d17d 594 int r;
e537352b
LP
595
596 assert(s);
1e2e8133 597
5cb5a6ff 598 /* Load a .service file */
c2756a68
LP
599 r = unit_load_fragment(u);
600 if (r < 0)
5cb5a6ff
LP
601 return r;
602
23a177ef 603 /* Still nothing found? Then let's give up */
ac155bb8 604 if (u->load_state == UNIT_STUB)
23a177ef 605 return -ENOENT;
034c6ed7 606
23a177ef 607 /* This is a new unit? Then let's add in some extras */
ac155bb8 608 if (u->load_state == UNIT_LOADED) {
c2756a68
LP
609
610 /* We were able to load something, then let's add in
611 * the dropin directories. */
612 r = unit_load_dropin(u);
613 if (r < 0)
614 return r;
615
8545f7ce
LP
616 /* This is a new unit? Then let's add in some
617 * extras */
618 r = service_add_extras(s);
598459ce
LP
619 if (r < 0)
620 return r;
8e274523
LP
621 }
622
243b1432 623 return service_verify(s);
034c6ed7
LP
624}
625
87f0e418 626static void service_dump(Unit *u, FILE *f, const char *prefix) {
5cb5a6ff 627 ServiceExecCommand c;
87f0e418 628 Service *s = SERVICE(u);
47be870b 629 const char *prefix2;
5cb5a6ff
LP
630
631 assert(s);
632
4c940960 633 prefix = strempty(prefix);
63c372cb 634 prefix2 = strjoina(prefix, "\t");
44d8db9e 635
5cb5a6ff 636 fprintf(f,
81a2b7ce 637 "%sService State: %s\n"
f42806df
LP
638 "%sResult: %s\n"
639 "%sReload Result: %s\n"
81a2b7ce 640 "%sPermissionsStartOnly: %s\n"
8e274523 641 "%sRootDirectoryStartOnly: %s\n"
02ee865a 642 "%sRemainAfterExit: %s\n"
3185a36b 643 "%sGuessMainPID: %s\n"
c952c6ec 644 "%sType: %s\n"
2cf3143a 645 "%sRestart: %s\n"
308d72dc
LP
646 "%sNotifyAccess: %s\n"
647 "%sNotifyState: %s\n",
81a2b7ce 648 prefix, service_state_to_string(s->state),
f42806df
LP
649 prefix, service_result_to_string(s->result),
650 prefix, service_result_to_string(s->reload_result),
81a2b7ce 651 prefix, yes_no(s->permissions_start_only),
8e274523 652 prefix, yes_no(s->root_directory_start_only),
02ee865a 653 prefix, yes_no(s->remain_after_exit),
3185a36b 654 prefix, yes_no(s->guess_main_pid),
c952c6ec 655 prefix, service_type_to_string(s->type),
2cf3143a 656 prefix, service_restart_to_string(s->restart),
308d72dc
LP
657 prefix, notify_access_to_string(s->notify_access),
658 prefix, notify_state_to_string(s->notify_state));
5cb5a6ff 659
70123e68
LP
660 if (s->control_pid > 0)
661 fprintf(f,
ccd06097
ZJS
662 "%sControl PID: "PID_FMT"\n",
663 prefix, s->control_pid);
70123e68
LP
664
665 if (s->main_pid > 0)
666 fprintf(f,
ccd06097 667 "%sMain PID: "PID_FMT"\n"
6dfa5494
LP
668 "%sMain PID Known: %s\n"
669 "%sMain PID Alien: %s\n",
ccd06097 670 prefix, s->main_pid,
6dfa5494
LP
671 prefix, yes_no(s->main_pid_known),
672 prefix, yes_no(s->main_pid_alien));
70123e68 673
034c6ed7
LP
674 if (s->pid_file)
675 fprintf(f,
676 "%sPIDFile: %s\n",
677 prefix, s->pid_file);
678
05e343b7
LP
679 if (s->bus_name)
680 fprintf(f,
681 "%sBusName: %s\n"
682 "%sBus Name Good: %s\n",
683 prefix, s->bus_name,
684 prefix, yes_no(s->bus_name_good));
685
4819ff03 686 kill_context_dump(&s->kill_context, f, prefix);
5cb5a6ff
LP
687 exec_context_dump(&s->exec_context, f, prefix);
688
e537352b 689 for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
5cb5a6ff 690
44d8db9e
LP
691 if (!s->exec_command[c])
692 continue;
693
40d50879 694 fprintf(f, "%s-> %s:\n",
94f04347 695 prefix, service_exec_command_to_string(c));
44d8db9e
LP
696
697 exec_command_dump_list(s->exec_command[c], f, prefix2);
5cb5a6ff 698 }
44d8db9e 699
8c47c732
LP
700 if (s->status_text)
701 fprintf(f, "%sStatus Text: %s\n",
702 prefix, s->status_text);
a354329f 703
ece174c5 704 if (s->n_fd_store_max > 0)
a354329f
LP
705 fprintf(f,
706 "%sFile Descriptor Store Max: %u\n"
707 "%sFile Descriptor Store Current: %u\n",
708 prefix, s->n_fd_store_max,
709 prefix, s->n_fd_store);
5cb5a6ff
LP
710}
711
c5419d42 712static int service_load_pid_file(Service *s, bool may_warn) {
7fd1b19b 713 _cleanup_free_ char *k = NULL;
034c6ed7 714 int r;
5925dd3c 715 pid_t pid;
034c6ed7
LP
716
717 assert(s);
718
034c6ed7 719 if (!s->pid_file)
13230d5d 720 return -ENOENT;
034c6ed7 721
117dcc57
ZJS
722 r = read_one_line_file(s->pid_file, &k);
723 if (r < 0) {
c5419d42 724 if (may_warn)
f2341e0a 725 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 726 return r;
5375410b 727 }
034c6ed7 728
5925dd3c 729 r = parse_pid(k, &pid);
bc41f93e
ZJS
730 if (r < 0) {
731 if (may_warn)
f2341e0a 732 log_unit_info_errno(UNIT(s), r, "Failed to read PID from file %s: %m", s->pid_file);
5925dd3c 733 return r;
bc41f93e 734 }
406eaf93 735
9f5650ae 736 if (!pid_is_alive(pid)) {
c5419d42 737 if (may_warn)
f2341e0a 738 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
739 return -ESRCH;
740 }
741
db01f8b3
MS
742 if (s->main_pid_known) {
743 if (pid == s->main_pid)
744 return 0;
745
f2341e0a 746 log_unit_debug(UNIT(s), "Main PID changing: "PID_FMT" -> "PID_FMT, s->main_pid, pid);
8bb2d17d 747
db01f8b3
MS
748 service_unwatch_main_pid(s);
749 s->main_pid_known = false;
3a111838 750 } else
f2341e0a 751 log_unit_debug(UNIT(s), "Main PID loaded: "PID_FMT, pid);
db01f8b3 752
117dcc57
ZJS
753 r = service_set_main_pid(s, pid);
754 if (r < 0)
16f6025e
LP
755 return r;
756
117dcc57 757 r = unit_watch_pid(UNIT(s), pid);
bc41f93e 758 if (r < 0) {
5925dd3c 759 /* FIXME: we need to do something here */
f2341e0a 760 log_unit_warning_errno(UNIT(s), r, "Failed to watch PID "PID_FMT" for service: %m", pid);
5925dd3c 761 return r;
bc41f93e 762 }
034c6ed7
LP
763
764 return 0;
765}
766
4fbf50b3 767static int service_search_main_pid(Service *s) {
efdb0237 768 pid_t pid = 0;
4fbf50b3
LP
769 int r;
770
771 assert(s);
772
3185a36b
LP
773 /* If we know it anyway, don't ever fallback to unreliable
774 * heuristics */
4fbf50b3
LP
775 if (s->main_pid_known)
776 return 0;
777
3185a36b
LP
778 if (!s->guess_main_pid)
779 return 0;
780
4fbf50b3
LP
781 assert(s->main_pid <= 0);
782
efdb0237
LP
783 r = unit_search_main_pid(UNIT(s), &pid);
784 if (r < 0)
785 return r;
4fbf50b3 786
f2341e0a 787 log_unit_debug(UNIT(s), "Main PID guessed: "PID_FMT, pid);
117dcc57
ZJS
788 r = service_set_main_pid(s, pid);
789 if (r < 0)
4fbf50b3
LP
790 return r;
791
117dcc57 792 r = unit_watch_pid(UNIT(s), pid);
8bb2d17d 793 if (r < 0) {
4fbf50b3 794 /* FIXME: we need to do something here */
f2341e0a 795 log_unit_warning_errno(UNIT(s), r, "Failed to watch PID "PID_FMT" from: %m", pid);
8bb2d17d
LP
796 return r;
797 }
798
799 return 0;
4fbf50b3
LP
800}
801
034c6ed7
LP
802static void service_set_state(Service *s, ServiceState state) {
803 ServiceState old_state;
e056b01d 804 const UnitActiveState *table;
842129f5 805
5cb5a6ff
LP
806 assert(s);
807
e056b01d
LP
808 table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
809
034c6ed7 810 old_state = s->state;
5cb5a6ff 811 s->state = state;
034c6ed7 812
3a111838
MS
813 service_unwatch_pid_file(s);
814
842129f5
LP
815 if (!IN_SET(state,
816 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
817 SERVICE_RELOAD,
57614eb1 818 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
842129f5
LP
819 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
820 SERVICE_AUTO_RESTART))
718db961 821 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 822
842129f5
LP
823 if (!IN_SET(state,
824 SERVICE_START, SERVICE_START_POST,
825 SERVICE_RUNNING, SERVICE_RELOAD,
57614eb1 826 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
bf108e55 827 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 828 service_unwatch_main_pid(s);
867b3b7d
LP
829 s->main_command = NULL;
830 }
034c6ed7 831
842129f5
LP
832 if (!IN_SET(state,
833 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
834 SERVICE_RELOAD,
57614eb1 835 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
842129f5 836 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 837 service_unwatch_control_pid(s);
034c6ed7 838 s->control_command = NULL;
a16e1123 839 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
e537352b 840 }
034c6ed7 841
a911bb9a
LP
842 if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
843 unit_unwatch_all_pids(UNIT(s));
844
842129f5
LP
845 if (!IN_SET(state,
846 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
847 SERVICE_RUNNING, SERVICE_RELOAD,
57614eb1
LP
848 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
849 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
1124fe6f 850 !(state == SERVICE_DEAD && UNIT(s)->job)) {
4f2d528d 851 service_close_socket_fd(s);
6cf6bbc2
LP
852 service_connection_unref(s);
853 }
4f2d528d 854
7596e9e1 855 if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
a6927d7f
MO
856 service_stop_watchdog(s);
857
f6023656
LP
858 /* For the inactive states unit_notify() will trim the cgroup,
859 * but for exit we have to do that ourselves... */
1124fe6f 860 if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
efdb0237 861 unit_prune_cgroup(UNIT(s));
f6023656 862
9cd86184
OB
863 /* For remain_after_exit services, let's see if we can "release" the
864 * hold on the console, since unit_notify() only does that in case of
865 * change of state */
f49650ce
LP
866 if (state == SERVICE_EXITED &&
867 s->remain_after_exit &&
9cd86184 868 UNIT(s)->manager->n_on_console > 0) {
f49650ce
LP
869
870 ExecContext *ec;
871
872 ec = unit_get_exec_context(UNIT(s));
9cd86184
OB
873 if (ec && exec_context_may_touch_console(ec)) {
874 Manager *m = UNIT(s)->manager;
875
876 m->n_on_console --;
877 if (m->n_on_console == 0)
878 /* unset no_console_output flag, since the console is free */
879 m->no_console_output = false;
880 }
881 }
882
e537352b 883 if (old_state != state)
f2341e0a 884 log_unit_debug(UNIT(s), "Changed %s -> %s", service_state_to_string(old_state), service_state_to_string(state));
acbb0225 885
e056b01d 886 unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
f42806df 887 s->reload_result = SERVICE_SUCCESS;
034c6ed7
LP
888}
889
be847e82 890static int service_coldplug(Unit *u) {
a16e1123
LP
891 Service *s = SERVICE(u);
892 int r;
893
894 assert(s);
895 assert(s->state == SERVICE_DEAD);
896
897 if (s->deserialized_state != s->state) {
898
bf108e55
LP
899 if (IN_SET(s->deserialized_state,
900 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
901 SERVICE_RELOAD,
57614eb1 902 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
bf108e55 903 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
92c1622e
LP
904
905 usec_t k;
6c12b52e 906
bf108e55 907 k = IN_SET(s->deserialized_state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec;
e558336f 908
92c1622e
LP
909 /* For the start/stop timeouts 0 means off */
910 if (k > 0) {
911 r = service_arm_timer(s, k);
36697dc0 912 if (r < 0)
e558336f
LP
913 return r;
914 }
915 }
a16e1123 916
92c1622e
LP
917 if (s->deserialized_state == SERVICE_AUTO_RESTART) {
918
919 /* The restart timeouts 0 means immediately */
920 r = service_arm_timer(s, s->restart_usec);
921 if (r < 0)
922 return r;
923 }
924
9f5650ae 925 if (pid_is_unwaited(s->main_pid) &&
bf108e55
LP
926 ((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
927 IN_SET(s->deserialized_state,
928 SERVICE_START, SERVICE_START_POST,
929 SERVICE_RUNNING, SERVICE_RELOAD,
57614eb1 930 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
bf108e55
LP
931 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
932 r = unit_watch_pid(UNIT(s), s->main_pid);
933 if (r < 0)
934 return r;
935 }
a16e1123 936
9f5650ae 937 if (pid_is_unwaited(s->control_pid) &&
bf108e55
LP
938 IN_SET(s->deserialized_state,
939 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
940 SERVICE_RELOAD,
57614eb1 941 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
bf108e55
LP
942 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
943 r = unit_watch_pid(UNIT(s), s->control_pid);
944 if (r < 0)
945 return r;
946 }
a16e1123 947
a911bb9a
LP
948 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
949 unit_watch_all_pids(UNIT(s));
950
842129f5
LP
951 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
952 service_start_watchdog(s);
bb242b7b 953
a16e1123
LP
954 service_set_state(s, s->deserialized_state);
955 }
92c1622e 956
a16e1123
LP
957 return 0;
958}
959
79c7626d 960static int service_collect_fds(Service *s, int **fds) {
a354329f 961 _cleanup_free_ int *rfds = NULL;
79c7626d 962 int rn_fds = 0;
44d8db9e 963 Iterator i;
57020a3a 964 Unit *u;
44d8db9e
LP
965
966 assert(s);
967 assert(fds);
44d8db9e 968
6cf6bbc2 969 if (s->socket_fd >= 0)
79c7626d 970 return -EINVAL;
6cf6bbc2 971
1124fe6f 972 SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
79c7626d 973 _cleanup_free_ int *cfds = NULL;
57020a3a 974 Socket *sock;
79c7626d 975 int cn_fds;
57020a3a 976
ac155bb8 977 if (u->type != UNIT_SOCKET)
57020a3a
LP
978 continue;
979
980 sock = SOCKET(u);
44d8db9e 981
79c7626d
LP
982 cn_fds = socket_collect_fds(sock, &cfds);
983 if (cn_fds < 0)
984 return cn_fds;
44d8db9e 985
79c7626d 986 if (cn_fds <= 0)
44d8db9e
LP
987 continue;
988
989 if (!rfds) {
990 rfds = cfds;
991 rn_fds = cn_fds;
79c7626d
LP
992
993 cfds = NULL;
44d8db9e
LP
994 } else {
995 int *t;
996
a354329f 997 t = realloc(rfds, (rn_fds + cn_fds) * sizeof(int));
79c7626d 998 if (!t)
a354329f 999 return -ENOMEM;
44d8db9e 1000
a354329f 1001 memcpy(t + rn_fds, cfds, cn_fds * sizeof(int));
79c7626d 1002
a354329f
LP
1003 rfds = t;
1004 rn_fds += cn_fds;
44d8db9e
LP
1005 }
1006 }
1007
a354329f
LP
1008 if (s->n_fd_store > 0) {
1009 ServiceFDStore *fs;
1010 int *t;
1011
1012 t = realloc(rfds, (rn_fds + s->n_fd_store) * sizeof(int));
1013 if (!t)
1014 return -ENOMEM;
1015
1016 rfds = t;
1017 LIST_FOREACH(fd_store, fs, s->fd_store)
1018 rfds[rn_fds++] = fs->fd;
1019 }
1020
44d8db9e 1021 *fds = rfds;
a354329f 1022 rfds = NULL;
79c7626d
LP
1023
1024 return rn_fds;
44d8db9e
LP
1025}
1026
81a2b7ce
LP
1027static int service_spawn(
1028 Service *s,
1029 ExecCommand *c,
21b2ce39 1030 usec_t timeout,
81a2b7ce
LP
1031 bool pass_fds,
1032 bool apply_permissions,
1033 bool apply_chroot,
1e3ad081 1034 bool apply_tty_stdin,
ecedd90f 1035 bool is_control,
81a2b7ce
LP
1036 pid_t *_pid) {
1037
034c6ed7
LP
1038 pid_t pid;
1039 int r;
117dcc57 1040 int *fds = NULL;
7fd1b19b 1041 _cleanup_free_ int *fdsbuf = NULL;
2105e76a 1042 unsigned n_fds = 0, n_env = 0;
e44da745 1043 _cleanup_free_ char *bus_endpoint_path = NULL;
7fd1b19b 1044 _cleanup_strv_free_ char
117dcc57 1045 **argv = NULL, **final_env = NULL, **our_env = NULL;
4ad49000 1046 const char *path;
9fa95f85 1047 ExecParameters exec_params = {
6f856a09
LP
1048 .apply_permissions = apply_permissions,
1049 .apply_chroot = apply_chroot,
1050 .apply_tty_stdin = apply_tty_stdin,
1051 .bus_endpoint_fd = -1,
16115b0a 1052 .selinux_context_net = s->socket_fd_selinux_context_net
9fa95f85 1053 };
034c6ed7
LP
1054
1055 assert(s);
1056 assert(c);
1057 assert(_pid);
1058
5ad096b3
LP
1059 (void) unit_realize_cgroup(UNIT(s));
1060 if (s->reset_cpu_usage) {
1061 (void) unit_reset_cpu_usage(UNIT(s));
1062 s->reset_cpu_usage = false;
1063 }
4ad49000 1064
613b411c
LP
1065 r = unit_setup_exec_runtime(UNIT(s));
1066 if (r < 0)
1067 goto fail;
1068
6cf6bbc2
LP
1069 if (pass_fds ||
1070 s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1071 s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1072 s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1073
4f2d528d
LP
1074 if (s->socket_fd >= 0) {
1075 fds = &s->socket_fd;
1076 n_fds = 1;
6cf6bbc2 1077 } else {
79c7626d 1078 r = service_collect_fds(s, &fdsbuf);
117dcc57 1079 if (r < 0)
6cf6bbc2
LP
1080 goto fail;
1081
1082 fds = fdsbuf;
79c7626d 1083 n_fds = r;
6cf6bbc2 1084 }
4f2d528d 1085 }
44d8db9e 1086
21b2ce39
LP
1087 if (timeout > 0) {
1088 r = service_arm_timer(s, timeout);
92c1622e
LP
1089 if (r < 0)
1090 goto fail;
1091 } else
1092 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 1093
19f6d710
LP
1094 r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
1095 if (r < 0)
9e2f7c11 1096 goto fail;
9e2f7c11 1097
3b1c5241 1098 our_env = new0(char*, 6);
97ae63e2 1099 if (!our_env) {
2105e76a
LP
1100 r = -ENOMEM;
1101 goto fail;
1102 }
c952c6ec 1103
a158dbf1 1104 if (is_control ? s->notify_access == NOTIFY_ALL : s->notify_access != NOTIFY_NONE)
1124fe6f 1105 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
c952c6ec
LP
1106 r = -ENOMEM;
1107 goto fail;
1108 }
1109
2105e76a 1110 if (s->main_pid > 0)
ccd06097 1111 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
c952c6ec
LP
1112 r = -ENOMEM;
1113 goto fail;
1114 }
2105e76a 1115
b2c23da8 1116 if (UNIT(s)->manager->running_as != MANAGER_SYSTEM)
ccd06097 1117 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
97ae63e2
LP
1118 r = -ENOMEM;
1119 goto fail;
1120 }
1121
3b1c5241
SL
1122 if (UNIT_DEREF(s->accept_socket)) {
1123 union sockaddr_union sa;
1124 socklen_t salen = sizeof(sa);
1125
1126 r = getpeername(s->socket_fd, &sa.sa, &salen);
1127 if (r < 0) {
1128 r = -errno;
1129 goto fail;
1130 }
1131
1132 if (IN_SET(sa.sa.sa_family, AF_INET, AF_INET6)) {
1133 _cleanup_free_ char *addr = NULL;
1134 char *t;
1135 int port;
1136
1137 r = sockaddr_pretty(&sa.sa, salen, true, false, &addr);
1138 if (r < 0)
1139 goto fail;
1140
1141 t = strappend("REMOTE_ADDR=", addr);
1142 if (!t) {
1143 r = -ENOMEM;
1144 goto fail;
1145 }
1146 our_env[n_env++] = t;
1147
1148 port = sockaddr_port(&sa.sa);
1149 if (port < 0) {
1150 r = port;
1151 goto fail;
1152 }
1153
1154 if (asprintf(&t, "REMOTE_PORT=%u", port) < 0) {
1155 r = -ENOMEM;
1156 goto fail;
1157 }
1158 our_env[n_env++] = t;
1159 }
1160 }
1161
97ae63e2
LP
1162 final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
1163 if (!final_env) {
2105e76a
LP
1164 r = -ENOMEM;
1165 goto fail;
1166 }
c952c6ec 1167
4ad49000 1168 if (is_control && UNIT(s)->cgroup_path) {
63c372cb 1169 path = strjoina(UNIT(s)->cgroup_path, "/control");
4ad49000
LP
1170 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
1171 } else
1172 path = UNIT(s)->cgroup_path;
1173
e44da745 1174 if (s->exec_context.bus_endpoint) {
b2c23da8 1175 r = bus_kernel_create_endpoint(UNIT(s)->manager->running_as == MANAGER_SYSTEM ? "system" : "user",
e44da745
DM
1176 UNIT(s)->id, &bus_endpoint_path);
1177 if (r < 0)
1178 goto fail;
1179
1180 /* Pass the fd to the exec_params so that the child process can upload the policy.
1181 * Keep a reference to the fd in the service, so the endpoint is kept alive as long
1182 * as the service is running. */
1183 exec_params.bus_endpoint_fd = s->bus_endpoint_fd = r;
1184 }
e44da745 1185
9fa95f85
DM
1186 exec_params.argv = argv;
1187 exec_params.fds = fds;
1188 exec_params.n_fds = n_fds;
1189 exec_params.environment = final_env;
1190 exec_params.confirm_spawn = UNIT(s)->manager->confirm_spawn;
1191 exec_params.cgroup_supported = UNIT(s)->manager->cgroup_supported;
1192 exec_params.cgroup_path = path;
a931ad47 1193 exec_params.cgroup_delegate = s->cgroup_context.delegate;
9fa95f85 1194 exec_params.runtime_prefix = manager_get_runtime_prefix(UNIT(s)->manager);
9fa95f85 1195 exec_params.watchdog_usec = s->watchdog_usec;
e44da745 1196 exec_params.bus_endpoint_path = bus_endpoint_path;
9fa95f85
DM
1197 if (s->type == SERVICE_IDLE)
1198 exec_params.idle_pipe = UNIT(s)->manager->idle_pipe;
1199
f2341e0a
LP
1200 r = exec_spawn(UNIT(s),
1201 c,
9e2f7c11 1202 &s->exec_context,
9fa95f85 1203 &exec_params,
613b411c 1204 s->exec_runtime,
9e2f7c11 1205 &pid);
9e2f7c11 1206 if (r < 0)
034c6ed7
LP
1207 goto fail;
1208
117dcc57
ZJS
1209 r = unit_watch_pid(UNIT(s), pid);
1210 if (r < 0)
034c6ed7
LP
1211 /* FIXME: we need to do something here */
1212 goto fail;
1213
1214 *_pid = pid;
1215
5cb5a6ff 1216 return 0;
034c6ed7
LP
1217
1218fail:
1219 if (timeout)
718db961 1220 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7
LP
1221
1222 return r;
1223}
1224
80876c20
LP
1225static int main_pid_good(Service *s) {
1226 assert(s);
1227
1228 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1229 * don't know */
1230
fc08079e 1231 /* If we know the pid file, then let's just check if it is
80876c20 1232 * still valid */
6dfa5494
LP
1233 if (s->main_pid_known) {
1234
1235 /* If it's an alien child let's check if it is still
1236 * alive ... */
62220cf7 1237 if (s->main_pid_alien && s->main_pid > 0)
9f5650ae 1238 return pid_is_alive(s->main_pid);
6dfa5494
LP
1239
1240 /* .. otherwise assume we'll get a SIGCHLD for it,
1241 * which we really should wait for to collect exit
1242 * status and code */
80876c20 1243 return s->main_pid > 0;
6dfa5494 1244 }
80876c20
LP
1245
1246 /* We don't know the pid */
1247 return -EAGAIN;
1248}
1249
44a6b1b6 1250_pure_ static int control_pid_good(Service *s) {
80876c20
LP
1251 assert(s);
1252
1253 return s->control_pid > 0;
1254}
1255
1256static int cgroup_good(Service *s) {
1257 int r;
1258
1259 assert(s);
1260
4ad49000
LP
1261 if (!UNIT(s)->cgroup_path)
1262 return 0;
1263
6f883237 1264 r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path);
117dcc57 1265 if (r < 0)
80876c20
LP
1266 return r;
1267
1268 return !r;
1269}
1270
a509f0e6
LP
1271static bool service_shall_restart(Service *s) {
1272 assert(s);
1273
1274 /* Don't restart after manual stops */
1275 if (s->forbid_restart)
1276 return false;
1277
1278 /* Never restart if this is configured as special exception */
1279 if (exit_status_set_test(&s->restart_prevent_status, s->main_exec_status.code, s->main_exec_status.status))
1280 return false;
1281
1282 /* Restart if the exit code/status are configured as restart triggers */
1283 if (exit_status_set_test(&s->restart_force_status, s->main_exec_status.code, s->main_exec_status.status))
1284 return true;
1285
1286 switch (s->restart) {
1287
1288 case SERVICE_RESTART_NO:
1289 return false;
1290
1291 case SERVICE_RESTART_ALWAYS:
1292 return true;
1293
1294 case SERVICE_RESTART_ON_SUCCESS:
1295 return s->result == SERVICE_SUCCESS;
1296
1297 case SERVICE_RESTART_ON_FAILURE:
1298 return s->result != SERVICE_SUCCESS;
1299
1300 case SERVICE_RESTART_ON_ABNORMAL:
1301 return !IN_SET(s->result, SERVICE_SUCCESS, SERVICE_FAILURE_EXIT_CODE);
1302
1303 case SERVICE_RESTART_ON_WATCHDOG:
1304 return s->result == SERVICE_FAILURE_WATCHDOG;
1305
1306 case SERVICE_RESTART_ON_ABORT:
1307 return IN_SET(s->result, SERVICE_FAILURE_SIGNAL, SERVICE_FAILURE_CORE_DUMP);
1308
1309 default:
1310 assert_not_reached("unknown restart setting");
1311 }
1312}
1313
f42806df 1314static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
034c6ed7
LP
1315 int r;
1316 assert(s);
1317
f42806df
LP
1318 if (f != SERVICE_SUCCESS)
1319 s->result = f;
034c6ed7 1320
0c7f15b3
MS
1321 service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1322
2928b0a8 1323 if (s->result != SERVICE_SUCCESS) {
f2341e0a 1324 log_unit_warning(UNIT(s), "Failed with result '%s'.", service_result_to_string(s->result));
2928b0a8
LP
1325 failure_action(UNIT(s)->manager, s->failure_action, s->reboot_arg);
1326 }
93ae25e6 1327
a509f0e6 1328 if (allow_restart && service_shall_restart(s)) {
034c6ed7 1329
718db961 1330 r = service_arm_timer(s, s->restart_usec);
f42806df 1331 if (r < 0)
034c6ed7
LP
1332 goto fail;
1333
1334 service_set_state(s, SERVICE_AUTO_RESTART);
0c7f15b3 1335 }
034c6ed7 1336
f2341e0a 1337 /* The next restart might not be a manual stop, hence reset the flag indicating manual stops */
47342320
LP
1338 s->forbid_restart = false;
1339
e66cf1a3 1340 /* We want fresh tmpdirs in case service is started again immediately */
613b411c
LP
1341 exec_runtime_destroy(s->exec_runtime);
1342 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
c17ec25e 1343
e66cf1a3
LP
1344 /* Also, remove the runtime directory in */
1345 exec_context_destroy_runtime_directory(&s->exec_context, manager_get_runtime_prefix(UNIT(s)->manager));
1346
9285c9ff
LN
1347 /* Try to delete the pid file. At this point it will be
1348 * out-of-date, and some software might be confused by it, so
1349 * let's remove it. */
1350 if (s->pid_file)
1351 unlink_noerrno(s->pid_file);
1352
034c6ed7
LP
1353 return;
1354
1355fail:
f2341e0a 1356 log_unit_warning_errno(UNIT(s), r, "Failed to run install restart timer: %m");
f42806df 1357 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1358}
1359
f42806df 1360static void service_enter_stop_post(Service *s, ServiceResult f) {
034c6ed7
LP
1361 int r;
1362 assert(s);
1363
f42806df
LP
1364 if (f != SERVICE_SUCCESS)
1365 s->result = f;
034c6ed7 1366
5e94833f 1367 service_unwatch_control_pid(s);
a911bb9a 1368 unit_watch_all_pids(UNIT(s));
5e94833f 1369
117dcc57
ZJS
1370 s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1371 if (s->control_command) {
867b3b7d
LP
1372 s->control_command_id = SERVICE_EXEC_STOP_POST;
1373
ecedd90f
LP
1374 r = service_spawn(s,
1375 s->control_command,
21b2ce39 1376 s->timeout_stop_usec,
ecedd90f
LP
1377 false,
1378 !s->permissions_start_only,
1379 !s->root_directory_start_only,
1380 true,
ecedd90f
LP
1381 true,
1382 &s->control_pid);
1383 if (r < 0)
034c6ed7
LP
1384 goto fail;
1385
80876c20
LP
1386 service_set_state(s, SERVICE_STOP_POST);
1387 } else
ac84d1fb 1388 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1389
1390 return;
1391
1392fail:
f2341e0a 1393 log_unit_warning_errno(UNIT(s), r, "Failed to run 'stop-post' task: %m");
f42806df 1394 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1395}
1396
4940c0b0
LP
1397static int state_to_kill_operation(ServiceState state) {
1398 switch (state) {
1399
1400 case SERVICE_STOP_SIGABRT:
1401 return KILL_ABORT;
1402
1403 case SERVICE_STOP_SIGTERM:
1404 case SERVICE_FINAL_SIGTERM:
1405 return KILL_TERMINATE;
1406
1407 case SERVICE_STOP_SIGKILL:
1408 case SERVICE_FINAL_SIGKILL:
1409 return KILL_KILL;
1410
1411 default:
1412 return _KILL_OPERATION_INVALID;
1413 }
1414}
1415
f42806df 1416static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
034c6ed7 1417 int r;
034c6ed7
LP
1418
1419 assert(s);
1420
f42806df
LP
1421 if (f != SERVICE_SUCCESS)
1422 s->result = f;
034c6ed7 1423
a911bb9a
LP
1424 unit_watch_all_pids(UNIT(s));
1425
cd2086fe
LP
1426 r = unit_kill_context(
1427 UNIT(s),
1428 &s->kill_context,
4940c0b0 1429 state_to_kill_operation(state),
cd2086fe
LP
1430 s->main_pid,
1431 s->control_pid,
1432 s->main_pid_alien);
ac84d1fb 1433
cd2086fe
LP
1434 if (r < 0)
1435 goto fail;
034c6ed7 1436
cd2086fe 1437 if (r > 0) {
d568a335 1438 if (s->timeout_stop_usec > 0) {
718db961 1439 r = service_arm_timer(s, s->timeout_stop_usec);
d568a335 1440 if (r < 0)
e558336f 1441 goto fail;
d568a335 1442 }
d6ea93e3 1443
80876c20 1444 service_set_state(s, state);
1db0db4b 1445 } else if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM) && s->kill_context.send_sigkill)
ac84d1fb 1446 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1db0db4b 1447 else if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL))
f42806df 1448 service_enter_stop_post(s, SERVICE_SUCCESS);
1db0db4b 1449 else if (state == SERVICE_FINAL_SIGTERM && s->kill_context.send_sigkill)
ac84d1fb 1450 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
80876c20 1451 else
f42806df 1452 service_enter_dead(s, SERVICE_SUCCESS, true);
034c6ed7
LP
1453
1454 return;
1455
1456fail:
f2341e0a 1457 log_unit_warning_errno(UNIT(s), r, "Failed to kill processes: %m");
034c6ed7 1458
a00973af 1459 if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL))
f42806df 1460 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
034c6ed7 1461 else
f42806df 1462 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1463}
1464
308d72dc
LP
1465static void service_enter_stop_by_notify(Service *s) {
1466 assert(s);
1467
1468 unit_watch_all_pids(UNIT(s));
1469
1470 if (s->timeout_stop_usec > 0)
1471 service_arm_timer(s, s->timeout_stop_usec);
1472
6041a7ee
MS
1473 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1474 service_set_state(s, SERVICE_STOP_SIGTERM);
308d72dc
LP
1475}
1476
f42806df 1477static void service_enter_stop(Service *s, ServiceResult f) {
034c6ed7 1478 int r;
5925dd3c 1479
034c6ed7
LP
1480 assert(s);
1481
f42806df
LP
1482 if (f != SERVICE_SUCCESS)
1483 s->result = f;
034c6ed7 1484
5e94833f 1485 service_unwatch_control_pid(s);
a911bb9a 1486 unit_watch_all_pids(UNIT(s));
5e94833f 1487
117dcc57
ZJS
1488 s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1489 if (s->control_command) {
867b3b7d
LP
1490 s->control_command_id = SERVICE_EXEC_STOP;
1491
ecedd90f
LP
1492 r = service_spawn(s,
1493 s->control_command,
21b2ce39 1494 s->timeout_stop_usec,
ecedd90f
LP
1495 false,
1496 !s->permissions_start_only,
1497 !s->root_directory_start_only,
1498 false,
ecedd90f
LP
1499 true,
1500 &s->control_pid);
1501 if (r < 0)
034c6ed7
LP
1502 goto fail;
1503
80876c20
LP
1504 service_set_state(s, SERVICE_STOP);
1505 } else
f42806df 1506 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1507
1508 return;
1509
1510fail:
f2341e0a 1511 log_unit_warning_errno(UNIT(s), r, "Failed to run 'stop' task: %m");
f42806df 1512 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1513}
1514
957c3cf9
LP
1515static bool service_good(Service *s) {
1516 int main_pid_ok;
1517 assert(s);
1518
1519 if (s->type == SERVICE_DBUS && !s->bus_name_good)
1520 return false;
1521
1522 main_pid_ok = main_pid_good(s);
1523 if (main_pid_ok > 0) /* It's alive */
1524 return true;
1525 if (main_pid_ok == 0) /* It's dead */
1526 return false;
1527
1528 /* OK, we don't know anything about the main PID, maybe
1529 * because there is none. Let's check the control group
1530 * instead. */
1531
1532 return cgroup_good(s) != 0;
1533}
1534
f42806df 1535static void service_enter_running(Service *s, ServiceResult f) {
80876c20
LP
1536 assert(s);
1537
f42806df
LP
1538 if (f != SERVICE_SUCCESS)
1539 s->result = f;
80876c20 1540
957c3cf9 1541 if (service_good(s)) {
308d72dc
LP
1542
1543 /* If there are any queued up sd_notify()
1544 * notifications, process them now */
1545 if (s->notify_state == NOTIFY_RELOADING)
1546 service_enter_reload_by_notify(s);
1547 else if (s->notify_state == NOTIFY_STOPPING)
1548 service_enter_stop_by_notify(s);
1549 else
1550 service_set_state(s, SERVICE_RUNNING);
1551
1552 } else if (s->remain_after_exit)
80876c20
LP
1553 service_set_state(s, SERVICE_EXITED);
1554 else
f42806df 1555 service_enter_stop(s, SERVICE_SUCCESS);
80876c20
LP
1556}
1557
034c6ed7
LP
1558static void service_enter_start_post(Service *s) {
1559 int r;
1560 assert(s);
1561
5e94833f 1562 service_unwatch_control_pid(s);
842129f5 1563 service_reset_watchdog(s);
bb242b7b 1564
117dcc57
ZJS
1565 s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
1566 if (s->control_command) {
867b3b7d
LP
1567 s->control_command_id = SERVICE_EXEC_START_POST;
1568
ecedd90f
LP
1569 r = service_spawn(s,
1570 s->control_command,
21b2ce39 1571 s->timeout_start_usec,
ecedd90f
LP
1572 false,
1573 !s->permissions_start_only,
1574 !s->root_directory_start_only,
1575 false,
ecedd90f
LP
1576 true,
1577 &s->control_pid);
1578 if (r < 0)
034c6ed7
LP
1579 goto fail;
1580
80876c20
LP
1581 service_set_state(s, SERVICE_START_POST);
1582 } else
f42806df 1583 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1584
1585 return;
1586
1587fail:
f2341e0a 1588 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start-post' task: %m");
f42806df 1589 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1590}
1591
4ad49000
LP
1592static void service_kill_control_processes(Service *s) {
1593 char *p;
1594
1595 if (!UNIT(s)->cgroup_path)
1596 return;
1597
63c372cb 1598 p = strjoina(UNIT(s)->cgroup_path, "/control");
4ad49000
LP
1599 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
1600}
1601
034c6ed7 1602static void service_enter_start(Service *s) {
4ad49000 1603 ExecCommand *c;
034c6ed7
LP
1604 pid_t pid;
1605 int r;
1606
1607 assert(s);
1608
41efeaec
LP
1609 service_unwatch_control_pid(s);
1610 service_unwatch_main_pid(s);
80876c20 1611
8f53a7b8
LP
1612 /* We want to ensure that nobody leaks processes from
1613 * START_PRE here, so let's go on a killing spree, People
1614 * should not spawn long running processes from START_PRE. */
4ad49000 1615 service_kill_control_processes(s);
8f53a7b8 1616
867b3b7d
LP
1617 if (s->type == SERVICE_FORKING) {
1618 s->control_command_id = SERVICE_EXEC_START;
1619 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
1620
1621 s->main_command = NULL;
1622 } else {
1623 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1624 s->control_command = NULL;
1625
1626 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
1627 }
34e9ba66 1628
96fb8242
LP
1629 if (!c) {
1630 assert(s->type == SERVICE_ONESHOT);
1631 service_enter_start_post(s);
1632 return;
1633 }
1634
ecedd90f
LP
1635 r = service_spawn(s,
1636 c,
21b2ce39 1637 IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_NOTIFY, SERVICE_ONESHOT) ? s->timeout_start_usec : 0,
ecedd90f
LP
1638 true,
1639 true,
1640 true,
1641 true,
ecedd90f
LP
1642 false,
1643 &pid);
1644 if (r < 0)
034c6ed7
LP
1645 goto fail;
1646
f2b68789 1647 if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
034c6ed7
LP
1648 /* For simple services we immediately start
1649 * the START_POST binaries. */
1650
5925dd3c 1651 service_set_main_pid(s, pid);
034c6ed7
LP
1652 service_enter_start_post(s);
1653
1654 } else if (s->type == SERVICE_FORKING) {
1655
1656 /* For forking services we wait until the start
1657 * process exited. */
1658
e55224ca 1659 s->control_pid = pid;
80876c20
LP
1660 service_set_state(s, SERVICE_START);
1661
34e9ba66 1662 } else if (s->type == SERVICE_ONESHOT ||
8c47c732
LP
1663 s->type == SERVICE_DBUS ||
1664 s->type == SERVICE_NOTIFY) {
7d55e835 1665
34e9ba66 1666 /* For oneshot services we wait until the start
7d55e835
LP
1667 * process exited, too, but it is our main process. */
1668
05e343b7 1669 /* For D-Bus services we know the main pid right away,
8c47c732
LP
1670 * but wait for the bus name to appear on the
1671 * bus. Notify services are similar. */
05e343b7 1672
5925dd3c 1673 service_set_main_pid(s, pid);
80876c20 1674 service_set_state(s, SERVICE_START);
034c6ed7
LP
1675 } else
1676 assert_not_reached("Unknown service type");
1677
1678 return;
1679
1680fail:
f2341e0a 1681 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start' task: %m");
f42806df 1682 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1683}
1684
1685static void service_enter_start_pre(Service *s) {
1686 int r;
1687
1688 assert(s);
1689
5e94833f
LP
1690 service_unwatch_control_pid(s);
1691
117dcc57
ZJS
1692 s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
1693 if (s->control_command) {
8f53a7b8
LP
1694 /* Before we start anything, let's clear up what might
1695 * be left from previous runs. */
4ad49000 1696 service_kill_control_processes(s);
8f53a7b8 1697
867b3b7d
LP
1698 s->control_command_id = SERVICE_EXEC_START_PRE;
1699
ecedd90f
LP
1700 r = service_spawn(s,
1701 s->control_command,
21b2ce39 1702 s->timeout_start_usec,
ecedd90f
LP
1703 false,
1704 !s->permissions_start_only,
1705 !s->root_directory_start_only,
1706 true,
ecedd90f
LP
1707 true,
1708 &s->control_pid);
1709 if (r < 0)
034c6ed7
LP
1710 goto fail;
1711
80876c20
LP
1712 service_set_state(s, SERVICE_START_PRE);
1713 } else
034c6ed7
LP
1714 service_enter_start(s);
1715
1716 return;
1717
1718fail:
f2341e0a 1719 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start-pre' task: %m");
f42806df 1720 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1721}
1722
1723static void service_enter_restart(Service *s) {
718db961 1724 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
034c6ed7 1725 int r;
398ef8ba 1726
034c6ed7
LP
1727 assert(s);
1728
a8bb2e65
LP
1729 if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
1730 /* Don't restart things if we are going down anyway */
f2341e0a 1731 log_unit_info(UNIT(s), "Stop job pending for unit, delaying automatic restart.");
2edfa366 1732
718db961 1733 r = service_arm_timer(s, s->restart_usec);
a8bb2e65 1734 if (r < 0)
2edfa366 1735 goto fail;
feae8adb
DW
1736
1737 return;
2edfa366
LP
1738 }
1739
48bb5876
DW
1740 /* Any units that are bound to this service must also be
1741 * restarted. We use JOB_RESTART (instead of the more obvious
1742 * JOB_START) here so that those dependency jobs will be added
1743 * as well. */
1744 r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
1745 if (r < 0)
034c6ed7
LP
1746 goto fail;
1747
a8bb2e65
LP
1748 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
1749 * it will be canceled as part of the service_stop() call that
1750 * is executed as part of JOB_RESTART. */
1751
f2341e0a 1752 log_unit_debug(UNIT(s), "Scheduled restart job.");
034c6ed7
LP
1753 return;
1754
1755fail:
f2341e0a 1756 log_unit_warning(UNIT(s), "Failed to schedule restart job: %s", bus_error_message(&error, -r));
f42806df 1757 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1758}
1759
308d72dc
LP
1760static void service_enter_reload_by_notify(Service *s) {
1761 assert(s);
1762
1763 if (s->timeout_start_usec > 0)
1764 service_arm_timer(s, s->timeout_start_usec);
1765
1766 service_set_state(s, SERVICE_RELOAD);
1767}
1768
034c6ed7
LP
1769static void service_enter_reload(Service *s) {
1770 int r;
1771
1772 assert(s);
1773
5e94833f
LP
1774 service_unwatch_control_pid(s);
1775
117dcc57
ZJS
1776 s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
1777 if (s->control_command) {
867b3b7d
LP
1778 s->control_command_id = SERVICE_EXEC_RELOAD;
1779
ecedd90f
LP
1780 r = service_spawn(s,
1781 s->control_command,
21b2ce39 1782 s->timeout_start_usec,
ecedd90f
LP
1783 false,
1784 !s->permissions_start_only,
1785 !s->root_directory_start_only,
1786 false,
ecedd90f
LP
1787 true,
1788 &s->control_pid);
1789 if (r < 0)
034c6ed7
LP
1790 goto fail;
1791
80876c20
LP
1792 service_set_state(s, SERVICE_RELOAD);
1793 } else
f42806df 1794 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1795
1796 return;
1797
1798fail:
f2341e0a 1799 log_unit_warning_errno(UNIT(s), r, "Failed to run 'reload' task: %m");
f42806df
LP
1800 s->reload_result = SERVICE_FAILURE_RESOURCES;
1801 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1802}
1803
f42806df 1804static void service_run_next_control(Service *s) {
034c6ed7
LP
1805 int r;
1806
1807 assert(s);
1808 assert(s->control_command);
1809 assert(s->control_command->command_next);
1810
34e9ba66 1811 assert(s->control_command_id != SERVICE_EXEC_START);
034c6ed7 1812
34e9ba66 1813 s->control_command = s->control_command->command_next;
5e94833f
LP
1814 service_unwatch_control_pid(s);
1815
ecedd90f
LP
1816 r = service_spawn(s,
1817 s->control_command,
21b2ce39 1818 IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec,
ecedd90f
LP
1819 false,
1820 !s->permissions_start_only,
1821 !s->root_directory_start_only,
1822 s->control_command_id == SERVICE_EXEC_START_PRE ||
1823 s->control_command_id == SERVICE_EXEC_STOP_POST,
ecedd90f
LP
1824 true,
1825 &s->control_pid);
1826 if (r < 0)
034c6ed7
LP
1827 goto fail;
1828
1829 return;
1830
1831fail:
f2341e0a 1832 log_unit_warning_errno(UNIT(s), r, "Failed to run next control task: %m");
034c6ed7 1833
80876c20 1834 if (s->state == SERVICE_START_PRE)
f42806df 1835 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
80876c20 1836 else if (s->state == SERVICE_STOP)
f42806df 1837 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7 1838 else if (s->state == SERVICE_STOP_POST)
f42806df 1839 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
e2f3b44c 1840 else if (s->state == SERVICE_RELOAD) {
f42806df
LP
1841 s->reload_result = SERVICE_FAILURE_RESOURCES;
1842 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c 1843 } else
f42806df 1844 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
5cb5a6ff
LP
1845}
1846
f42806df 1847static void service_run_next_main(Service *s) {
34e9ba66
LP
1848 pid_t pid;
1849 int r;
1850
1851 assert(s);
867b3b7d
LP
1852 assert(s->main_command);
1853 assert(s->main_command->command_next);
1854 assert(s->type == SERVICE_ONESHOT);
34e9ba66 1855
867b3b7d 1856 s->main_command = s->main_command->command_next;
34e9ba66
LP
1857 service_unwatch_main_pid(s);
1858
ecedd90f
LP
1859 r = service_spawn(s,
1860 s->main_command,
21b2ce39 1861 s->timeout_start_usec,
ecedd90f
LP
1862 true,
1863 true,
1864 true,
1865 true,
ecedd90f
LP
1866 false,
1867 &pid);
1868 if (r < 0)
34e9ba66
LP
1869 goto fail;
1870
1871 service_set_main_pid(s, pid);
1872
1873 return;
1874
1875fail:
f2341e0a 1876 log_unit_warning_errno(UNIT(s), r, "Failed to run next main task: %m");
f42806df 1877 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
34e9ba66
LP
1878}
1879
93ae25e6
MO
1880static int service_start_limit_test(Service *s) {
1881 assert(s);
1882
1883 if (ratelimit_test(&s->start_limit))
1884 return 0;
1885
f2341e0a 1886 log_unit_warning(UNIT(s), "Start request repeated too quickly.");
2928b0a8
LP
1887
1888 return failure_action(UNIT(s)->manager, s->start_limit_action, s->reboot_arg);
93ae25e6
MO
1889}
1890
87f0e418
LP
1891static int service_start(Unit *u) {
1892 Service *s = SERVICE(u);
4b939747 1893 int r;
5cb5a6ff
LP
1894
1895 assert(s);
1896
034c6ed7
LP
1897 /* We cannot fulfill this request right now, try again later
1898 * please! */
a00973af
LP
1899 if (IN_SET(s->state,
1900 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1901 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))
5cb5a6ff
LP
1902 return -EAGAIN;
1903
034c6ed7 1904 /* Already on it! */
a00973af 1905 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST))
034c6ed7
LP
1906 return 0;
1907
2e9d6c12 1908 /* A service that will be restarted must be stopped first to
7f2cddae 1909 * trigger BindsTo and/or OnFailure dependencies. If a user
2e9d6c12 1910 * does not want to wait for the holdoff time to elapse, the
d4943dc7
LP
1911 * service should be manually restarted, not started. We
1912 * simply return EAGAIN here, so that any start jobs stay
1913 * queued, and assume that the auto restart timer will
1914 * eventually trigger the restart. */
1915 if (s->state == SERVICE_AUTO_RESTART)
a8bb2e65 1916 return -EAGAIN;
2e9d6c12 1917
a00973af 1918 assert(IN_SET(s->state, SERVICE_DEAD, SERVICE_FAILED));
5cb5a6ff 1919
1e2e8133 1920 /* Make sure we don't enter a busy loop of some kind. */
4b939747 1921 r = service_start_limit_test(s);
c2f34808 1922 if (r < 0) {
8d1b002a 1923 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
4b939747 1924 return r;
c2f34808 1925 }
1e2e8133 1926
f42806df
LP
1927 s->result = SERVICE_SUCCESS;
1928 s->reload_result = SERVICE_SUCCESS;
034c6ed7 1929 s->main_pid_known = false;
6dfa5494 1930 s->main_pid_alien = false;
47342320 1931 s->forbid_restart = false;
5ad096b3 1932 s->reset_cpu_usage = true;
034c6ed7 1933
a1e58e8e 1934 s->status_text = mfree(s->status_text);
8cfdb077
LP
1935 s->status_errno = 0;
1936
308d72dc
LP
1937 s->notify_state = NOTIFY_UNKNOWN;
1938
034c6ed7 1939 service_enter_start_pre(s);
82a2b6bb 1940 return 1;
5cb5a6ff
LP
1941}
1942
87f0e418
LP
1943static int service_stop(Unit *u) {
1944 Service *s = SERVICE(u);
5cb5a6ff
LP
1945
1946 assert(s);
1947
a509f0e6 1948 /* Don't create restart jobs from manual stops. */
47342320 1949 s->forbid_restart = true;
034c6ed7 1950
e537352b 1951 /* Already on it */
a00973af
LP
1952 if (IN_SET(s->state,
1953 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1954 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))
e537352b
LP
1955 return 0;
1956
f0c7b229 1957 /* A restart will be scheduled or is in progress. */
034c6ed7 1958 if (s->state == SERVICE_AUTO_RESTART) {
0c7f15b3 1959 service_set_state(s, SERVICE_DEAD);
034c6ed7
LP
1960 return 0;
1961 }
1962
3f6c78dc
LP
1963 /* If there's already something running we go directly into
1964 * kill mode. */
a00973af 1965 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD)) {
f42806df 1966 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
3f6c78dc
LP
1967 return 0;
1968 }
5cb5a6ff 1969
a00973af 1970 assert(IN_SET(s->state, SERVICE_RUNNING, SERVICE_EXITED));
3a762661 1971
f42806df 1972 service_enter_stop(s, SERVICE_SUCCESS);
82a2b6bb 1973 return 1;
5cb5a6ff
LP
1974}
1975
87f0e418
LP
1976static int service_reload(Unit *u) {
1977 Service *s = SERVICE(u);
034c6ed7
LP
1978
1979 assert(s);
1980
80876c20 1981 assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
034c6ed7
LP
1982
1983 service_enter_reload(s);
2d018ae2 1984 return 1;
5cb5a6ff
LP
1985}
1986
44a6b1b6 1987_pure_ static bool service_can_reload(Unit *u) {
87f0e418 1988 Service *s = SERVICE(u);
034c6ed7
LP
1989
1990 assert(s);
1991
1992 return !!s->exec_command[SERVICE_EXEC_RELOAD];
1993}
1994
a16e1123
LP
1995static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
1996 Service *s = SERVICE(u);
2339fc93 1997 ServiceFDStore *fs;
a16e1123
LP
1998
1999 assert(u);
2000 assert(f);
2001 assert(fds);
2002
2003 unit_serialize_item(u, f, "state", service_state_to_string(s->state));
f42806df
LP
2004 unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2005 unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
a16e1123
LP
2006
2007 if (s->control_pid > 0)
f06db334 2008 unit_serialize_item_format(u, f, "control-pid", PID_FMT, s->control_pid);
a16e1123 2009
5925dd3c 2010 if (s->main_pid_known && s->main_pid > 0)
ccd06097 2011 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
a16e1123
LP
2012
2013 unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
de1d4f9b 2014 unit_serialize_item(u, f, "bus-name-good", yes_no(s->bus_name_good));
a16e1123 2015
f2341e0a
LP
2016 if (s->status_text) {
2017 _cleanup_free_ char *c = NULL;
2018
2019 c = cescape(s->status_text);
2020 unit_serialize_item(u, f, "status-text", strempty(c));
2021 }
3a2776bc 2022
cfc4eb4c
LP
2023 /* FIXME: There's a minor uncleanliness here: if there are
2024 * multiple commands attached here, we will start from the
2025 * first one again */
a16e1123 2026 if (s->control_command_id >= 0)
f06db334 2027 unit_serialize_item(u, f, "control-command", service_exec_command_to_string(s->control_command_id));
a16e1123
LP
2028
2029 if (s->socket_fd >= 0) {
2030 int copy;
2031
2339fc93
LP
2032 copy = fdset_put_dup(fds, s->socket_fd);
2033 if (copy < 0)
a16e1123
LP
2034 return copy;
2035
2036 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2037 }
2038
e44da745
DM
2039 if (s->bus_endpoint_fd >= 0) {
2040 int copy;
2041
2339fc93
LP
2042 copy = fdset_put_dup(fds, s->bus_endpoint_fd);
2043 if (copy < 0)
e44da745
DM
2044 return copy;
2045
2046 unit_serialize_item_format(u, f, "endpoint-fd", "%i", copy);
2047 }
2048
2339fc93
LP
2049 LIST_FOREACH(fd_store, fs, s->fd_store) {
2050 int copy;
2051
2052 copy = fdset_put_dup(fds, fs->fd);
2053 if (copy < 0)
2054 return copy;
2055
2056 unit_serialize_item_format(u, f, "fd-store-fd", "%i", copy);
2057 }
2058
ecdbca40 2059 if (s->main_exec_status.pid > 0) {
f06db334
LP
2060 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT, s->main_exec_status.pid);
2061 dual_timestamp_serialize(f, "main-exec-status-start", &s->main_exec_status.start_timestamp);
2062 dual_timestamp_serialize(f, "main-exec-status-exit", &s->main_exec_status.exit_timestamp);
ecdbca40 2063
799fd0fd 2064 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
f06db334
LP
2065 unit_serialize_item_format(u, f, "main-exec-status-code", "%i", s->main_exec_status.code);
2066 unit_serialize_item_format(u, f, "main-exec-status-status", "%i", s->main_exec_status.status);
ecdbca40
LP
2067 }
2068 }
f06db334 2069
a6927d7f 2070 if (dual_timestamp_is_set(&s->watchdog_timestamp))
842129f5 2071 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
ecdbca40 2072
6aca9a58 2073 if (s->forbid_restart)
8d1a2802 2074 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
6aca9a58 2075
a16e1123
LP
2076 return 0;
2077}
2078
2079static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2080 Service *s = SERVICE(u);
2339fc93 2081 int r;
a16e1123
LP
2082
2083 assert(u);
2084 assert(key);
2085 assert(value);
2086 assert(fds);
2087
2088 if (streq(key, "state")) {
2089 ServiceState state;
2090
117dcc57
ZJS
2091 state = service_state_from_string(value);
2092 if (state < 0)
f2341e0a 2093 log_unit_debug(u, "Failed to parse state value: %s", value);
a16e1123
LP
2094 else
2095 s->deserialized_state = state;
f42806df
LP
2096 } else if (streq(key, "result")) {
2097 ServiceResult f;
2098
2099 f = service_result_from_string(value);
2100 if (f < 0)
f2341e0a 2101 log_unit_debug(u, "Failed to parse result value: %s", value);
f42806df
LP
2102 else if (f != SERVICE_SUCCESS)
2103 s->result = f;
2104
2105 } else if (streq(key, "reload-result")) {
2106 ServiceResult f;
2107
2108 f = service_result_from_string(value);
2109 if (f < 0)
f2341e0a 2110 log_unit_debug(u, "Failed to parse reload result value: %s", value);
f42806df
LP
2111 else if (f != SERVICE_SUCCESS)
2112 s->reload_result = f;
a16e1123 2113
a16e1123 2114 } else if (streq(key, "control-pid")) {
5925dd3c 2115 pid_t pid;
a16e1123 2116
e364ad06 2117 if (parse_pid(value, &pid) < 0)
f2341e0a 2118 log_unit_debug(u, "Failed to parse control-pid value: %s", value);
a16e1123 2119 else
e55224ca 2120 s->control_pid = pid;
a16e1123 2121 } else if (streq(key, "main-pid")) {
5925dd3c 2122 pid_t pid;
a16e1123 2123
e364ad06 2124 if (parse_pid(value, &pid) < 0)
f2341e0a 2125 log_unit_debug(u, "Failed to parse main-pid value: %s", value);
7400b9d2
LP
2126 else {
2127 service_set_main_pid(s, pid);
2128 unit_watch_pid(UNIT(s), pid);
2129 }
a16e1123
LP
2130 } else if (streq(key, "main-pid-known")) {
2131 int b;
2132
117dcc57
ZJS
2133 b = parse_boolean(value);
2134 if (b < 0)
f2341e0a 2135 log_unit_debug(u, "Failed to parse main-pid-known value: %s", value);
a16e1123
LP
2136 else
2137 s->main_pid_known = b;
de1d4f9b
WF
2138 } else if (streq(key, "bus-name-good")) {
2139 int b;
2140
2141 b = parse_boolean(value);
2142 if (b < 0)
2143 log_unit_debug(u, "Failed to parse bus-name-good value: %s", value);
2144 else
2145 s->bus_name_good = b;
3a2776bc
LP
2146 } else if (streq(key, "status-text")) {
2147 char *t;
2148
f2341e0a
LP
2149 r = cunescape(value, 0, &t);
2150 if (r < 0)
2151 log_unit_debug_errno(u, r, "Failed to unescape status text: %s", value);
117dcc57 2152 else {
3a2776bc
LP
2153 free(s->status_text);
2154 s->status_text = t;
2155 }
2156
a16e1123
LP
2157 } else if (streq(key, "control-command")) {
2158 ServiceExecCommand id;
2159
117dcc57
ZJS
2160 id = service_exec_command_from_string(value);
2161 if (id < 0)
f2341e0a 2162 log_unit_debug(u, "Failed to parse exec-command value: %s", value);
a16e1123
LP
2163 else {
2164 s->control_command_id = id;
2165 s->control_command = s->exec_command[id];
2166 }
2167 } else if (streq(key, "socket-fd")) {
2168 int fd;
2169
2170 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
f2341e0a 2171 log_unit_debug(u, "Failed to parse socket-fd value: %s", value);
a16e1123 2172 else {
574634bc 2173 asynchronous_close(s->socket_fd);
a16e1123
LP
2174 s->socket_fd = fdset_remove(fds, fd);
2175 }
e44da745
DM
2176 } else if (streq(key, "endpoint-fd")) {
2177 int fd;
2178
2179 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
f2341e0a 2180 log_unit_debug(u, "Failed to parse endpoint-fd value: %s", value);
e44da745
DM
2181 else {
2182 safe_close(s->bus_endpoint_fd);
2183 s->bus_endpoint_fd = fdset_remove(fds, fd);
2184 }
2339fc93
LP
2185 } else if (streq(key, "fd-store-fd")) {
2186 int fd;
2187
2188 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
f2341e0a 2189 log_unit_debug(u, "Failed to parse fd-store-fd value: %s", value);
2339fc93
LP
2190 else {
2191 r = service_add_fd_store(s, fd);
2192 if (r < 0)
f2341e0a 2193 log_unit_error_errno(u, r, "Failed to add fd to store: %m");
2339fc93
LP
2194 else if (r > 0)
2195 fdset_remove(fds, fd);
2196 }
2197
ecdbca40
LP
2198 } else if (streq(key, "main-exec-status-pid")) {
2199 pid_t pid;
2200
e364ad06 2201 if (parse_pid(value, &pid) < 0)
f2341e0a 2202 log_unit_debug(u, "Failed to parse main-exec-status-pid value: %s", value);
ecdbca40
LP
2203 else
2204 s->main_exec_status.pid = pid;
2205 } else if (streq(key, "main-exec-status-code")) {
2206 int i;
2207
e364ad06 2208 if (safe_atoi(value, &i) < 0)
f2341e0a 2209 log_unit_debug(u, "Failed to parse main-exec-status-code value: %s", value);
ecdbca40
LP
2210 else
2211 s->main_exec_status.code = i;
2212 } else if (streq(key, "main-exec-status-status")) {
2213 int i;
2214
e364ad06 2215 if (safe_atoi(value, &i) < 0)
f2341e0a 2216 log_unit_debug(u, "Failed to parse main-exec-status-status value: %s", value);
ecdbca40
LP
2217 else
2218 s->main_exec_status.status = i;
799fd0fd
LP
2219 } else if (streq(key, "main-exec-status-start"))
2220 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2221 else if (streq(key, "main-exec-status-exit"))
2222 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
a6927d7f
MO
2223 else if (streq(key, "watchdog-timestamp"))
2224 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
613b411c 2225 else if (streq(key, "forbid-restart")) {
6aca9a58
SE
2226 int b;
2227
2228 b = parse_boolean(value);
2229 if (b < 0)
f2341e0a 2230 log_unit_debug(u, "Failed to parse forbid-restart value: %s", value);
6aca9a58
SE
2231 else
2232 s->forbid_restart = b;
c17ec25e 2233 } else
f2341e0a 2234 log_unit_debug(u, "Unknown serialization key: %s", key);
a16e1123
LP
2235
2236 return 0;
2237}
2238
44a6b1b6 2239_pure_ static UnitActiveState service_active_state(Unit *u) {
e056b01d
LP
2240 const UnitActiveState *table;
2241
87f0e418 2242 assert(u);
5cb5a6ff 2243
e056b01d
LP
2244 table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2245
2246 return table[SERVICE(u)->state];
034c6ed7
LP
2247}
2248
10a94420
LP
2249static const char *service_sub_state_to_string(Unit *u) {
2250 assert(u);
2251
2252 return service_state_to_string(SERVICE(u)->state);
2253}
2254
701cc384
LP
2255static bool service_check_gc(Unit *u) {
2256 Service *s = SERVICE(u);
2257
2258 assert(s);
2259
6d55002a
LP
2260 /* Never clean up services that still have a process around,
2261 * even if the service is formally dead. */
2262 if (cgroup_good(s) > 0 ||
2263 main_pid_good(s) > 0 ||
2264 control_pid_good(s) > 0)
2265 return true;
2266
6d55002a
LP
2267 return false;
2268}
2269
44a6b1b6 2270_pure_ static bool service_check_snapshot(Unit *u) {
701cc384
LP
2271 Service *s = SERVICE(u);
2272
2273 assert(s);
2274
8bb2d17d 2275 return s->socket_fd < 0;
701cc384
LP
2276}
2277
3a111838
MS
2278static int service_retry_pid_file(Service *s) {
2279 int r;
2280
2281 assert(s->pid_file);
2282 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2283
2284 r = service_load_pid_file(s, false);
2285 if (r < 0)
2286 return r;
2287
2288 service_unwatch_pid_file(s);
2289
f42806df 2290 service_enter_running(s, SERVICE_SUCCESS);
3a111838
MS
2291 return 0;
2292}
2293
2294static int service_watch_pid_file(Service *s) {
2295 int r;
2296
f2341e0a 2297 log_unit_debug(UNIT(s), "Setting watch for PID file %s", s->pid_file_pathspec->path);
8bb2d17d 2298
718db961 2299 r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
3a111838
MS
2300 if (r < 0)
2301 goto fail;
2302
2303 /* the pidfile might have appeared just before we set the watch */
f2341e0a 2304 log_unit_debug(UNIT(s), "Trying to read PID file %s in case it changed", s->pid_file_pathspec->path);
3a111838
MS
2305 service_retry_pid_file(s);
2306
2307 return 0;
2308fail:
f2341e0a 2309 log_unit_error_errno(UNIT(s), r, "Failed to set a watch for PID file %s: %m", s->pid_file_pathspec->path);
3a111838
MS
2310 service_unwatch_pid_file(s);
2311 return r;
2312}
2313
2314static int service_demand_pid_file(Service *s) {
2315 PathSpec *ps;
2316
2317 assert(s->pid_file);
2318 assert(!s->pid_file_pathspec);
2319
2320 ps = new0(PathSpec, 1);
2321 if (!ps)
2322 return -ENOMEM;
2323
718db961 2324 ps->unit = UNIT(s);
3a111838
MS
2325 ps->path = strdup(s->pid_file);
2326 if (!ps->path) {
2327 free(ps);
2328 return -ENOMEM;
2329 }
2330
2331 path_kill_slashes(ps->path);
2332
2333 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2334 * keep their PID file open all the time. */
2335 ps->type = PATH_MODIFIED;
2336 ps->inotify_fd = -1;
2337
2338 s->pid_file_pathspec = ps;
2339
2340 return service_watch_pid_file(s);
2341}
2342
718db961 2343static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
e14c2802
LP
2344 PathSpec *p = userdata;
2345 Service *s;
2346
2347 assert(p);
2348
2349 s = SERVICE(p->unit);
3a111838
MS
2350
2351 assert(s);
2352 assert(fd >= 0);
2353 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2354 assert(s->pid_file_pathspec);
57020a3a 2355 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
3a111838 2356
f2341e0a 2357 log_unit_debug(UNIT(s), "inotify event");
3a111838 2358
e14c2802 2359 if (path_spec_fd_event(p, events) < 0)
3a111838
MS
2360 goto fail;
2361
2362 if (service_retry_pid_file(s) == 0)
718db961 2363 return 0;
3a111838
MS
2364
2365 if (service_watch_pid_file(s) < 0)
2366 goto fail;
2367
718db961
LP
2368 return 0;
2369
3a111838
MS
2370fail:
2371 service_unwatch_pid_file(s);
f42806df 2372 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
718db961 2373 return 0;
3a111838
MS
2374}
2375
a911bb9a
LP
2376static void service_notify_cgroup_empty_event(Unit *u) {
2377 Service *s = SERVICE(u);
2378
2379 assert(u);
2380
f2341e0a 2381 log_unit_debug(u, "cgroup is empty");
a911bb9a
LP
2382
2383 switch (s->state) {
2384
2385 /* Waiting for SIGCHLD is usually more interesting,
2386 * because it includes return codes/signals. Which is
2387 * why we ignore the cgroup events for most cases,
2388 * except when we don't know pid which to expect the
2389 * SIGCHLD for. */
2390
2391 case SERVICE_START:
2392 case SERVICE_START_POST:
2393 /* If we were hoping for the daemon to write its PID file,
2394 * we can give up now. */
2395 if (s->pid_file_pathspec) {
f2341e0a 2396 log_unit_warning(u, "Daemon never wrote its PID file. Failing.");
8bb2d17d 2397
a911bb9a
LP
2398 service_unwatch_pid_file(s);
2399 if (s->state == SERVICE_START)
2400 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2401 else
2402 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2403 }
2404 break;
2405
2406 case SERVICE_RUNNING:
2407 /* service_enter_running() will figure out what to do */
2408 service_enter_running(s, SERVICE_SUCCESS);
2409 break;
2410
db2cb23b 2411 case SERVICE_STOP_SIGABRT:
a911bb9a
LP
2412 case SERVICE_STOP_SIGTERM:
2413 case SERVICE_STOP_SIGKILL:
2414
2415 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2416 service_enter_stop_post(s, SERVICE_SUCCESS);
2417
2418 break;
2419
2420 case SERVICE_STOP_POST:
2421 case SERVICE_FINAL_SIGTERM:
2422 case SERVICE_FINAL_SIGKILL:
2423 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2424 service_enter_dead(s, SERVICE_SUCCESS, true);
2425
2426 break;
2427
2428 default:
2429 ;
2430 }
2431}
2432
87f0e418
LP
2433static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2434 Service *s = SERVICE(u);
f42806df 2435 ServiceResult f;
5cb5a6ff
LP
2436
2437 assert(s);
034c6ed7
LP
2438 assert(pid >= 0);
2439
96342de6
LN
2440 if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2441 is_clean_exit_lsb(code, status, &s->success_status))
f42806df
LP
2442 f = SERVICE_SUCCESS;
2443 else if (code == CLD_EXITED)
2444 f = SERVICE_FAILURE_EXIT_CODE;
2445 else if (code == CLD_KILLED)
2446 f = SERVICE_FAILURE_SIGNAL;
2447 else if (code == CLD_DUMPED)
2448 f = SERVICE_FAILURE_CORE_DUMP;
d06dacd0 2449 else
cfc4eb4c 2450 assert_not_reached("Unknown code");
034c6ed7
LP
2451
2452 if (s->main_pid == pid) {
db01f8b3
MS
2453 /* Forking services may occasionally move to a new PID.
2454 * As long as they update the PID file before exiting the old
2455 * PID, they're fine. */
5375410b 2456 if (service_load_pid_file(s, false) == 0)
db01f8b3 2457 return;
034c6ed7 2458
034c6ed7 2459 s->main_pid = 0;
6ea832a2 2460 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
034c6ed7 2461
867b3b7d 2462 if (s->main_command) {
fbeefb45
LP
2463 /* If this is not a forking service than the
2464 * main process got started and hence we copy
2465 * the exit status so that it is recorded both
2466 * as main and as control process exit
2467 * status */
2468
867b3b7d 2469 s->main_command->exec_status = s->main_exec_status;
b708e7ce 2470
867b3b7d 2471 if (s->main_command->ignore)
f42806df 2472 f = SERVICE_SUCCESS;
fbeefb45
LP
2473 } else if (s->exec_command[SERVICE_EXEC_START]) {
2474
2475 /* If this is a forked process, then we should
2476 * ignore the return value if this was
2477 * configured for the starter process */
2478
2479 if (s->exec_command[SERVICE_EXEC_START]->ignore)
2480 f = SERVICE_SUCCESS;
034c6ed7
LP
2481 }
2482
f2341e0a
LP
2483 log_struct(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2484 LOG_UNIT_ID(u),
2485 LOG_UNIT_MESSAGE(u, "Main process exited, code=%s, status=%i/%s",
2486 sigchld_code_to_string(code), status,
e2cc6eca
LP
2487 strna(code == CLD_EXITED
2488 ? exit_status_to_string(status, EXIT_STATUS_FULL)
2489 : signal_to_string(status))),
f2341e0a
LP
2490 "EXIT_CODE=%s", sigchld_code_to_string(code),
2491 "EXIT_STATUS=%i", status,
2492 NULL);
f42806df
LP
2493
2494 if (f != SERVICE_SUCCESS)
2495 s->result = f;
034c6ed7 2496
867b3b7d
LP
2497 if (s->main_command &&
2498 s->main_command->command_next &&
f42806df 2499 f == SERVICE_SUCCESS) {
034c6ed7 2500
34e9ba66
LP
2501 /* There is another command to *
2502 * execute, so let's do that. */
034c6ed7 2503
f2341e0a 2504 log_unit_debug(u, "Running next main command for state %s.", service_state_to_string(s->state));
f42806df 2505 service_run_next_main(s);
034c6ed7 2506
34e9ba66
LP
2507 } else {
2508
2509 /* The service exited, so the service is officially
2510 * gone. */
867b3b7d 2511 s->main_command = NULL;
34e9ba66
LP
2512
2513 switch (s->state) {
2514
2515 case SERVICE_START_POST:
2516 case SERVICE_RELOAD:
2517 case SERVICE_STOP:
2518 /* Need to wait until the operation is
2519 * done */
c4653a4d 2520 break;
7d55e835 2521
34e9ba66
LP
2522 case SERVICE_START:
2523 if (s->type == SERVICE_ONESHOT) {
2524 /* This was our main goal, so let's go on */
f42806df 2525 if (f == SERVICE_SUCCESS)
34e9ba66
LP
2526 service_enter_start_post(s);
2527 else
f42806df 2528 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
34e9ba66 2529 break;
34e9ba66 2530 }
034c6ed7 2531
bfba3256
LP
2532 /* Fall through */
2533
34e9ba66 2534 case SERVICE_RUNNING:
f42806df 2535 service_enter_running(s, f);
34e9ba66 2536 break;
034c6ed7 2537
db2cb23b 2538 case SERVICE_STOP_SIGABRT:
34e9ba66
LP
2539 case SERVICE_STOP_SIGTERM:
2540 case SERVICE_STOP_SIGKILL:
5cb5a6ff 2541
34e9ba66 2542 if (!control_pid_good(s))
f42806df 2543 service_enter_stop_post(s, f);
5cb5a6ff 2544
34e9ba66
LP
2545 /* If there is still a control process, wait for that first */
2546 break;
2547
bf108e55
LP
2548 case SERVICE_STOP_POST:
2549 case SERVICE_FINAL_SIGTERM:
2550 case SERVICE_FINAL_SIGKILL:
2551
2552 if (!control_pid_good(s))
2553 service_enter_dead(s, f, true);
2554 break;
2555
34e9ba66
LP
2556 default:
2557 assert_not_reached("Uh, main process died at wrong time.");
2558 }
034c6ed7 2559 }
5cb5a6ff 2560
034c6ed7 2561 } else if (s->control_pid == pid) {
34e9ba66
LP
2562 s->control_pid = 0;
2563
b708e7ce 2564 if (s->control_command) {
8bb2d17d 2565 exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
a16e1123 2566
b708e7ce 2567 if (s->control_command->ignore)
f42806df 2568 f = SERVICE_SUCCESS;
b708e7ce
LP
2569 }
2570
f2341e0a
LP
2571 log_unit_full(u, f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, 0,
2572 "Control process exited, code=%s status=%i",
2573 sigchld_code_to_string(code), status);
f42806df
LP
2574
2575 if (f != SERVICE_SUCCESS)
2576 s->result = f;
034c6ed7 2577
88f3e0c9
LP
2578 /* Immediately get rid of the cgroup, so that the
2579 * kernel doesn't delay the cgroup empty messages for
2580 * the service cgroup any longer than necessary */
4ad49000 2581 service_kill_control_processes(s);
88f3e0c9 2582
34e9ba66
LP
2583 if (s->control_command &&
2584 s->control_command->command_next &&
f42806df 2585 f == SERVICE_SUCCESS) {
034c6ed7
LP
2586
2587 /* There is another command to *
2588 * execute, so let's do that. */
2589
f2341e0a 2590 log_unit_debug(u, "Running next control command for state %s.", service_state_to_string(s->state));
f42806df 2591 service_run_next_control(s);
034c6ed7 2592
80876c20 2593 } else {
034c6ed7
LP
2594 /* No further commands for this step, so let's
2595 * figure out what to do next */
2596
a16e1123
LP
2597 s->control_command = NULL;
2598 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2599
f2341e0a 2600 log_unit_debug(u, "Got final SIGCHLD for state %s.", service_state_to_string(s->state));
bd982a8b 2601
034c6ed7
LP
2602 switch (s->state) {
2603
2604 case SERVICE_START_PRE:
f42806df 2605 if (f == SERVICE_SUCCESS)
034c6ed7
LP
2606 service_enter_start(s);
2607 else
f42806df 2608 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
034c6ed7
LP
2609 break;
2610
2611 case SERVICE_START:
bfba3256
LP
2612 if (s->type != SERVICE_FORKING)
2613 /* Maybe spurious event due to a reload that changed the type? */
2614 break;
034c6ed7 2615
f42806df
LP
2616 if (f != SERVICE_SUCCESS) {
2617 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3a111838
MS
2618 break;
2619 }
034c6ed7 2620
3a111838 2621 if (s->pid_file) {
f42806df
LP
2622 bool has_start_post;
2623 int r;
2624
3a111838
MS
2625 /* Let's try to load the pid file here if we can.
2626 * The PID file might actually be created by a START_POST
2627 * script. In that case don't worry if the loading fails. */
f42806df
LP
2628
2629 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
2630 r = service_load_pid_file(s, !has_start_post);
3a111838
MS
2631 if (!has_start_post && r < 0) {
2632 r = service_demand_pid_file(s);
2633 if (r < 0 || !cgroup_good(s))
f42806df 2634 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3a111838
MS
2635 break;
2636 }
034c6ed7 2637 } else
efdb0237 2638 (void) service_search_main_pid(s);
034c6ed7 2639
3a111838 2640 service_enter_start_post(s);
034c6ed7
LP
2641 break;
2642
2643 case SERVICE_START_POST:
f42806df
LP
2644 if (f != SERVICE_SUCCESS) {
2645 service_enter_stop(s, f);
2096e009 2646 break;
034c6ed7
LP
2647 }
2648
2096e009 2649 if (s->pid_file) {
f42806df
LP
2650 int r;
2651
2652 r = service_load_pid_file(s, true);
2096e009
MS
2653 if (r < 0) {
2654 r = service_demand_pid_file(s);
2655 if (r < 0 || !cgroup_good(s))
f42806df 2656 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2096e009
MS
2657 break;
2658 }
2659 } else
efdb0237 2660 (void) service_search_main_pid(s);
2096e009 2661
f42806df 2662 service_enter_running(s, SERVICE_SUCCESS);
3185a36b 2663 break;
034c6ed7
LP
2664
2665 case SERVICE_RELOAD:
f42806df 2666 if (f == SERVICE_SUCCESS) {
5375410b 2667 service_load_pid_file(s, true);
efdb0237 2668 (void) service_search_main_pid(s);
3185a36b
LP
2669 }
2670
f42806df
LP
2671 s->reload_result = f;
2672 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2673 break;
2674
2675 case SERVICE_STOP:
f42806df 2676 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
2677 break;
2678
db2cb23b 2679 case SERVICE_STOP_SIGABRT:
034c6ed7
LP
2680 case SERVICE_STOP_SIGTERM:
2681 case SERVICE_STOP_SIGKILL:
2682 if (main_pid_good(s) <= 0)
f42806df 2683 service_enter_stop_post(s, f);
034c6ed7
LP
2684
2685 /* If there is still a service
2686 * process around, wait until
2687 * that one quit, too */
2688 break;
2689
2690 case SERVICE_STOP_POST:
2691 case SERVICE_FINAL_SIGTERM:
2692 case SERVICE_FINAL_SIGKILL:
bf108e55
LP
2693 if (main_pid_good(s) <= 0)
2694 service_enter_dead(s, f, true);
034c6ed7
LP
2695 break;
2696
2697 default:
2698 assert_not_reached("Uh, control process died at wrong time.");
2699 }
2700 }
8c47c732 2701 }
c4e2ceae
LP
2702
2703 /* Notify clients about changed exit status */
2704 unit_add_to_dbus_queue(u);
a911bb9a
LP
2705
2706 /* We got one SIGCHLD for the service, let's watch all
2707 * processes that are now running of the service, and watch
2708 * that. Among the PIDs we then watch will be children
2709 * reassigned to us, which hopefully allows us to identify
2710 * when all children are gone */
2711 unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
2712 unit_watch_all_pids(u);
2713
2714 /* If the PID set is empty now, then let's finish this off */
2715 if (set_isempty(u->pids))
2716 service_notify_cgroup_empty_event(u);
034c6ed7
LP
2717}
2718
718db961
LP
2719static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
2720 Service *s = SERVICE(userdata);
034c6ed7
LP
2721
2722 assert(s);
718db961 2723 assert(source == s->timer_event_source);
034c6ed7
LP
2724
2725 switch (s->state) {
2726
2727 case SERVICE_START_PRE:
2728 case SERVICE_START:
f2341e0a 2729 log_unit_warning(UNIT(s), "%s operation timed out. Terminating.", s->state == SERVICE_START ? "Start" : "Start-pre");
f42806df 2730 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
80876c20
LP
2731 break;
2732
034c6ed7 2733 case SERVICE_START_POST:
f2341e0a 2734 log_unit_warning(UNIT(s), "Start-post operation timed out. Stopping.");
f42806df 2735 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2736 break;
2737
e2f3b44c 2738 case SERVICE_RELOAD:
f2341e0a 2739 log_unit_warning(UNIT(s), "Reload operation timed out. Stopping.");
478b6192
EV
2740 service_unwatch_control_pid(s);
2741 service_kill_control_processes(s);
f42806df
LP
2742 s->reload_result = SERVICE_FAILURE_TIMEOUT;
2743 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c
LP
2744 break;
2745
034c6ed7 2746 case SERVICE_STOP:
f2341e0a 2747 log_unit_warning(UNIT(s), "Stopping timed out. Terminating.");
f42806df 2748 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2749 break;
2750
db2cb23b 2751 case SERVICE_STOP_SIGABRT:
f2341e0a 2752 log_unit_warning(UNIT(s), "State 'stop-sigabrt' timed out. Terminating.");
2ab2ab7b 2753 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
db2cb23b
UTL
2754 break;
2755
034c6ed7 2756 case SERVICE_STOP_SIGTERM:
4819ff03 2757 if (s->kill_context.send_sigkill) {
f2341e0a 2758 log_unit_warning(UNIT(s), "State 'stop-sigterm' timed out. Killing.");
f42806df 2759 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 2760 } else {
f2341e0a 2761 log_unit_warning(UNIT(s), "State 'stop-sigterm' timed out. Skipping SIGKILL.");
f42806df 2762 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
ba035df2
LP
2763 }
2764
034c6ed7
LP
2765 break;
2766
2767 case SERVICE_STOP_SIGKILL:
35b8ca3a 2768 /* Uh, we sent a SIGKILL and it is still not gone?
034c6ed7
LP
2769 * Must be something we cannot kill, so let's just be
2770 * weirded out and continue */
2771
f2341e0a 2772 log_unit_warning(UNIT(s), "Processes still around after SIGKILL. Ignoring.");
f42806df 2773 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2774 break;
2775
2776 case SERVICE_STOP_POST:
f2341e0a 2777 log_unit_warning(UNIT(s), "State 'stop-post' timed out. Terminating.");
f42806df 2778 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
2779 break;
2780
2781 case SERVICE_FINAL_SIGTERM:
4819ff03 2782 if (s->kill_context.send_sigkill) {
f2341e0a 2783 log_unit_warning(UNIT(s), "State 'stop-final-sigterm' timed out. Killing.");
f42806df 2784 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 2785 } else {
f2341e0a 2786 log_unit_warning(UNIT(s), "State 'stop-final-sigterm' timed out. Skipping SIGKILL. Entering failed mode.");
f42806df 2787 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
ba035df2
LP
2788 }
2789
034c6ed7
LP
2790 break;
2791
2792 case SERVICE_FINAL_SIGKILL:
f2341e0a 2793 log_unit_warning(UNIT(s), "Processes still around after final SIGKILL. Entering failed mode.");
f42806df 2794 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
034c6ed7
LP
2795 break;
2796
2797 case SERVICE_AUTO_RESTART:
f2341e0a 2798 log_unit_info(UNIT(s),
ef417cfd 2799 s->restart_usec > 0 ?
f2341e0a
LP
2800 "Service hold-off time over, scheduling restart." :
2801 "Service has no hold-off time, scheduling restart.");
034c6ed7
LP
2802 service_enter_restart(s);
2803 break;
2804
2805 default:
2806 assert_not_reached("Timeout at wrong time.");
2807 }
718db961
LP
2808
2809 return 0;
2810}
2811
2812static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
2813 Service *s = SERVICE(userdata);
a7850c7d 2814 char t[FORMAT_TIMESPAN_MAX];
718db961
LP
2815
2816 assert(s);
2817 assert(source == s->watchdog_event_source);
2818
f2341e0a 2819 log_unit_error(UNIT(s), "Watchdog timeout (limit %s)!",
a7850c7d 2820 format_timespan(t, sizeof(t), s->watchdog_usec, 1));
8bb2d17d 2821
db2cb23b 2822 service_enter_signal(s, SERVICE_STOP_SIGABRT, SERVICE_FAILURE_WATCHDOG);
842129f5 2823
718db961 2824 return 0;
5cb5a6ff
LP
2825}
2826
a354329f 2827static void service_notify_message(Unit *u, pid_t pid, char **tags, FDSet *fds) {
8c47c732 2828 Service *s = SERVICE(u);
308d72dc 2829 _cleanup_free_ char *cc = NULL;
30b5275a 2830 bool notify_dbus = false;
308d72dc 2831 const char *e;
8c47c732
LP
2832
2833 assert(u);
2834
308d72dc 2835 cc = strv_join(tags, ", ");
da13d4d2 2836
c952c6ec 2837 if (s->notify_access == NOTIFY_NONE) {
f2341e0a 2838 log_unit_warning(u, "Got notification message from PID "PID_FMT", but reception is disabled.", pid);
c952c6ec 2839 return;
34959677 2840 } else if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
336c6e46 2841 if (s->main_pid != 0)
f2341e0a 2842 log_unit_warning(u, "Got notification message from PID "PID_FMT", but reception only permitted for main PID "PID_FMT, pid, s->main_pid);
336c6e46 2843 else
f2341e0a 2844 log_unit_debug(u, "Got notification message from PID "PID_FMT", but reception only permitted for main PID which is currently not known", pid);
c952c6ec 2845 return;
34959677
TG
2846 } else
2847 log_unit_debug(u, "Got notification message from PID "PID_FMT" (%s)", pid, isempty(cc) ? "n/a" : cc);
c952c6ec 2848
8c47c732 2849 /* Interpret MAINPID= */
28849dba 2850 e = strv_find_startswith(tags, "MAINPID=");
5e56b378 2851 if (e && IN_SET(s->state, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD)) {
28849dba 2852 if (parse_pid(e, &pid) < 0)
f2341e0a 2853 log_unit_warning(u, "Failed to parse MAINPID= field in notification message: %s", e);
8c47c732 2854 else {
5925dd3c 2855 service_set_main_pid(s, pid);
7400b9d2 2856 unit_watch_pid(UNIT(s), pid);
30b5275a 2857 notify_dbus = true;
8c47c732
LP
2858 }
2859 }
2860
308d72dc
LP
2861 /* Interpret RELOADING= */
2862 if (strv_find(tags, "RELOADING=1")) {
2863
308d72dc
LP
2864 s->notify_state = NOTIFY_RELOADING;
2865
2866 if (s->state == SERVICE_RUNNING)
2867 service_enter_reload_by_notify(s);
2868
2869 notify_dbus = true;
2870 }
2871
8c47c732 2872 /* Interpret READY= */
308d72dc
LP
2873 if (strv_find(tags, "READY=1")) {
2874
308d72dc
LP
2875 s->notify_state = NOTIFY_READY;
2876
2877 /* Type=notify services inform us about completed
2878 * initialization with READY=1 */
2879 if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START)
2880 service_enter_start_post(s);
2881
2882 /* Sending READY=1 while we are reloading informs us
2883 * that the reloading is complete */
2884 if (s->state == SERVICE_RELOAD && s->control_pid == 0)
2885 service_enter_running(s, SERVICE_SUCCESS);
2886
2887 notify_dbus = true;
2888 }
2889
2890 /* Interpret STOPPING= */
2891 if (strv_find(tags, "STOPPING=1")) {
2892
308d72dc
LP
2893 s->notify_state = NOTIFY_STOPPING;
2894
2895 if (s->state == SERVICE_RUNNING)
2896 service_enter_stop_by_notify(s);
2897
30b5275a 2898 notify_dbus = true;
8c47c732
LP
2899 }
2900
2901 /* Interpret STATUS= */
28849dba 2902 e = strv_find_startswith(tags, "STATUS=");
7f110ff9 2903 if (e) {
28849dba 2904 _cleanup_free_ char *t = NULL;
8c47c732 2905
28849dba
LP
2906 if (!isempty(e)) {
2907 if (!utf8_is_valid(e))
f2341e0a 2908 log_unit_warning(u, "Status message in notification message is not UTF-8 clean.");
28849dba 2909 else {
28849dba
LP
2910 t = strdup(e);
2911 if (!t)
2912 log_oom();
3a2776bc 2913 }
28849dba 2914 }
8c47c732 2915
30b5275a 2916 if (!streq_ptr(s->status_text, t)) {
28849dba 2917
3a2776bc
LP
2918 free(s->status_text);
2919 s->status_text = t;
28849dba
LP
2920 t = NULL;
2921
30b5275a 2922 notify_dbus = true;
28849dba 2923 }
8c47c732 2924 }
842129f5 2925
4774e357 2926 /* Interpret ERRNO= */
28849dba 2927 e = strv_find_startswith(tags, "ERRNO=");
4774e357
MAA
2928 if (e) {
2929 int status_errno;
2930
28849dba 2931 if (safe_atoi(e, &status_errno) < 0 || status_errno < 0)
f2341e0a 2932 log_unit_warning(u, "Failed to parse ERRNO= field in notification message: %s", e);
4774e357 2933 else {
4774e357
MAA
2934 if (s->status_errno != status_errno) {
2935 s->status_errno = status_errno;
2936 notify_dbus = true;
2937 }
2938 }
2939 }
2940
6f285378 2941 /* Interpret WATCHDOG= */
1f6b4113 2942 if (strv_find(tags, "WATCHDOG=1"))
842129f5 2943 service_reset_watchdog(s);
c4e2ceae 2944
1f6b4113 2945 if (strv_find(tags, "FDSTORE=1"))
2339fc93 2946 service_add_fd_store_set(s, fds);
a354329f 2947
c4e2ceae 2948 /* Notify clients about changed status or main pid */
30b5275a
LP
2949 if (notify_dbus)
2950 unit_add_to_dbus_queue(u);
8c47c732
LP
2951}
2952
68db7a3b
ZJS
2953static int service_get_timeout(Unit *u, uint64_t *timeout) {
2954 Service *s = SERVICE(u);
2955 int r;
2956
2957 if (!s->timer_event_source)
2958 return 0;
2959
2960 r = sd_event_source_get_time(s->timer_event_source, timeout);
2961 if (r < 0)
2962 return r;
2963
2964 return 1;
2965}
2966
05e343b7
LP
2967static void service_bus_name_owner_change(
2968 Unit *u,
2969 const char *name,
2970 const char *old_owner,
2971 const char *new_owner) {
2972
2973 Service *s = SERVICE(u);
718db961 2974 int r;
05e343b7
LP
2975
2976 assert(s);
2977 assert(name);
2978
2979 assert(streq(s->bus_name, name));
2980 assert(old_owner || new_owner);
2981
2982 if (old_owner && new_owner)
f2341e0a 2983 log_unit_debug(u, "D-Bus name %s changed owner from %s to %s", name, old_owner, new_owner);
05e343b7 2984 else if (old_owner)
f2341e0a 2985 log_unit_debug(u, "D-Bus name %s no longer registered by %s", name, old_owner);
05e343b7 2986 else
f2341e0a 2987 log_unit_debug(u, "D-Bus name %s now registered by %s", name, new_owner);
05e343b7
LP
2988
2989 s->bus_name_good = !!new_owner;
2990
2991 if (s->type == SERVICE_DBUS) {
2992
2993 /* service_enter_running() will figure out what to
2994 * do */
2995 if (s->state == SERVICE_RUNNING)
f42806df 2996 service_enter_running(s, SERVICE_SUCCESS);
05e343b7
LP
2997 else if (s->state == SERVICE_START && new_owner)
2998 service_enter_start_post(s);
2999
3000 } else if (new_owner &&
3001 s->main_pid <= 0 &&
3002 (s->state == SERVICE_START ||
3003 s->state == SERVICE_START_POST ||
3004 s->state == SERVICE_RUNNING ||
3005 s->state == SERVICE_RELOAD)) {
3006
5b12334d 3007 _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
718db961 3008 pid_t pid;
05e343b7 3009
718db961 3010 /* Try to acquire PID from bus service */
05e343b7 3011
056f95d0 3012 r = sd_bus_get_name_creds(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
5b12334d
LP
3013 if (r >= 0)
3014 r = sd_bus_creds_get_pid(creds, &pid);
718db961 3015 if (r >= 0) {
f2341e0a 3016 log_unit_debug(u, "D-Bus name %s is now owned by process %u", name, (unsigned) pid);
05e343b7 3017
718db961
LP
3018 service_set_main_pid(s, pid);
3019 unit_watch_pid(UNIT(s), pid);
3020 }
7400b9d2 3021 }
05e343b7
LP
3022}
3023
16115b0a 3024int service_set_socket_fd(Service *s, int fd, Socket *sock, bool selinux_context_net) {
79a98c60
LP
3025 _cleanup_free_ char *peer = NULL;
3026 int r;
57020a3a 3027
4f2d528d
LP
3028 assert(s);
3029 assert(fd >= 0);
3030
3031 /* This is called by the socket code when instantiating a new
3032 * service for a stream socket and the socket needs to be
3033 * configured. */
3034
1124fe6f 3035 if (UNIT(s)->load_state != UNIT_LOADED)
4f2d528d
LP
3036 return -EINVAL;
3037
3038 if (s->socket_fd >= 0)
3039 return -EBUSY;
3040
3041 if (s->state != SERVICE_DEAD)
3042 return -EAGAIN;
3043
79a98c60
LP
3044 if (getpeername_pretty(fd, &peer) >= 0) {
3045
3046 if (UNIT(s)->description) {
3047 _cleanup_free_ char *a;
3048
3049 a = strjoin(UNIT(s)->description, " (", peer, ")", NULL);
3050 if (!a)
3051 return -ENOMEM;
3052
3053 r = unit_set_description(UNIT(s), a);
3054 } else
3055 r = unit_set_description(UNIT(s), peer);
3056
3057 if (r < 0)
3058 return r;
3059 }
3060
4f2d528d 3061 s->socket_fd = fd;
16115b0a 3062 s->socket_fd_selinux_context_net = selinux_context_net;
6cf6bbc2 3063
57020a3a
LP
3064 unit_ref_set(&s->accept_socket, UNIT(sock));
3065
3066 return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
4f2d528d
LP
3067}
3068
fdf20a31 3069static void service_reset_failed(Unit *u) {
5632e374
LP
3070 Service *s = SERVICE(u);
3071
3072 assert(s);
3073
fdf20a31 3074 if (s->state == SERVICE_FAILED)
5632e374
LP
3075 service_set_state(s, SERVICE_DEAD);
3076
f42806df
LP
3077 s->result = SERVICE_SUCCESS;
3078 s->reload_result = SERVICE_SUCCESS;
451b34cc
LP
3079
3080 RATELIMIT_RESET(s->start_limit);
5632e374
LP
3081}
3082
718db961 3083static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
8a0867d6 3084 Service *s = SERVICE(u);
41efeaec 3085
814cc562 3086 return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
8a0867d6
LP
3087}
3088
94f04347 3089static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
525ee6f4
LP
3090 [SERVICE_RESTART_NO] = "no",
3091 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
50caaedb 3092 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
6cfe2fde 3093 [SERVICE_RESTART_ON_ABNORMAL] = "on-abnormal",
dc99a976 3094 [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
50caaedb 3095 [SERVICE_RESTART_ON_ABORT] = "on-abort",
6cfe2fde 3096 [SERVICE_RESTART_ALWAYS] = "always",
94f04347
LP
3097};
3098
3099DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3100
3101static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
94f04347 3102 [SERVICE_SIMPLE] = "simple",
0d624a78 3103 [SERVICE_FORKING] = "forking",
34e9ba66 3104 [SERVICE_ONESHOT] = "oneshot",
8c47c732 3105 [SERVICE_DBUS] = "dbus",
f2b68789
LP
3106 [SERVICE_NOTIFY] = "notify",
3107 [SERVICE_IDLE] = "idle"
94f04347
LP
3108};
3109
3110DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3111
e537352b 3112static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
94f04347
LP
3113 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
3114 [SERVICE_EXEC_START] = "ExecStart",
3115 [SERVICE_EXEC_START_POST] = "ExecStartPost",
3116 [SERVICE_EXEC_RELOAD] = "ExecReload",
3117 [SERVICE_EXEC_STOP] = "ExecStop",
3118 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3119};
3120
3121DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3122
c952c6ec
LP
3123static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
3124 [NOTIFY_NONE] = "none",
3125 [NOTIFY_MAIN] = "main",
3126 [NOTIFY_ALL] = "all"
3127};
3128
3129DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
3130
308d72dc
LP
3131static const char* const notify_state_table[_NOTIFY_STATE_MAX] = {
3132 [NOTIFY_UNKNOWN] = "unknown",
3133 [NOTIFY_READY] = "ready",
3134 [NOTIFY_RELOADING] = "reloading",
3135 [NOTIFY_STOPPING] = "stopping",
3136};
3137
3138DEFINE_STRING_TABLE_LOOKUP(notify_state, NotifyState);
3139
f42806df
LP
3140static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3141 [SERVICE_SUCCESS] = "success",
3142 [SERVICE_FAILURE_RESOURCES] = "resources",
3143 [SERVICE_FAILURE_TIMEOUT] = "timeout",
3144 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3145 [SERVICE_FAILURE_SIGNAL] = "signal",
bb242b7b 3146 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
8d1b002a
LP
3147 [SERVICE_FAILURE_WATCHDOG] = "watchdog",
3148 [SERVICE_FAILURE_START_LIMIT] = "start-limit"
f42806df
LP
3149};
3150
3151DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3152
87f0e418 3153const UnitVTable service_vtable = {
7d17cfbc 3154 .object_size = sizeof(Service),
718db961
LP
3155 .exec_context_offset = offsetof(Service, exec_context),
3156 .cgroup_context_offset = offsetof(Service, cgroup_context),
3157 .kill_context_offset = offsetof(Service, kill_context),
613b411c 3158 .exec_runtime_offset = offsetof(Service, exec_runtime),
3ef63c31 3159
f975e971
LP
3160 .sections =
3161 "Unit\0"
3162 "Service\0"
3163 "Install\0",
4ad49000 3164 .private_section = "Service",
71645aca 3165
034c6ed7
LP
3166 .init = service_init,
3167 .done = service_done,
a16e1123 3168 .load = service_load,
a354329f 3169 .release_resources = service_release_resources,
a16e1123
LP
3170
3171 .coldplug = service_coldplug,
034c6ed7 3172
5cb5a6ff
LP
3173 .dump = service_dump,
3174
3175 .start = service_start,
3176 .stop = service_stop,
3177 .reload = service_reload,
3178
034c6ed7
LP
3179 .can_reload = service_can_reload,
3180
8a0867d6
LP
3181 .kill = service_kill,
3182
a16e1123
LP
3183 .serialize = service_serialize,
3184 .deserialize_item = service_deserialize_item,
3185
5cb5a6ff 3186 .active_state = service_active_state,
10a94420 3187 .sub_state_to_string = service_sub_state_to_string,
5cb5a6ff 3188
701cc384
LP
3189 .check_gc = service_check_gc,
3190 .check_snapshot = service_check_snapshot,
3191
034c6ed7 3192 .sigchld_event = service_sigchld_event,
2c4104f0 3193
fdf20a31 3194 .reset_failed = service_reset_failed,
5632e374 3195
4ad49000 3196 .notify_cgroup_empty = service_notify_cgroup_empty_event,
8c47c732 3197 .notify_message = service_notify_message,
8e274523 3198
05e343b7 3199 .bus_name_owner_change = service_bus_name_owner_change,
05e343b7 3200
718db961 3201 .bus_vtable = bus_service_vtable,
74c964d3
LP
3202 .bus_set_property = bus_service_set_property,
3203 .bus_commit_properties = bus_service_commit_properties,
4139c1b2 3204
68db7a3b 3205 .get_timeout = service_get_timeout,
718db961
LP
3206 .can_transient = true,
3207
c6918296
MS
3208 .status_message_formats = {
3209 .starting_stopping = {
3210 [0] = "Starting %s...",
3211 [1] = "Stopping %s...",
3212 },
3213 .finished_start_job = {
3214 [JOB_DONE] = "Started %s.",
3215 [JOB_FAILED] = "Failed to start %s.",
c6918296
MS
3216 },
3217 .finished_stop_job = {
3218 [JOB_DONE] = "Stopped %s.",
3219 [JOB_FAILED] = "Stopped (with error) %s.",
c6918296
MS
3220 },
3221 },
5cb5a6ff 3222};