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