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