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