]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/service.c
systemctl: small cleanup
[thirdparty/systemd.git] / src / core / service.c
CommitLineData
d6c9574f 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
5cb5a6ff 2
a7334b09
LP
3/***
4 This file is part of systemd.
5
6 Copyright 2010 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
a7334b09
LP
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 16 Lesser General Public License for more details.
a7334b09 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
5cb5a6ff 22#include <errno.h>
034c6ed7 23#include <signal.h>
2c4104f0
LP
24#include <dirent.h>
25#include <unistd.h>
4b939747 26#include <sys/reboot.h>
efe6e7d3
MO
27#include <linux/reboot.h>
28#include <sys/syscall.h>
5cb5a6ff 29
4b939747 30#include "manager.h"
87f0e418 31#include "unit.h"
5cb5a6ff
LP
32#include "service.h"
33#include "load-fragment.h"
34#include "load-dropin.h"
034c6ed7 35#include "log.h"
2c4104f0 36#include "strv.h"
9e2f7c11 37#include "unit-name.h"
41f9172f 38#include "unit-printf.h"
4139c1b2 39#include "dbus-service.h"
514f4ef5 40#include "special.h"
9a57c629 41#include "exit-status.h"
f6a6225e 42#include "def.h"
9eb977db 43#include "path-util.h"
f6a6225e 44#include "util.h"
7f110ff9 45#include "utf8.h"
4d1a6904 46#include "env-util.h"
a5c32cff 47#include "fileio.h"
718db961
LP
48#include "bus-error.h"
49#include "bus-util.h"
034c6ed7 50
07459bb6 51#ifdef HAVE_SYSV_COMPAT
f34277d9 52
f6a6225e 53#define DEFAULT_SYSV_TIMEOUT_USEC (5*USEC_PER_MINUTE)
f34277d9 54
09cd1ab1
LP
55typedef enum RunlevelType {
56 RUNLEVEL_UP,
3cdebc21 57 RUNLEVEL_DOWN
09cd1ab1
LP
58} RunlevelType;
59
60static const struct {
61 const char *path;
62 const char *target;
63 const RunlevelType type;
64} rcnd_table[] = {
9d25f5ed 65 /* Standard SysV runlevels for start-up */
514f4ef5 66 { "rc1.d", SPECIAL_RESCUE_TARGET, RUNLEVEL_UP },
fbe9f3a9
LP
67 { "rc2.d", SPECIAL_RUNLEVEL2_TARGET, RUNLEVEL_UP },
68 { "rc3.d", SPECIAL_RUNLEVEL3_TARGET, RUNLEVEL_UP },
69 { "rc4.d", SPECIAL_RUNLEVEL4_TARGET, RUNLEVEL_UP },
70 { "rc5.d", SPECIAL_RUNLEVEL5_TARGET, RUNLEVEL_UP },
fbe9f3a9 71
9d25f5ed
LP
72 /* Standard SysV runlevels for shutdown */
73 { "rc0.d", SPECIAL_POWEROFF_TARGET, RUNLEVEL_DOWN },
74 { "rc6.d", SPECIAL_REBOOT_TARGET, RUNLEVEL_DOWN }
75
76 /* Note that the order here matters, as we read the
77 directories in this order, and we want to make sure that
78 sysv_start_priority is known when we first load the
79 unit. And that value we only know from S links. Hence
3cdebc21 80 UP must be read before DOWN */
23a177ef
LP
81};
82
09cd1ab1 83#define RUNLEVELS_UP "12345"
07459bb6 84#endif
09cd1ab1 85
acbb0225 86static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
87f0e418
LP
87 [SERVICE_DEAD] = UNIT_INACTIVE,
88 [SERVICE_START_PRE] = UNIT_ACTIVATING,
89 [SERVICE_START] = UNIT_ACTIVATING,
90 [SERVICE_START_POST] = UNIT_ACTIVATING,
91 [SERVICE_RUNNING] = UNIT_ACTIVE,
80876c20 92 [SERVICE_EXITED] = UNIT_ACTIVE,
032ff4af 93 [SERVICE_RELOAD] = UNIT_RELOADING,
87f0e418
LP
94 [SERVICE_STOP] = UNIT_DEACTIVATING,
95 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
96 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
97 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
98 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
99 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
fdf20a31 100 [SERVICE_FAILED] = UNIT_FAILED,
6124958c 101 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
034c6ed7 102};
5cb5a6ff 103
e056b01d
LP
104/* For Type=idle we never want to delay any other jobs, hence we
105 * consider idle jobs active as soon as we start working on them */
106static const UnitActiveState state_translation_table_idle[_SERVICE_STATE_MAX] = {
107 [SERVICE_DEAD] = UNIT_INACTIVE,
108 [SERVICE_START_PRE] = UNIT_ACTIVE,
109 [SERVICE_START] = UNIT_ACTIVE,
110 [SERVICE_START_POST] = UNIT_ACTIVE,
111 [SERVICE_RUNNING] = UNIT_ACTIVE,
112 [SERVICE_EXITED] = UNIT_ACTIVE,
113 [SERVICE_RELOAD] = UNIT_RELOADING,
114 [SERVICE_STOP] = UNIT_DEACTIVATING,
115 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
116 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
117 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
118 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
119 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
120 [SERVICE_FAILED] = UNIT_FAILED,
121 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
122};
123
718db961
LP
124static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata);
125static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata);
126static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata);
127
842129f5
LP
128static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
129
a16e1123
LP
130static void service_init(Unit *u) {
131 Service *s = SERVICE(u);
132
133 assert(u);
ac155bb8 134 assert(u->load_state == UNIT_STUB);
a16e1123 135
1f19a534
OS
136 s->timeout_start_usec = u->manager->default_timeout_start_usec;
137 s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
138 s->restart_usec = u->manager->default_restart_usec;
0b86feac 139 s->type = _SERVICE_TYPE_INVALID;
bb242b7b 140
07459bb6 141#ifdef HAVE_SYSV_COMPAT
a16e1123 142 s->sysv_start_priority = -1;
ea87ca5a 143 s->sysv_start_priority_from_rcnd = -1;
07459bb6 144#endif
a16e1123 145 s->socket_fd = -1;
3185a36b 146 s->guess_main_pid = true;
a16e1123 147
085afe36 148 RATELIMIT_INIT(s->start_limit, u->manager->default_start_limit_interval, u->manager->default_start_limit_burst);
a16e1123
LP
149
150 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
151}
152
5e94833f
LP
153static void service_unwatch_control_pid(Service *s) {
154 assert(s);
155
156 if (s->control_pid <= 0)
157 return;
158
159 unit_unwatch_pid(UNIT(s), s->control_pid);
160 s->control_pid = 0;
161}
162
163static void service_unwatch_main_pid(Service *s) {
164 assert(s);
165
166 if (s->main_pid <= 0)
167 return;
168
169 unit_unwatch_pid(UNIT(s), s->main_pid);
170 s->main_pid = 0;
171}
172
3e52541e
MS
173static void service_unwatch_pid_file(Service *s) {
174 if (!s->pid_file_pathspec)
175 return;
176
66870f90
ZJS
177 log_debug_unit(UNIT(s)->id, "Stopping watch for %s's PID file %s",
178 UNIT(s)->id, s->pid_file_pathspec->path);
718db961 179 path_spec_unwatch(s->pid_file_pathspec);
3e52541e
MS
180 path_spec_done(s->pid_file_pathspec);
181 free(s->pid_file_pathspec);
182 s->pid_file_pathspec = NULL;
183}
184
5925dd3c 185static int service_set_main_pid(Service *s, pid_t pid) {
e55224ca
LP
186 pid_t ppid;
187
5925dd3c
LP
188 assert(s);
189
190 if (pid <= 1)
191 return -EINVAL;
192
193 if (pid == getpid())
194 return -EINVAL;
195
7400b9d2
LP
196 if (s->main_pid == pid && s->main_pid_known)
197 return 0;
198
199 if (s->main_pid != pid) {
200 service_unwatch_main_pid(s);
201 exec_status_start(&s->main_exec_status, pid);
202 }
41efeaec 203
6dfa5494
LP
204 s->main_pid = pid;
205 s->main_pid_known = true;
206
207 if (get_parent_of_pid(pid, &ppid) >= 0 && ppid != getpid()) {
66870f90 208 log_warning_unit(UNIT(s)->id,
ccd06097
ZJS
209 "%s: Supervising process "PID_FMT" which is not our child. We'll most likely not notice when it exits.",
210 UNIT(s)->id, pid);
e55224ca 211
6dfa5494
LP
212 s->main_pid_alien = true;
213 } else
214 s->main_pid_alien = false;
5925dd3c
LP
215
216 return 0;
217}
218
4f2d528d
LP
219static void service_close_socket_fd(Service *s) {
220 assert(s);
221
222 if (s->socket_fd < 0)
223 return;
224
03e334a1 225 s->socket_fd = safe_close(s->socket_fd);
4f2d528d
LP
226}
227
6cf6bbc2
LP
228static void service_connection_unref(Service *s) {
229 assert(s);
230
9444b1f2 231 if (!UNIT_ISSET(s->accept_socket))
6cf6bbc2
LP
232 return;
233
57020a3a
LP
234 socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
235 unit_ref_unset(&s->accept_socket);
6cf6bbc2
LP
236}
237
a6927d7f
MO
238static void service_stop_watchdog(Service *s) {
239 assert(s);
240
718db961 241 s->watchdog_event_source = sd_event_source_unref(s->watchdog_event_source);
842129f5 242 s->watchdog_timestamp = DUAL_TIMESTAMP_NULL;
a6927d7f
MO
243}
244
842129f5 245static void service_start_watchdog(Service *s) {
bb242b7b
MO
246 int r;
247
248 assert(s);
249
842129f5 250 if (s->watchdog_usec <= 0)
bb242b7b
MO
251 return;
252
718db961
LP
253 if (s->watchdog_event_source) {
254 r = sd_event_source_set_time(s->watchdog_event_source, s->watchdog_timestamp.monotonic + s->watchdog_usec);
255 if (r < 0) {
256 log_warning_unit(UNIT(s)->id, "%s failed to reset watchdog timer: %s", UNIT(s)->id, strerror(-r));
257 return;
258 }
259
842129f5 260 r = sd_event_source_set_enabled(s->watchdog_event_source, SD_EVENT_ONESHOT);
c4ef3317 261 } else {
6a0f1f6d
LP
262 r = sd_event_add_time(
263 UNIT(s)->manager->event,
264 &s->watchdog_event_source,
265 CLOCK_MONOTONIC,
266 s->watchdog_timestamp.monotonic + s->watchdog_usec, 0,
267 service_dispatch_watchdog, s);
c4ef3317
LP
268 if (r < 0) {
269 log_warning_unit(UNIT(s)->id, "%s failed to add watchdog timer: %s", UNIT(s)->id, strerror(-r));
270 return;
271 }
272
273 /* Let's process everything else which might be a sign
274 * of living before we consider a service died. */
275 r = sd_event_source_set_priority(s->watchdog_event_source, SD_EVENT_PRIORITY_IDLE);
276 }
718db961 277
bb242b7b 278 if (r < 0)
842129f5 279 log_warning_unit(UNIT(s)->id, "%s failed to install watchdog timer: %s", UNIT(s)->id, strerror(-r));
bb242b7b
MO
280}
281
a6927d7f
MO
282static void service_reset_watchdog(Service *s) {
283 assert(s);
284
285 dual_timestamp_get(&s->watchdog_timestamp);
842129f5 286 service_start_watchdog(s);
a6927d7f
MO
287}
288
87f0e418
LP
289static void service_done(Unit *u) {
290 Service *s = SERVICE(u);
44d8db9e
LP
291
292 assert(s);
293
294 free(s->pid_file);
295 s->pid_file = NULL;
296
07459bb6 297#ifdef HAVE_SYSV_COMPAT
8309400a
LP
298 free(s->sysv_runlevels);
299 s->sysv_runlevels = NULL;
07459bb6 300#endif
8309400a 301
8c47c732
LP
302 free(s->status_text);
303 s->status_text = NULL;
304
efe6e7d3
MO
305 free(s->reboot_arg);
306 s->reboot_arg = NULL;
307
613b411c 308 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
e537352b 309 exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
44d8db9e 310 s->control_command = NULL;
867b3b7d 311 s->main_command = NULL;
44d8db9e 312
96342de6
LN
313 set_free(s->restart_ignore_status.code);
314 s->restart_ignore_status.code = NULL;
315 set_free(s->restart_ignore_status.signal);
316 s->restart_ignore_status.signal = NULL;
317
318 set_free(s->success_status.code);
319 s->success_status.code = NULL;
320 set_free(s->success_status.signal);
321 s->success_status.signal = NULL;
322
44d8db9e
LP
323 /* This will leak a process, but at least no memory or any of
324 * our resources */
5e94833f
LP
325 service_unwatch_main_pid(s);
326 service_unwatch_control_pid(s);
3e52541e 327 service_unwatch_pid_file(s);
44d8db9e 328
05e343b7 329 if (s->bus_name) {
ac155bb8 330 unit_unwatch_bus_name(u, s->bus_name);
05e343b7
LP
331 free(s->bus_name);
332 s->bus_name = NULL;
333 }
334
4f2d528d 335 service_close_socket_fd(s);
6cf6bbc2 336 service_connection_unref(s);
4f2d528d 337
57020a3a 338 unit_ref_unset(&s->accept_socket);
f976f3f6 339
bb242b7b
MO
340 service_stop_watchdog(s);
341
718db961
LP
342 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
343}
344
345static int service_arm_timer(Service *s, usec_t usec) {
346 int r;
347
348 assert(s);
349
718db961
LP
350 if (s->timer_event_source) {
351 r = sd_event_source_set_time(s->timer_event_source, now(CLOCK_MONOTONIC) + usec);
352 if (r < 0)
353 return r;
354
355 return sd_event_source_set_enabled(s->timer_event_source, SD_EVENT_ONESHOT);
356 }
357
6a0f1f6d
LP
358 return sd_event_add_time(
359 UNIT(s)->manager->event,
360 &s->timer_event_source,
361 CLOCK_MONOTONIC,
362 now(CLOCK_MONOTONIC) + usec, 0,
363 service_dispatch_timer, s);
44d8db9e
LP
364}
365
07459bb6 366#ifdef HAVE_SYSV_COMPAT
b7ccee3c
LP
367static char *sysv_translate_name(const char *name) {
368 char *r;
369
f8294e41 370 r = new(char, strlen(name) + strlen(".service") + 1);
5d4caf56 371 if (!r)
b7ccee3c
LP
372 return NULL;
373
5b819198 374 if (endswith(name, ".sh"))
85a3fa0e 375 /* Drop .sh suffix */
5b819198 376 strcpy(stpcpy(r, name) - 3, ".service");
b7ccee3c 377 else
85a3fa0e 378 /* Normal init script name */
b7ccee3c
LP
379 strcpy(stpcpy(r, name), ".service");
380
381 return r;
382}
383
ee95669f 384static int sysv_translate_facility(const char *name, const char *filename, char **_r) {
2c4104f0 385
a7d3cc26
LP
386 /* We silently ignore the $ prefix here. According to the LSB
387 * spec it simply indicates whether something is a
388 * standardized name or a distribution-specific one. Since we
389 * just follow what already exists and do not introduce new
390 * uses or names we don't care who introduced a new name. */
391
2c4104f0 392 static const char * const table[] = {
6464aa08 393 /* LSB defined facilities */
5d4caf56 394 "local_fs", NULL,
0404c609 395 "network", SPECIAL_NETWORK_ONLINE_TARGET,
a7d3cc26
LP
396 "named", SPECIAL_NSS_LOOKUP_TARGET,
397 "portmap", SPECIAL_RPCBIND_TARGET,
398 "remote_fs", SPECIAL_REMOTE_FS_TARGET,
5d4caf56 399 "syslog", NULL,
4466194c 400 "time", SPECIAL_TIME_SYNC_TARGET,
2c4104f0
LP
401 };
402
403 unsigned i;
404 char *r;
ee95669f 405 const char *n;
2c4104f0 406
ee95669f
LP
407 assert(name);
408 assert(_r);
a7d3cc26 409
ee95669f 410 n = *name == '$' ? name + 1 : name;
a7d3cc26 411
ee95669f 412 for (i = 0; i < ELEMENTSOF(table); i += 2) {
a7d3cc26 413
ee95669f
LP
414 if (!streq(table[i], n))
415 continue;
2c4104f0 416
ee95669f
LP
417 if (!table[i+1])
418 return 0;
419
5d4caf56
LP
420 r = strdup(table[i+1]);
421 if (!r)
422 return log_oom();
ee95669f
LP
423
424 goto finish;
425 }
2c4104f0 426
a7d3cc26 427 /* If we don't know this name, fallback heuristics to figure
0003d1ab 428 * out whether something is a target or a service alias. */
a7d3cc26 429
e83c7c0b
LP
430 if (*name == '$') {
431 if (!unit_prefix_is_valid(n))
432 return -EINVAL;
433
ee95669f
LP
434 /* Facilities starting with $ are most likely targets */
435 r = unit_name_build(n, NULL, ".target");
e83c7c0b 436 } else if (filename && streq(name, filename))
35b8ca3a 437 /* Names equaling the file name of the services are redundant */
ee95669f 438 return 0;
32159d3a 439 else
ee95669f
LP
440 /* Everything else we assume to be normal service names */
441 r = sysv_translate_name(n);
2c4104f0 442
32159d3a 443 if (!r)
2c4104f0
LP
444 return -ENOMEM;
445
446finish:
b4353094 447 *_r = r;
2c4104f0
LP
448
449 return 1;
450}
451
56d748b4 452static int sysv_fix_order(Service *s) {
ac155bb8 453 Unit *other;
2c4104f0
LP
454 int r;
455
456 assert(s);
457
458 if (s->sysv_start_priority < 0)
459 return 0;
460
23a177ef
LP
461 /* For each pair of services where at least one lacks a LSB
462 * header, we use the start priority value to order things. */
2c4104f0 463
1124fe6f 464 LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_SERVICE]) {
2c4104f0
LP
465 Service *t;
466 UnitDependency d;
eeaafddc 467 bool special_s, special_t;
2c4104f0 468
595ed347 469 t = SERVICE(other);
2c4104f0
LP
470
471 if (s == t)
472 continue;
9f151f29 473
1124fe6f 474 if (UNIT(t)->load_state != UNIT_LOADED)
9f151f29 475 continue;
2c4104f0
LP
476
477 if (t->sysv_start_priority < 0)
478 continue;
479
51a1a79d
LP
480 /* If both units have modern headers we don't care
481 * about the priorities */
1124fe6f
MS
482 if ((UNIT(s)->fragment_path || s->sysv_has_lsb) &&
483 (UNIT(t)->fragment_path || t->sysv_has_lsb))
23a177ef
LP
484 continue;
485
eeaafddc
LP
486 special_s = s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels);
487 special_t = t->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, t->sysv_runlevels);
488
489 if (special_t && !special_s)
490 d = UNIT_AFTER;
491 else if (special_s && !special_t)
492 d = UNIT_BEFORE;
493 else if (t->sysv_start_priority < s->sysv_start_priority)
2c4104f0
LP
494 d = UNIT_AFTER;
495 else if (t->sysv_start_priority > s->sysv_start_priority)
496 d = UNIT_BEFORE;
497 else
498 continue;
499
500 /* FIXME: Maybe we should compare the name here lexicographically? */
501
da19d5c1 502 if ((r = unit_add_dependency(UNIT(s), d, UNIT(t), true)) < 0)
2c4104f0
LP
503 return r;
504 }
505
506 return 0;
507}
508
509static ExecCommand *exec_command_new(const char *path, const char *arg1) {
510 ExecCommand *c;
511
512 if (!(c = new0(ExecCommand, 1)))
513 return NULL;
514
515 if (!(c->path = strdup(path))) {
516 free(c);
517 return NULL;
518 }
519
520 if (!(c->argv = strv_new(path, arg1, NULL))) {
521 free(c->path);
522 free(c);
523 return NULL;
524 }
525
526 return c;
527}
528
37e2941d 529static int sysv_exec_commands(Service *s, const bool supports_reload) {
2c4104f0
LP
530 ExecCommand *c;
531
532 assert(s);
1b64d026
LP
533 assert(s->is_sysv);
534 assert(UNIT(s)->source_path);
2c4104f0 535
1b64d026
LP
536 c = exec_command_new(UNIT(s)->source_path, "start");
537 if (!c)
2c4104f0
LP
538 return -ENOMEM;
539 exec_command_append_list(s->exec_command+SERVICE_EXEC_START, c);
540
1b64d026
LP
541 c = exec_command_new(UNIT(s)->source_path, "stop");
542 if (!c)
2c4104f0
LP
543 return -ENOMEM;
544 exec_command_append_list(s->exec_command+SERVICE_EXEC_STOP, c);
545
37e2941d
MS
546 if (supports_reload) {
547 c = exec_command_new(UNIT(s)->source_path, "reload");
548 if (!c)
549 return -ENOMEM;
550 exec_command_append_list(s->exec_command+SERVICE_EXEC_RELOAD, c);
551 }
2c4104f0
LP
552
553 return 0;
554}
555
37e2941d
MS
556static bool usage_contains_reload(const char *line) {
557 return (strcasestr(line, "{reload|") ||
558 strcasestr(line, "{reload}") ||
559 strcasestr(line, "{reload\"") ||
560 strcasestr(line, "|reload|") ||
561 strcasestr(line, "|reload}") ||
562 strcasestr(line, "|reload\""));
563}
564
e537352b 565static int service_load_sysv_path(Service *s, const char *path) {
2c4104f0
LP
566 FILE *f;
567 Unit *u;
568 unsigned line = 0;
569 int r;
570 enum {
571 NORMAL,
572 DESCRIPTION,
573 LSB,
37e2941d
MS
574 LSB_DESCRIPTION,
575 USAGE_CONTINUATION
2c4104f0 576 } state = NORMAL;
0b5d26f9 577 char *short_description = NULL, *long_description = NULL, *chkconfig_description = NULL, *description;
5f4b19f4 578 struct stat st;
37e2941d 579 bool supports_reload = false;
23a177ef
LP
580
581 assert(s);
582 assert(path);
2c4104f0
LP
583
584 u = UNIT(s);
585
1b64d026
LP
586 f = fopen(path, "re");
587 if (!f) {
2c4104f0
LP
588 r = errno == ENOENT ? 0 : -errno;
589 goto finish;
590 }
591
5f4b19f4
LP
592 if (fstat(fileno(f), &st) < 0) {
593 r = -errno;
594 goto finish;
595 }
596
1b64d026
LP
597 free(u->source_path);
598 u->source_path = strdup(path);
599 if (!u->source_path) {
2c4104f0
LP
600 r = -ENOMEM;
601 goto finish;
602 }
1b64d026 603 u->source_mtime = timespec_load(&st.st_mtim);
5f4b19f4
LP
604
605 if (null_or_empty(&st)) {
ac155bb8 606 u->load_state = UNIT_MASKED;
5f4b19f4
LP
607 r = 0;
608 goto finish;
609 }
610
1b64d026
LP
611 s->is_sysv = true;
612
2c4104f0
LP
613 while (!feof(f)) {
614 char l[LINE_MAX], *t;
615
616 if (!fgets(l, sizeof(l), f)) {
617 if (feof(f))
618 break;
619
620 r = -errno;
66870f90
ZJS
621 log_error_unit(u->id,
622 "Failed to read configuration file '%s': %s",
623 path, strerror(-r));
2c4104f0
LP
624 goto finish;
625 }
626
627 line++;
628
629 t = strstrip(l);
37e2941d
MS
630 if (*t != '#') {
631 /* Try to figure out whether this init script supports
632 * the reload operation. This heuristic looks for
633 * "Usage" lines which include the reload option. */
634 if ( state == USAGE_CONTINUATION ||
635 (state == NORMAL && strcasestr(t, "usage"))) {
636 if (usage_contains_reload(t)) {
637 supports_reload = true;
638 state = NORMAL;
639 } else if (t[strlen(t)-1] == '\\')
640 state = USAGE_CONTINUATION;
641 else
642 state = NORMAL;
643 }
644
2c4104f0 645 continue;
37e2941d 646 }
2c4104f0
LP
647
648 if (state == NORMAL && streq(t, "### BEGIN INIT INFO")) {
649 state = LSB;
23a177ef 650 s->sysv_has_lsb = true;
2c4104f0
LP
651 continue;
652 }
653
654 if ((state == LSB_DESCRIPTION || state == LSB) && streq(t, "### END INIT INFO")) {
655 state = NORMAL;
656 continue;
657 }
658
659 t++;
660 t += strspn(t, WHITESPACE);
661
662 if (state == NORMAL) {
663
664 /* Try to parse Red Hat style chkconfig headers */
665
c2b35af6 666 if (startswith_no_case(t, "chkconfig:")) {
2c4104f0 667 int start_priority;
8309400a 668 char runlevels[16], *k;
2c4104f0
LP
669
670 state = NORMAL;
671
1c07b16c
LP
672 if (sscanf(t+10, "%15s %i %*i", runlevels, &start_priority) != 2) {
673 log_warning_unit(u->id, "[%s:%u] Failed to parse chkconfig line. Ignoring.", path, line);
2c4104f0
LP
674 continue;
675 }
676
fbe9f3a9
LP
677 /* A start priority gathered from the
678 * symlink farms is preferred over the
679 * data from the LSB header. */
8309400a 680 if (start_priority < 0 || start_priority > 99)
1c07b16c 681 log_warning_unit(u->id, "[%s:%u] Start priority out of range. Ignoring.", path, line);
ea87ca5a 682 else
1c07b16c 683 log_debug_unit(u->id, "[%s:%u] Ignoring start priority set in the chkconfig file.", path, line);
8309400a
LP
684
685 char_array_0(runlevels);
686 k = delete_chars(runlevels, WHITESPACE "-");
8309400a
LP
687 if (k[0]) {
688 char *d;
689
1c07b16c
LP
690 d = strdup(k);
691 if (!d) {
8309400a
LP
692 r = -ENOMEM;
693 goto finish;
694 }
695
696 free(s->sysv_runlevels);
697 s->sysv_runlevels = d;
2c4104f0
LP
698 }
699
0b5d26f9 700 } else if (startswith_no_case(t, "description:")) {
2c4104f0
LP
701
702 size_t k = strlen(t);
703 char *d;
0b5d26f9 704 const char *j;
2c4104f0
LP
705
706 if (t[k-1] == '\\') {
707 state = DESCRIPTION;
708 t[k-1] = 0;
709 }
710
0b5d26f9
LP
711 if ((j = strstrip(t+12)) && *j) {
712 if (!(d = strdup(j))) {
713 r = -ENOMEM;
714 goto finish;
715 }
716 } else
717 d = NULL;
2c4104f0 718
0b5d26f9
LP
719 free(chkconfig_description);
720 chkconfig_description = d;
2c4104f0 721
c2b35af6 722 } else if (startswith_no_case(t, "pidfile:")) {
2c4104f0
LP
723
724 char *fn;
725
726 state = NORMAL;
727
728 fn = strstrip(t+8);
729 if (!path_is_absolute(fn)) {
66870f90
ZJS
730 log_warning_unit(u->id,
731 "[%s:%u] PID file not absolute. Ignoring.",
732 path, line);
2c4104f0
LP
733 continue;
734 }
735
736 if (!(fn = strdup(fn))) {
737 r = -ENOMEM;
738 goto finish;
739 }
740
741 free(s->pid_file);
742 s->pid_file = fn;
743 }
744
745 } else if (state == DESCRIPTION) {
746
747 /* Try to parse Red Hat style description
748 * continuation */
749
750 size_t k = strlen(t);
0b5d26f9 751 char *j;
2c4104f0
LP
752
753 if (t[k-1] == '\\')
754 t[k-1] = 0;
755 else
756 state = NORMAL;
757
0b5d26f9
LP
758 if ((j = strstrip(t)) && *j) {
759 char *d = NULL;
760
761 if (chkconfig_description)
b7def684 762 d = strjoin(chkconfig_description, " ", j, NULL);
0b5d26f9
LP
763 else
764 d = strdup(j);
2c4104f0 765
0b5d26f9
LP
766 if (!d) {
767 r = -ENOMEM;
768 goto finish;
769 }
770
771 free(chkconfig_description);
772 chkconfig_description = d;
773 }
2c4104f0
LP
774
775 } else if (state == LSB || state == LSB_DESCRIPTION) {
776
c2b35af6 777 if (startswith_no_case(t, "Provides:")) {
2c4104f0
LP
778 char *i, *w;
779 size_t z;
780
781 state = LSB;
782
f60f22df 783 FOREACH_WORD_QUOTED(w, z, t+9, i) {
2c4104f0
LP
784 char *n, *m;
785
786 if (!(n = strndup(w, z))) {
787 r = -ENOMEM;
788 goto finish;
789 }
790
2b6bf07d 791 r = sysv_translate_facility(n, basename(path), &m);
2c4104f0
LP
792 free(n);
793
794 if (r < 0)
795 goto finish;
796
797 if (r == 0)
798 continue;
799
bd77d0fc 800 if (unit_name_to_type(m) == UNIT_SERVICE)
ce2c2265 801 r = unit_merge_by_name(u, m);
9700edb4
LP
802 else
803 /* NB: SysV targets
804 * which are provided
805 * by a service are
806 * pulled in by the
807 * services, as an
808 * indication that the
809 * generic service is
810 * now available. This
811 * is strictly
812 * one-way. The
813 * targets do NOT pull
814 * in the SysV
815 * services! */
816 r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, UNIT_WANTS, m, NULL, true);
bd77d0fc 817
2c4104f0 818 if (r < 0)
66870f90
ZJS
819 log_error_unit(u->id,
820 "[%s:%u] Failed to add LSB Provides name %s, ignoring: %s",
821 path, line, m, strerror(-r));
42a097a2
LP
822
823 free(m);
2c4104f0
LP
824 }
825
c2b35af6
LP
826 } else if (startswith_no_case(t, "Required-Start:") ||
827 startswith_no_case(t, "Should-Start:") ||
828 startswith_no_case(t, "X-Start-Before:") ||
829 startswith_no_case(t, "X-Start-After:")) {
2c4104f0
LP
830 char *i, *w;
831 size_t z;
832
833 state = LSB;
834
f60f22df 835 FOREACH_WORD_QUOTED(w, z, strchr(t, ':')+1, i) {
2c4104f0 836 char *n, *m;
e30bb6b5 837 bool is_before;
2c4104f0
LP
838
839 if (!(n = strndup(w, z))) {
840 r = -ENOMEM;
841 goto finish;
842 }
843
2b6bf07d 844 r = sysv_translate_facility(n, basename(path), &m);
e83c7c0b 845 if (r < 0) {
66870f90
ZJS
846 log_error_unit(u->id,
847 "[%s:%u] Failed to translate LSB dependency %s, ignoring: %s",
848 path, line, n, strerror(-r));
e83c7c0b
LP
849 free(n);
850 continue;
851 }
852
853 free(n);
2c4104f0
LP
854
855 if (r == 0)
856 continue;
857
e30bb6b5
TG
858 is_before = startswith_no_case(t, "X-Start-Before:");
859
860 if (streq(m, SPECIAL_NETWORK_ONLINE_TARGET) && !is_before)
0404c609
TG
861 /* the network-online target is special, as it needs to be actively pulled in */
862 r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, m, NULL, true);
863 else
e30bb6b5 864 r = unit_add_dependency_by_name(u, is_before ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true);
2c4104f0
LP
865
866 if (r < 0)
66870f90
ZJS
867 log_error_unit(u->id, "[%s:%u] Failed to add dependency on %s, ignoring: %s",
868 path, line, m, strerror(-r));
42a097a2
LP
869
870 free(m);
2c4104f0 871 }
c2b35af6 872 } else if (startswith_no_case(t, "Default-Start:")) {
8309400a
LP
873 char *k, *d;
874
875 state = LSB;
876
877 k = delete_chars(t+14, WHITESPACE "-");
878
879 if (k[0] != 0) {
880 if (!(d = strdup(k))) {
881 r = -ENOMEM;
882 goto finish;
883 }
884
885 free(s->sysv_runlevels);
886 s->sysv_runlevels = d;
887 }
2c4104f0 888
0b5d26f9
LP
889 } else if (startswith_no_case(t, "Description:")) {
890 char *d, *j;
ed4c1cc6 891
2c4104f0
LP
892 state = LSB_DESCRIPTION;
893
0b5d26f9
LP
894 if ((j = strstrip(t+12)) && *j) {
895 if (!(d = strdup(j))) {
896 r = -ENOMEM;
897 goto finish;
898 }
899 } else
900 d = NULL;
2c4104f0 901
0b5d26f9
LP
902 free(long_description);
903 long_description = d;
2c4104f0 904
ed4c1cc6 905 } else if (startswith_no_case(t, "Short-Description:")) {
0b5d26f9 906 char *d, *j;
2c4104f0 907
2c4104f0
LP
908 state = LSB;
909
0b5d26f9
LP
910 if ((j = strstrip(t+18)) && *j) {
911 if (!(d = strdup(j))) {
912 r = -ENOMEM;
913 goto finish;
914 }
915 } else
916 d = NULL;
2c4104f0 917
0b5d26f9
LP
918 free(short_description);
919 short_description = d;
2c4104f0
LP
920
921 } else if (state == LSB_DESCRIPTION) {
922
923 if (startswith(l, "#\t") || startswith(l, "# ")) {
0b5d26f9 924 char *j;
2c4104f0 925
0b5d26f9
LP
926 if ((j = strstrip(t)) && *j) {
927 char *d = NULL;
928
929 if (long_description)
b7def684 930 d = strjoin(long_description, " ", t, NULL);
0b5d26f9
LP
931 else
932 d = strdup(j);
933
934 if (!d) {
935 r = -ENOMEM;
936 goto finish;
937 }
938
939 free(long_description);
940 long_description = d;
2c4104f0
LP
941 }
942
2c4104f0
LP
943 } else
944 state = LSB;
945 }
946 }
947 }
948
37e2941d 949 if ((r = sysv_exec_commands(s, supports_reload)) < 0)
2c4104f0
LP
950 goto finish;
951
a40eb732 952 if (s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels)) {
0bc824be
LP
953 /* If there a runlevels configured for this service
954 * but none of the standard ones, then we assume this
955 * is some special kind of service (which might be
956 * needed for early boot) and don't create any links
957 * to it. */
958
1124fe6f 959 UNIT(s)->default_dependencies = false;
09cd1ab1 960
09cd1ab1 961 /* Don't timeout special services during boot (like fsck) */
d568a335
MS
962 s->timeout_start_usec = 0;
963 s->timeout_stop_usec = 0;
964 } else {
965 s->timeout_start_usec = DEFAULT_SYSV_TIMEOUT_USEC;
966 s->timeout_stop_usec = DEFAULT_SYSV_TIMEOUT_USEC;
967 }
968
80876c20 969 /* Special setting for all SysV services */
1f48cf56 970 s->type = SERVICE_FORKING;
f8788303 971 s->remain_after_exit = !s->pid_file;
1835f23c 972 s->guess_main_pid = false;
525ee6f4 973 s->restart = SERVICE_RESTART_NO;
353e12c2 974 s->exec_context.ignore_sigpipe = false;
4819ff03 975 s->kill_context.kill_mode = KILL_PROCESS;
80876c20 976
0b5d26f9
LP
977 /* We use the long description only if
978 * no short description is set. */
979
980 if (short_description)
981 description = short_description;
982 else if (chkconfig_description)
983 description = chkconfig_description;
984 else if (long_description)
985 description = long_description;
986 else
987 description = NULL;
988
989 if (description) {
990 char *d;
991
e527618d 992 if (!(d = strappend(s->sysv_has_lsb ? "LSB: " : "SYSV: ", description))) {
0b5d26f9
LP
993 r = -ENOMEM;
994 goto finish;
995 }
996
ac155bb8 997 u->description = d;
0b5d26f9
LP
998 }
999
1c07b16c
LP
1000 /* Initialize the start priority from what has been set in the
1001 * /etc/rcN.d/ hierarchies if we load the unit file as SysV
1002 * init script. */
ea87ca5a
LP
1003 if (s->sysv_start_priority_from_rcnd >= 0)
1004 s->sysv_start_priority = s->sysv_start_priority_from_rcnd;
1005
ac155bb8 1006 u->load_state = UNIT_LOADED;
23a177ef 1007 r = 0;
2c4104f0
LP
1008
1009finish:
1010
1011 if (f)
1012 fclose(f);
1013
0b5d26f9
LP
1014 free(short_description);
1015 free(long_description);
1016 free(chkconfig_description);
1017
2c4104f0
LP
1018 return r;
1019}
1020
e537352b 1021static int service_load_sysv_name(Service *s, const char *name) {
2c4104f0
LP
1022 char **p;
1023
1024 assert(s);
1025 assert(name);
1026
c2756a68 1027 /* For SysV services we strip the *.sh suffixes. */
3f95f83c 1028 if (endswith(name, ".sh.service"))
d017c6ca
LP
1029 return -ENOENT;
1030
1124fe6f 1031 STRV_FOREACH(p, UNIT(s)->manager->lookup_paths.sysvinit_path) {
2c4104f0
LP
1032 char *path;
1033 int r;
1034
b7def684 1035 path = strjoin(*p, "/", name, NULL);
44d91056 1036 if (!path)
2c4104f0
LP
1037 return -ENOMEM;
1038
1039 assert(endswith(path, ".service"));
1040 path[strlen(path)-8] = 0;
1041
e537352b 1042 r = service_load_sysv_path(s, path);
fbe9f3a9 1043
1124fe6f 1044 if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) {
20771ae3 1045 /* Try *.sh source'able init scripts */
fbe9f3a9
LP
1046 strcat(path, ".sh");
1047 r = service_load_sysv_path(s, path);
1048 }
2c4104f0
LP
1049 free(path);
1050
23a177ef 1051 if (r < 0)
2c4104f0 1052 return r;
23a177ef 1053
88516c0c 1054 if (UNIT(s)->load_state != UNIT_STUB)
23a177ef 1055 break;
2c4104f0
LP
1056 }
1057
1058 return 0;
1059}
1060
e537352b 1061static int service_load_sysv(Service *s) {
2c4104f0
LP
1062 const char *t;
1063 Iterator i;
1064 int r;
1065
5cb5a6ff
LP
1066 assert(s);
1067
1068 /* Load service data from SysV init scripts, preferably with
1069 * LSB headers ... */
1070
1124fe6f 1071 if (strv_isempty(UNIT(s)->manager->lookup_paths.sysvinit_path))
2c4104f0
LP
1072 return 0;
1073
1124fe6f 1074 if ((t = UNIT(s)->id))
e537352b 1075 if ((r = service_load_sysv_name(s, t)) < 0)
2c4104f0
LP
1076 return r;
1077
1124fe6f
MS
1078 if (UNIT(s)->load_state == UNIT_STUB)
1079 SET_FOREACH(t, UNIT(s)->names, i) {
1080 if (t == UNIT(s)->id)
e537352b
LP
1081 continue;
1082
e364ad06 1083 if ((r = service_load_sysv_name(s, t)) < 0)
23a177ef
LP
1084 return r;
1085
1124fe6f 1086 if (UNIT(s)->load_state != UNIT_STUB)
23a177ef
LP
1087 break;
1088 }
2c4104f0
LP
1089
1090 return 0;
5cb5a6ff 1091}
07459bb6 1092#endif
5cb5a6ff 1093
243b1432
LP
1094static int service_verify(Service *s) {
1095 assert(s);
1096
1124fe6f 1097 if (UNIT(s)->load_state != UNIT_LOADED)
243b1432
LP
1098 return 0;
1099
1100 if (!s->exec_command[SERVICE_EXEC_START]) {
ebc2259d 1101 log_error_unit(UNIT(s)->id, "%s lacks ExecStart setting. Refusing.", UNIT(s)->id);
243b1432
LP
1102 return -EINVAL;
1103 }
1104
34e9ba66
LP
1105 if (s->type != SERVICE_ONESHOT &&
1106 s->exec_command[SERVICE_EXEC_START]->command_next) {
ebc2259d 1107 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
1108 return -EINVAL;
1109 }
1110
b0693d30 1111 if (s->type == SERVICE_ONESHOT && s->restart != SERVICE_RESTART_NO) {
ebc2259d 1112 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);
b0693d30
MW
1113 return -EINVAL;
1114 }
1115
05e343b7 1116 if (s->type == SERVICE_DBUS && !s->bus_name) {
ebc2259d 1117 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
1118 return -EINVAL;
1119 }
1120
7e2668c6 1121 if (s->bus_name && s->type != SERVICE_DBUS)
ebc2259d 1122 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 1123
ebc2259d
LP
1124 if (s->exec_context.pam_name && !(s->kill_context.kill_mode == KILL_CONTROL_GROUP || s->kill_context.kill_mode == KILL_MIXED)) {
1125 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
1126 return -EINVAL;
1127 }
1128
243b1432
LP
1129 return 0;
1130}
1131
a40eb732
LP
1132static int service_add_default_dependencies(Service *s) {
1133 int r;
1134
1135 assert(s);
1136
1137 /* Add a number of automatic dependencies useful for the
1138 * majority of services. */
1139
1140 /* First, pull in base system */
fccd44ec
KS
1141 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
1142 SPECIAL_BASIC_TARGET, NULL, true);
1143 if (r < 0)
1144 return r;
a40eb732
LP
1145
1146 /* Second, activate normal shutdown */
117dcc57
ZJS
1147 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS,
1148 SPECIAL_SHUTDOWN_TARGET, NULL, true);
1149 return r;
a40eb732
LP
1150}
1151
4dfc092a
LP
1152static void service_fix_output(Service *s) {
1153 assert(s);
1154
1155 /* If nothing has been explicitly configured, patch default
1156 * output in. If input is socket/tty we avoid this however,
1157 * since in that case we want output to default to the same
1158 * place as we read input from. */
1159
1160 if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
1161 s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1162 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 1163 s->exec_context.std_error = UNIT(s)->manager->default_std_error;
4dfc092a
LP
1164
1165 if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1166 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 1167 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
4dfc092a
LP
1168}
1169
e537352b
LP
1170static int service_load(Unit *u) {
1171 int r;
1172 Service *s = SERVICE(u);
1173
1174 assert(s);
1e2e8133 1175
5cb5a6ff 1176 /* Load a .service file */
c2756a68
LP
1177 r = unit_load_fragment(u);
1178 if (r < 0)
5cb5a6ff
LP
1179 return r;
1180
07459bb6 1181#ifdef HAVE_SYSV_COMPAT
bd77d0fc 1182 /* Load a classic init script as a fallback, if we couldn't find anything */
c2756a68
LP
1183 if (u->load_state == UNIT_STUB) {
1184 r = service_load_sysv(s);
1185 if (r < 0)
23a177ef 1186 return r;
c2756a68 1187 }
07459bb6 1188#endif
d46de8a1 1189
23a177ef 1190 /* Still nothing found? Then let's give up */
ac155bb8 1191 if (u->load_state == UNIT_STUB)
23a177ef 1192 return -ENOENT;
034c6ed7 1193
23a177ef 1194 /* This is a new unit? Then let's add in some extras */
ac155bb8 1195 if (u->load_state == UNIT_LOADED) {
c2756a68
LP
1196
1197 /* We were able to load something, then let's add in
1198 * the dropin directories. */
1199 r = unit_load_dropin(u);
1200 if (r < 0)
1201 return r;
1202
0b86feac
LP
1203 if (s->type == _SERVICE_TYPE_INVALID)
1204 s->type = s->bus_name ? SERVICE_DBUS : SERVICE_SIMPLE;
1205
d568a335
MS
1206 /* Oneshot services have disabled start timeout by default */
1207 if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
1208 s->timeout_start_usec = 0;
98709151 1209
4e2b0f9b
LP
1210 service_fix_output(s);
1211
598459ce
LP
1212 r = unit_patch_contexts(u);
1213 if (r < 0)
1214 return r;
1215
117dcc57
ZJS
1216 r = unit_add_exec_dependencies(u, &s->exec_context);
1217 if (r < 0)
23a177ef
LP
1218 return r;
1219
598459ce 1220 r = unit_add_default_slice(u, &s->cgroup_context);
a016b922
LP
1221 if (r < 0)
1222 return r;
1223
07459bb6 1224#ifdef HAVE_SYSV_COMPAT
117dcc57
ZJS
1225 r = sysv_fix_order(s);
1226 if (r < 0)
23a177ef 1227 return r;
07459bb6 1228#endif
05e343b7 1229
c952c6ec
LP
1230 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
1231 s->notify_access = NOTIFY_MAIN;
a40eb732 1232
02c4ef9c
LP
1233 if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
1234 s->notify_access = NOTIFY_MAIN;
1235
598459ce
LP
1236 if (s->bus_name) {
1237 r = unit_watch_bus_name(u, s->bus_name);
117dcc57 1238 if (r < 0)
a40eb732 1239 return r;
117dcc57 1240 }
e06c73cc 1241
598459ce
LP
1242 if (u->default_dependencies) {
1243 r = service_add_default_dependencies(s);
1244 if (r < 0)
1245 return r;
1246 }
8e274523
LP
1247 }
1248
243b1432 1249 return service_verify(s);
034c6ed7
LP
1250}
1251
87f0e418 1252static void service_dump(Unit *u, FILE *f, const char *prefix) {
5cb5a6ff 1253
5cb5a6ff 1254 ServiceExecCommand c;
87f0e418 1255 Service *s = SERVICE(u);
47be870b 1256 const char *prefix2;
7fd1b19b 1257 _cleanup_free_ char *p2 = NULL;
5cb5a6ff
LP
1258
1259 assert(s);
1260
47be870b
LP
1261 p2 = strappend(prefix, "\t");
1262 prefix2 = p2 ? p2 : prefix;
44d8db9e 1263
5cb5a6ff 1264 fprintf(f,
81a2b7ce 1265 "%sService State: %s\n"
f42806df
LP
1266 "%sResult: %s\n"
1267 "%sReload Result: %s\n"
81a2b7ce 1268 "%sPermissionsStartOnly: %s\n"
8e274523 1269 "%sRootDirectoryStartOnly: %s\n"
02ee865a 1270 "%sRemainAfterExit: %s\n"
3185a36b 1271 "%sGuessMainPID: %s\n"
c952c6ec 1272 "%sType: %s\n"
2cf3143a 1273 "%sRestart: %s\n"
c952c6ec 1274 "%sNotifyAccess: %s\n",
81a2b7ce 1275 prefix, service_state_to_string(s->state),
f42806df
LP
1276 prefix, service_result_to_string(s->result),
1277 prefix, service_result_to_string(s->reload_result),
81a2b7ce 1278 prefix, yes_no(s->permissions_start_only),
8e274523 1279 prefix, yes_no(s->root_directory_start_only),
02ee865a 1280 prefix, yes_no(s->remain_after_exit),
3185a36b 1281 prefix, yes_no(s->guess_main_pid),
c952c6ec 1282 prefix, service_type_to_string(s->type),
2cf3143a 1283 prefix, service_restart_to_string(s->restart),
c952c6ec 1284 prefix, notify_access_to_string(s->notify_access));
5cb5a6ff 1285
70123e68
LP
1286 if (s->control_pid > 0)
1287 fprintf(f,
ccd06097
ZJS
1288 "%sControl PID: "PID_FMT"\n",
1289 prefix, s->control_pid);
70123e68
LP
1290
1291 if (s->main_pid > 0)
1292 fprintf(f,
ccd06097 1293 "%sMain PID: "PID_FMT"\n"
6dfa5494
LP
1294 "%sMain PID Known: %s\n"
1295 "%sMain PID Alien: %s\n",
ccd06097 1296 prefix, s->main_pid,
6dfa5494
LP
1297 prefix, yes_no(s->main_pid_known),
1298 prefix, yes_no(s->main_pid_alien));
70123e68 1299
034c6ed7
LP
1300 if (s->pid_file)
1301 fprintf(f,
1302 "%sPIDFile: %s\n",
1303 prefix, s->pid_file);
1304
05e343b7
LP
1305 if (s->bus_name)
1306 fprintf(f,
1307 "%sBusName: %s\n"
1308 "%sBus Name Good: %s\n",
1309 prefix, s->bus_name,
1310 prefix, yes_no(s->bus_name_good));
1311
4819ff03 1312 kill_context_dump(&s->kill_context, f, prefix);
5cb5a6ff
LP
1313 exec_context_dump(&s->exec_context, f, prefix);
1314
e537352b 1315 for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
5cb5a6ff 1316
44d8db9e
LP
1317 if (!s->exec_command[c])
1318 continue;
1319
40d50879 1320 fprintf(f, "%s-> %s:\n",
94f04347 1321 prefix, service_exec_command_to_string(c));
44d8db9e
LP
1322
1323 exec_command_dump_list(s->exec_command[c], f, prefix2);
5cb5a6ff 1324 }
44d8db9e 1325
07459bb6 1326#ifdef HAVE_SYSV_COMPAT
1b64d026 1327 if (s->is_sysv)
2c4104f0 1328 fprintf(f,
9fff8a1f
LP
1329 "%sSysV Init Script has LSB Header: %s\n"
1330 "%sSysVEnabled: %s\n",
9fff8a1f
LP
1331 prefix, yes_no(s->sysv_has_lsb),
1332 prefix, yes_no(s->sysv_enabled));
2c4104f0
LP
1333
1334 if (s->sysv_start_priority >= 0)
1335 fprintf(f,
9fff8a1f
LP
1336 "%sSysVStartPriority: %i\n",
1337 prefix, s->sysv_start_priority);
2c4104f0 1338
8309400a
LP
1339 if (s->sysv_runlevels)
1340 fprintf(f, "%sSysVRunLevels: %s\n",
1341 prefix, s->sysv_runlevels);
07459bb6 1342#endif
23a177ef 1343
8c47c732
LP
1344 if (s->status_text)
1345 fprintf(f, "%sStatus Text: %s\n",
1346 prefix, s->status_text);
5cb5a6ff
LP
1347}
1348
c5419d42 1349static int service_load_pid_file(Service *s, bool may_warn) {
7fd1b19b 1350 _cleanup_free_ char *k = NULL;
034c6ed7 1351 int r;
5925dd3c 1352 pid_t pid;
034c6ed7
LP
1353
1354 assert(s);
1355
034c6ed7 1356 if (!s->pid_file)
13230d5d 1357 return -ENOENT;
034c6ed7 1358
117dcc57
ZJS
1359 r = read_one_line_file(s->pid_file, &k);
1360 if (r < 0) {
c5419d42 1361 if (may_warn)
66870f90
ZJS
1362 log_info_unit(UNIT(s)->id,
1363 "PID file %s not readable (yet?) after %s.",
1364 s->pid_file, service_state_to_string(s->state));
034c6ed7 1365 return r;
5375410b 1366 }
034c6ed7 1367
5925dd3c 1368 r = parse_pid(k, &pid);
bc41f93e
ZJS
1369 if (r < 0) {
1370 if (may_warn)
1371 log_info_unit(UNIT(s)->id,
1372 "Failed to read PID from file %s: %s",
1373 s->pid_file, strerror(-r));
5925dd3c 1374 return r;
bc41f93e 1375 }
406eaf93 1376
9f5650ae 1377 if (!pid_is_alive(pid)) {
c5419d42 1378 if (may_warn)
9f5650ae 1379 log_info_unit(UNIT(s)->id, "PID "PID_FMT" read from file %s does not exist or is a zombie.", pid, s->pid_file);
b8c597d5 1380
e10c9985
YS
1381 return -ESRCH;
1382 }
1383
db01f8b3
MS
1384 if (s->main_pid_known) {
1385 if (pid == s->main_pid)
1386 return 0;
1387
66870f90 1388 log_debug_unit(UNIT(s)->id,
ccd06097
ZJS
1389 "Main PID changing: "PID_FMT" -> "PID_FMT,
1390 s->main_pid, pid);
db01f8b3
MS
1391 service_unwatch_main_pid(s);
1392 s->main_pid_known = false;
3a111838 1393 } else
66870f90 1394 log_debug_unit(UNIT(s)->id,
ccd06097 1395 "Main PID loaded: "PID_FMT, pid);
db01f8b3 1396
117dcc57
ZJS
1397 r = service_set_main_pid(s, pid);
1398 if (r < 0)
16f6025e
LP
1399 return r;
1400
117dcc57 1401 r = unit_watch_pid(UNIT(s), pid);
bc41f93e 1402 if (r < 0) {
5925dd3c 1403 /* FIXME: we need to do something here */
bc41f93e 1404 log_warning_unit(UNIT(s)->id,
ccd06097
ZJS
1405 "Failed to watch PID "PID_FMT" from service %s",
1406 pid, UNIT(s)->id);
5925dd3c 1407 return r;
bc41f93e 1408 }
034c6ed7
LP
1409
1410 return 0;
1411}
1412
4fbf50b3
LP
1413static int service_search_main_pid(Service *s) {
1414 pid_t pid;
1415 int r;
1416
1417 assert(s);
1418
3185a36b
LP
1419 /* If we know it anyway, don't ever fallback to unreliable
1420 * heuristics */
4fbf50b3
LP
1421 if (s->main_pid_known)
1422 return 0;
1423
3185a36b
LP
1424 if (!s->guess_main_pid)
1425 return 0;
1426
4fbf50b3
LP
1427 assert(s->main_pid <= 0);
1428
4ad49000 1429 pid = unit_search_main_pid(UNIT(s));
117dcc57 1430 if (pid <= 0)
4fbf50b3
LP
1431 return -ENOENT;
1432
66870f90 1433 log_debug_unit(UNIT(s)->id,
ccd06097 1434 "Main PID guessed: "PID_FMT, pid);
117dcc57
ZJS
1435 r = service_set_main_pid(s, pid);
1436 if (r < 0)
4fbf50b3
LP
1437 return r;
1438
117dcc57
ZJS
1439 r = unit_watch_pid(UNIT(s), pid);
1440 if (r < 0)
4fbf50b3 1441 /* FIXME: we need to do something here */
a827e373 1442 log_warning_unit(UNIT(s)->id,
ccd06097
ZJS
1443 "Failed to watch PID "PID_FMT" from service %s",
1444 pid, UNIT(s)->id);
bdd13f6b 1445 return r;
4fbf50b3
LP
1446}
1447
034c6ed7
LP
1448static void service_set_state(Service *s, ServiceState state) {
1449 ServiceState old_state;
e056b01d 1450 const UnitActiveState *table;
842129f5 1451
5cb5a6ff
LP
1452 assert(s);
1453
e056b01d
LP
1454 table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1455
034c6ed7 1456 old_state = s->state;
5cb5a6ff 1457 s->state = state;
034c6ed7 1458
3a111838
MS
1459 service_unwatch_pid_file(s);
1460
842129f5
LP
1461 if (!IN_SET(state,
1462 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1463 SERVICE_RELOAD,
bf108e55
LP
1464 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1465 SERVICE_STOP_POST,
842129f5
LP
1466 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
1467 SERVICE_AUTO_RESTART))
718db961 1468 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 1469
842129f5
LP
1470 if (!IN_SET(state,
1471 SERVICE_START, SERVICE_START_POST,
1472 SERVICE_RUNNING, SERVICE_RELOAD,
bf108e55
LP
1473 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1474 SERVICE_STOP_POST,
1475 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1476 service_unwatch_main_pid(s);
867b3b7d
LP
1477 s->main_command = NULL;
1478 }
034c6ed7 1479
842129f5
LP
1480 if (!IN_SET(state,
1481 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1482 SERVICE_RELOAD,
bf108e55
LP
1483 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1484 SERVICE_STOP_POST,
842129f5 1485 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1486 service_unwatch_control_pid(s);
034c6ed7 1487 s->control_command = NULL;
a16e1123 1488 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
e537352b 1489 }
034c6ed7 1490
a911bb9a
LP
1491 if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1492 unit_unwatch_all_pids(UNIT(s));
1493
842129f5
LP
1494 if (!IN_SET(state,
1495 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1496 SERVICE_RUNNING, SERVICE_RELOAD,
1497 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1498 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
1124fe6f 1499 !(state == SERVICE_DEAD && UNIT(s)->job)) {
4f2d528d 1500 service_close_socket_fd(s);
6cf6bbc2
LP
1501 service_connection_unref(s);
1502 }
4f2d528d 1503
7596e9e1 1504 if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
a6927d7f
MO
1505 service_stop_watchdog(s);
1506
f6023656
LP
1507 /* For the inactive states unit_notify() will trim the cgroup,
1508 * but for exit we have to do that ourselves... */
1124fe6f 1509 if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
4ad49000 1510 unit_destroy_cgroup(UNIT(s));
f6023656 1511
9cd86184
OB
1512 /* For remain_after_exit services, let's see if we can "release" the
1513 * hold on the console, since unit_notify() only does that in case of
1514 * change of state */
1515 if (state == SERVICE_EXITED && s->remain_after_exit &&
1516 UNIT(s)->manager->n_on_console > 0) {
1517 ExecContext *ec = unit_get_exec_context(UNIT(s));
1518 if (ec && exec_context_may_touch_console(ec)) {
1519 Manager *m = UNIT(s)->manager;
1520
1521 m->n_on_console --;
1522 if (m->n_on_console == 0)
1523 /* unset no_console_output flag, since the console is free */
1524 m->no_console_output = false;
1525 }
1526 }
1527
e537352b 1528 if (old_state != state)
842129f5 1529 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 1530
e056b01d 1531 unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
f42806df 1532 s->reload_result = SERVICE_SUCCESS;
034c6ed7
LP
1533}
1534
a16e1123
LP
1535static int service_coldplug(Unit *u) {
1536 Service *s = SERVICE(u);
1537 int r;
1538
1539 assert(s);
1540 assert(s->state == SERVICE_DEAD);
1541
1542 if (s->deserialized_state != s->state) {
1543
bf108e55
LP
1544 if (IN_SET(s->deserialized_state,
1545 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1546 SERVICE_RELOAD,
1547 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1548 SERVICE_STOP_POST,
1549 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
92c1622e
LP
1550
1551 usec_t k;
6c12b52e 1552
bf108e55 1553 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 1554
92c1622e
LP
1555 /* For the start/stop timeouts 0 means off */
1556 if (k > 0) {
1557 r = service_arm_timer(s, k);
36697dc0 1558 if (r < 0)
e558336f
LP
1559 return r;
1560 }
1561 }
a16e1123 1562
92c1622e
LP
1563 if (s->deserialized_state == SERVICE_AUTO_RESTART) {
1564
1565 /* The restart timeouts 0 means immediately */
1566 r = service_arm_timer(s, s->restart_usec);
1567 if (r < 0)
1568 return r;
1569 }
1570
9f5650ae 1571 if (pid_is_unwaited(s->main_pid) &&
bf108e55
LP
1572 ((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
1573 IN_SET(s->deserialized_state,
1574 SERVICE_START, SERVICE_START_POST,
1575 SERVICE_RUNNING, SERVICE_RELOAD,
1576 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1577 SERVICE_STOP_POST,
1578 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
1579 r = unit_watch_pid(UNIT(s), s->main_pid);
1580 if (r < 0)
1581 return r;
1582 }
a16e1123 1583
9f5650ae 1584 if (pid_is_unwaited(s->control_pid) &&
bf108e55
LP
1585 IN_SET(s->deserialized_state,
1586 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1587 SERVICE_RELOAD,
1588 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1589 SERVICE_STOP_POST,
1590 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1591 r = unit_watch_pid(UNIT(s), s->control_pid);
1592 if (r < 0)
1593 return r;
1594 }
a16e1123 1595
a911bb9a
LP
1596 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1597 unit_watch_all_pids(UNIT(s));
1598
842129f5
LP
1599 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1600 service_start_watchdog(s);
bb242b7b 1601
a16e1123
LP
1602 service_set_state(s, s->deserialized_state);
1603 }
92c1622e 1604
a16e1123
LP
1605 return 0;
1606}
1607
44d8db9e
LP
1608static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1609 Iterator i;
1610 int r;
1611 int *rfds = NULL;
1612 unsigned rn_fds = 0;
57020a3a 1613 Unit *u;
44d8db9e
LP
1614
1615 assert(s);
1616 assert(fds);
1617 assert(n_fds);
1618
6cf6bbc2
LP
1619 if (s->socket_fd >= 0)
1620 return 0;
1621
1124fe6f 1622 SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
44d8db9e
LP
1623 int *cfds;
1624 unsigned cn_fds;
57020a3a
LP
1625 Socket *sock;
1626
ac155bb8 1627 if (u->type != UNIT_SOCKET)
57020a3a
LP
1628 continue;
1629
1630 sock = SOCKET(u);
44d8db9e 1631
117dcc57
ZJS
1632 r = socket_collect_fds(sock, &cfds, &cn_fds);
1633 if (r < 0)
44d8db9e
LP
1634 goto fail;
1635
1636 if (!cfds)
1637 continue;
1638
1639 if (!rfds) {
1640 rfds = cfds;
1641 rn_fds = cn_fds;
1642 } else {
1643 int *t;
1644
117dcc57
ZJS
1645 t = new(int, rn_fds+cn_fds);
1646 if (!t) {
44d8db9e
LP
1647 free(cfds);
1648 r = -ENOMEM;
1649 goto fail;
1650 }
1651
9c1b183c
LP
1652 memcpy(t, rfds, rn_fds * sizeof(int));
1653 memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
44d8db9e
LP
1654 free(rfds);
1655 free(cfds);
1656
1657 rfds = t;
1658 rn_fds = rn_fds+cn_fds;
1659 }
1660 }
1661
1662 *fds = rfds;
1663 *n_fds = rn_fds;
3e33402a 1664
44d8db9e
LP
1665 return 0;
1666
1667fail:
1668 free(rfds);
3e33402a 1669
44d8db9e
LP
1670 return r;
1671}
1672
81a2b7ce
LP
1673static int service_spawn(
1674 Service *s,
1675 ExecCommand *c,
1676 bool timeout,
1677 bool pass_fds,
1678 bool apply_permissions,
1679 bool apply_chroot,
1e3ad081 1680 bool apply_tty_stdin,
c952c6ec 1681 bool set_notify_socket,
ecedd90f 1682 bool is_control,
81a2b7ce
LP
1683 pid_t *_pid) {
1684
034c6ed7
LP
1685 pid_t pid;
1686 int r;
117dcc57 1687 int *fds = NULL;
7fd1b19b 1688 _cleanup_free_ int *fdsbuf = NULL;
2105e76a 1689 unsigned n_fds = 0, n_env = 0;
7fd1b19b 1690 _cleanup_strv_free_ char
117dcc57 1691 **argv = NULL, **final_env = NULL, **our_env = NULL;
4ad49000 1692 const char *path;
034c6ed7
LP
1693
1694 assert(s);
1695 assert(c);
1696 assert(_pid);
1697
4ad49000
LP
1698 unit_realize_cgroup(UNIT(s));
1699
613b411c
LP
1700 r = unit_setup_exec_runtime(UNIT(s));
1701 if (r < 0)
1702 goto fail;
1703
6cf6bbc2
LP
1704 if (pass_fds ||
1705 s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1706 s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1707 s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1708
4f2d528d
LP
1709 if (s->socket_fd >= 0) {
1710 fds = &s->socket_fd;
1711 n_fds = 1;
6cf6bbc2 1712 } else {
117dcc57
ZJS
1713 r = service_collect_fds(s, &fdsbuf, &n_fds);
1714 if (r < 0)
6cf6bbc2
LP
1715 goto fail;
1716
1717 fds = fdsbuf;
1718 }
4f2d528d 1719 }
44d8db9e 1720
92c1622e
LP
1721 if (timeout && s->timeout_start_usec > 0) {
1722 r = service_arm_timer(s, s->timeout_start_usec);
1723 if (r < 0)
1724 goto fail;
1725 } else
1726 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 1727
19f6d710
LP
1728 r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
1729 if (r < 0)
9e2f7c11 1730 goto fail;
9e2f7c11 1731
09812eb7 1732 our_env = new0(char*, 4);
97ae63e2 1733 if (!our_env) {
2105e76a
LP
1734 r = -ENOMEM;
1735 goto fail;
1736 }
c952c6ec 1737
2105e76a 1738 if (set_notify_socket)
1124fe6f 1739 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
c952c6ec
LP
1740 r = -ENOMEM;
1741 goto fail;
1742 }
1743
2105e76a 1744 if (s->main_pid > 0)
ccd06097 1745 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
c952c6ec
LP
1746 r = -ENOMEM;
1747 goto fail;
1748 }
2105e76a 1749
4ad49000 1750 if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
ccd06097 1751 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
97ae63e2
LP
1752 r = -ENOMEM;
1753 goto fail;
1754 }
1755
1756 final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
1757 if (!final_env) {
2105e76a
LP
1758 r = -ENOMEM;
1759 goto fail;
1760 }
c952c6ec 1761
4ad49000
LP
1762 if (is_control && UNIT(s)->cgroup_path) {
1763 path = strappenda(UNIT(s)->cgroup_path, "/control");
1764 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
1765 } else
1766 path = UNIT(s)->cgroup_path;
1767
9e2f7c11
LP
1768 r = exec_spawn(c,
1769 argv,
1770 &s->exec_context,
1771 fds, n_fds,
2105e76a 1772 final_env,
9e2f7c11
LP
1773 apply_permissions,
1774 apply_chroot,
1e3ad081 1775 apply_tty_stdin,
1124fe6f 1776 UNIT(s)->manager->confirm_spawn,
13b84ec7 1777 UNIT(s)->manager->cgroup_supported,
4ad49000 1778 path,
e66cf1a3 1779 manager_get_runtime_prefix(UNIT(s)->manager),
62bca2c6 1780 UNIT(s)->id,
09812eb7 1781 s->watchdog_usec,
f2b68789 1782 s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
613b411c 1783 s->exec_runtime,
9e2f7c11 1784 &pid);
9e2f7c11 1785 if (r < 0)
034c6ed7
LP
1786 goto fail;
1787
117dcc57
ZJS
1788 r = unit_watch_pid(UNIT(s), pid);
1789 if (r < 0)
034c6ed7
LP
1790 /* FIXME: we need to do something here */
1791 goto fail;
1792
1793 *_pid = pid;
1794
5cb5a6ff 1795 return 0;
034c6ed7
LP
1796
1797fail:
1798 if (timeout)
718db961 1799 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7
LP
1800
1801 return r;
1802}
1803
80876c20
LP
1804static int main_pid_good(Service *s) {
1805 assert(s);
1806
1807 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1808 * don't know */
1809
1810 /* If we know the pid file, then lets just check if it is
1811 * still valid */
6dfa5494
LP
1812 if (s->main_pid_known) {
1813
1814 /* If it's an alien child let's check if it is still
1815 * alive ... */
62220cf7 1816 if (s->main_pid_alien && s->main_pid > 0)
9f5650ae 1817 return pid_is_alive(s->main_pid);
6dfa5494
LP
1818
1819 /* .. otherwise assume we'll get a SIGCHLD for it,
1820 * which we really should wait for to collect exit
1821 * status and code */
80876c20 1822 return s->main_pid > 0;
6dfa5494 1823 }
80876c20
LP
1824
1825 /* We don't know the pid */
1826 return -EAGAIN;
1827}
1828
44a6b1b6 1829_pure_ static int control_pid_good(Service *s) {
80876c20
LP
1830 assert(s);
1831
1832 return s->control_pid > 0;
1833}
1834
1835static int cgroup_good(Service *s) {
1836 int r;
1837
1838 assert(s);
1839
4ad49000
LP
1840 if (!UNIT(s)->cgroup_path)
1841 return 0;
1842
1843 r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
117dcc57 1844 if (r < 0)
80876c20
LP
1845 return r;
1846
1847 return !r;
1848}
1849
bf500566 1850static int service_execute_action(Service *s, FailureAction action, const char *reason, bool log_action_none);
93ae25e6 1851
f42806df 1852static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
034c6ed7
LP
1853 int r;
1854 assert(s);
1855
f42806df
LP
1856 if (f != SERVICE_SUCCESS)
1857 s->result = f;
034c6ed7 1858
0c7f15b3
MS
1859 service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1860
93ae25e6
MO
1861 if (s->result != SERVICE_SUCCESS)
1862 service_execute_action(s, s->failure_action, "failed", false);
1863
034c6ed7 1864 if (allow_restart &&
47342320 1865 !s->forbid_restart &&
034c6ed7 1866 (s->restart == SERVICE_RESTART_ALWAYS ||
f42806df
LP
1867 (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1868 (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
dc99a976 1869 (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
f42806df 1870 (s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
96342de6
LN
1871 s->result == SERVICE_FAILURE_CORE_DUMP))) &&
1872 (s->result != SERVICE_FAILURE_EXIT_CODE ||
1873 !set_contains(s->restart_ignore_status.code, INT_TO_PTR(s->main_exec_status.status))) &&
1874 (s->result != SERVICE_FAILURE_SIGNAL ||
718db961 1875 !set_contains(s->restart_ignore_status.signal, INT_TO_PTR(s->main_exec_status.status)))) {
034c6ed7 1876
718db961 1877 r = service_arm_timer(s, s->restart_usec);
f42806df 1878 if (r < 0)
034c6ed7
LP
1879 goto fail;
1880
1881 service_set_state(s, SERVICE_AUTO_RESTART);
0c7f15b3 1882 }
034c6ed7 1883
47342320
LP
1884 s->forbid_restart = false;
1885
e66cf1a3 1886 /* We want fresh tmpdirs in case service is started again immediately */
613b411c
LP
1887 exec_runtime_destroy(s->exec_runtime);
1888 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
c17ec25e 1889
e66cf1a3
LP
1890 /* Also, remove the runtime directory in */
1891 exec_context_destroy_runtime_directory(&s->exec_context, manager_get_runtime_prefix(UNIT(s)->manager));
1892
9285c9ff
LN
1893 /* Try to delete the pid file. At this point it will be
1894 * out-of-date, and some software might be confused by it, so
1895 * let's remove it. */
1896 if (s->pid_file)
1897 unlink_noerrno(s->pid_file);
1898
034c6ed7
LP
1899 return;
1900
1901fail:
66870f90
ZJS
1902 log_warning_unit(UNIT(s)->id,
1903 "%s failed to run install restart timer: %s",
1904 UNIT(s)->id, strerror(-r));
f42806df 1905 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1906}
1907
f42806df 1908static void service_enter_stop_post(Service *s, ServiceResult f) {
034c6ed7
LP
1909 int r;
1910 assert(s);
1911
f42806df
LP
1912 if (f != SERVICE_SUCCESS)
1913 s->result = f;
034c6ed7 1914
5e94833f 1915 service_unwatch_control_pid(s);
a911bb9a 1916 unit_watch_all_pids(UNIT(s));
5e94833f 1917
117dcc57
ZJS
1918 s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1919 if (s->control_command) {
867b3b7d
LP
1920 s->control_command_id = SERVICE_EXEC_STOP_POST;
1921
ecedd90f
LP
1922 r = service_spawn(s,
1923 s->control_command,
1924 true,
1925 false,
1926 !s->permissions_start_only,
1927 !s->root_directory_start_only,
1928 true,
1929 false,
1930 true,
1931 &s->control_pid);
1932 if (r < 0)
034c6ed7
LP
1933 goto fail;
1934
80876c20
LP
1935 service_set_state(s, SERVICE_STOP_POST);
1936 } else
ac84d1fb 1937 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1938
1939 return;
1940
1941fail:
66870f90
ZJS
1942 log_warning_unit(UNIT(s)->id,
1943 "%s failed to run 'stop-post' task: %s",
1944 UNIT(s)->id, strerror(-r));
f42806df 1945 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1946}
1947
f42806df 1948static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
034c6ed7 1949 int r;
034c6ed7
LP
1950
1951 assert(s);
1952
f42806df
LP
1953 if (f != SERVICE_SUCCESS)
1954 s->result = f;
034c6ed7 1955
a911bb9a
LP
1956 unit_watch_all_pids(UNIT(s));
1957
cd2086fe
LP
1958 r = unit_kill_context(
1959 UNIT(s),
1960 &s->kill_context,
1961 state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
1962 s->main_pid,
1963 s->control_pid,
1964 s->main_pid_alien);
ac84d1fb 1965
cd2086fe
LP
1966 if (r < 0)
1967 goto fail;
034c6ed7 1968
cd2086fe 1969 if (r > 0) {
d568a335 1970 if (s->timeout_stop_usec > 0) {
718db961 1971 r = service_arm_timer(s, s->timeout_stop_usec);
d568a335 1972 if (r < 0)
e558336f 1973 goto fail;
d568a335 1974 }
d6ea93e3 1975
80876c20 1976 service_set_state(s, state);
ac84d1fb
LP
1977 } else if (state == SERVICE_STOP_SIGTERM)
1978 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1979 else if (state == SERVICE_STOP_SIGKILL)
f42806df 1980 service_enter_stop_post(s, SERVICE_SUCCESS);
ac84d1fb
LP
1981 else if (state == SERVICE_FINAL_SIGTERM)
1982 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
80876c20 1983 else
f42806df 1984 service_enter_dead(s, SERVICE_SUCCESS, true);
034c6ed7
LP
1985
1986 return;
1987
1988fail:
66870f90
ZJS
1989 log_warning_unit(UNIT(s)->id,
1990 "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
034c6ed7 1991
80876c20 1992 if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
f42806df 1993 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
034c6ed7 1994 else
f42806df 1995 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1996}
1997
f42806df 1998static void service_enter_stop(Service *s, ServiceResult f) {
034c6ed7 1999 int r;
5925dd3c 2000
034c6ed7
LP
2001 assert(s);
2002
f42806df
LP
2003 if (f != SERVICE_SUCCESS)
2004 s->result = f;
034c6ed7 2005
5e94833f 2006 service_unwatch_control_pid(s);
a911bb9a 2007 unit_watch_all_pids(UNIT(s));
5e94833f 2008
117dcc57
ZJS
2009 s->control_command = s->exec_command[SERVICE_EXEC_STOP];
2010 if (s->control_command) {
867b3b7d
LP
2011 s->control_command_id = SERVICE_EXEC_STOP;
2012
ecedd90f
LP
2013 r = service_spawn(s,
2014 s->control_command,
2015 true,
2016 false,
2017 !s->permissions_start_only,
2018 !s->root_directory_start_only,
2019 false,
2020 false,
2021 true,
2022 &s->control_pid);
2023 if (r < 0)
034c6ed7
LP
2024 goto fail;
2025
80876c20
LP
2026 service_set_state(s, SERVICE_STOP);
2027 } else
f42806df 2028 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
2029
2030 return;
2031
2032fail:
66870f90
ZJS
2033 log_warning_unit(UNIT(s)->id,
2034 "%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2035 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2036}
2037
f42806df 2038static void service_enter_running(Service *s, ServiceResult f) {
4eab639f 2039 int main_pid_ok, cgroup_ok;
80876c20
LP
2040 assert(s);
2041
f42806df
LP
2042 if (f != SERVICE_SUCCESS)
2043 s->result = f;
80876c20 2044
4eab639f
LP
2045 main_pid_ok = main_pid_good(s);
2046 cgroup_ok = cgroup_good(s);
2047
2048 if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
05e343b7 2049 (s->bus_name_good || s->type != SERVICE_DBUS))
80876c20 2050 service_set_state(s, SERVICE_RUNNING);
02ee865a 2051 else if (s->remain_after_exit)
80876c20
LP
2052 service_set_state(s, SERVICE_EXITED);
2053 else
f42806df 2054 service_enter_stop(s, SERVICE_SUCCESS);
80876c20
LP
2055}
2056
034c6ed7
LP
2057static void service_enter_start_post(Service *s) {
2058 int r;
2059 assert(s);
2060
5e94833f 2061 service_unwatch_control_pid(s);
842129f5 2062 service_reset_watchdog(s);
bb242b7b 2063
117dcc57
ZJS
2064 s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
2065 if (s->control_command) {
867b3b7d
LP
2066 s->control_command_id = SERVICE_EXEC_START_POST;
2067
ecedd90f
LP
2068 r = service_spawn(s,
2069 s->control_command,
2070 true,
2071 false,
2072 !s->permissions_start_only,
2073 !s->root_directory_start_only,
2074 false,
2075 false,
2076 true,
2077 &s->control_pid);
2078 if (r < 0)
034c6ed7
LP
2079 goto fail;
2080
80876c20
LP
2081 service_set_state(s, SERVICE_START_POST);
2082 } else
f42806df 2083 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2084
2085 return;
2086
2087fail:
66870f90
ZJS
2088 log_warning_unit(UNIT(s)->id,
2089 "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2090 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2091}
2092
4ad49000
LP
2093static void service_kill_control_processes(Service *s) {
2094 char *p;
2095
2096 if (!UNIT(s)->cgroup_path)
2097 return;
2098
2099 p = strappenda(UNIT(s)->cgroup_path, "/control");
4ad49000
LP
2100 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
2101}
2102
034c6ed7 2103static void service_enter_start(Service *s) {
4ad49000 2104 ExecCommand *c;
034c6ed7
LP
2105 pid_t pid;
2106 int r;
2107
2108 assert(s);
2109
2110 assert(s->exec_command[SERVICE_EXEC_START]);
34e9ba66 2111 assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
034c6ed7 2112
41efeaec
LP
2113 service_unwatch_control_pid(s);
2114 service_unwatch_main_pid(s);
80876c20 2115
8f53a7b8
LP
2116 /* We want to ensure that nobody leaks processes from
2117 * START_PRE here, so let's go on a killing spree, People
2118 * should not spawn long running processes from START_PRE. */
4ad49000 2119 service_kill_control_processes(s);
8f53a7b8 2120
867b3b7d
LP
2121 if (s->type == SERVICE_FORKING) {
2122 s->control_command_id = SERVICE_EXEC_START;
2123 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
2124
2125 s->main_command = NULL;
2126 } else {
2127 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2128 s->control_command = NULL;
2129
2130 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
2131 }
34e9ba66 2132
ecedd90f
LP
2133 r = service_spawn(s,
2134 c,
117dcc57
ZJS
2135 s->type == SERVICE_FORKING || s->type == SERVICE_DBUS ||
2136 s->type == SERVICE_NOTIFY || s->type == SERVICE_ONESHOT,
ecedd90f
LP
2137 true,
2138 true,
2139 true,
2140 true,
2141 s->notify_access != NOTIFY_NONE,
2142 false,
2143 &pid);
2144 if (r < 0)
034c6ed7
LP
2145 goto fail;
2146
f2b68789 2147 if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
034c6ed7
LP
2148 /* For simple services we immediately start
2149 * the START_POST binaries. */
2150
5925dd3c 2151 service_set_main_pid(s, pid);
034c6ed7
LP
2152 service_enter_start_post(s);
2153
2154 } else if (s->type == SERVICE_FORKING) {
2155
2156 /* For forking services we wait until the start
2157 * process exited. */
2158
e55224ca 2159 s->control_pid = pid;
80876c20
LP
2160 service_set_state(s, SERVICE_START);
2161
34e9ba66 2162 } else if (s->type == SERVICE_ONESHOT ||
8c47c732
LP
2163 s->type == SERVICE_DBUS ||
2164 s->type == SERVICE_NOTIFY) {
7d55e835 2165
34e9ba66 2166 /* For oneshot services we wait until the start
7d55e835
LP
2167 * process exited, too, but it is our main process. */
2168
05e343b7 2169 /* For D-Bus services we know the main pid right away,
8c47c732
LP
2170 * but wait for the bus name to appear on the
2171 * bus. Notify services are similar. */
05e343b7 2172
5925dd3c 2173 service_set_main_pid(s, pid);
80876c20 2174 service_set_state(s, SERVICE_START);
034c6ed7
LP
2175 } else
2176 assert_not_reached("Unknown service type");
2177
2178 return;
2179
2180fail:
66870f90
ZJS
2181 log_warning_unit(UNIT(s)->id,
2182 "%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2183 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2184}
2185
2186static void service_enter_start_pre(Service *s) {
2187 int r;
2188
2189 assert(s);
2190
5e94833f
LP
2191 service_unwatch_control_pid(s);
2192
117dcc57
ZJS
2193 s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
2194 if (s->control_command) {
8f53a7b8
LP
2195 /* Before we start anything, let's clear up what might
2196 * be left from previous runs. */
4ad49000 2197 service_kill_control_processes(s);
8f53a7b8 2198
867b3b7d
LP
2199 s->control_command_id = SERVICE_EXEC_START_PRE;
2200
ecedd90f
LP
2201 r = service_spawn(s,
2202 s->control_command,
2203 true,
2204 false,
2205 !s->permissions_start_only,
2206 !s->root_directory_start_only,
2207 true,
2208 false,
2209 true,
2210 &s->control_pid);
2211 if (r < 0)
034c6ed7
LP
2212 goto fail;
2213
80876c20
LP
2214 service_set_state(s, SERVICE_START_PRE);
2215 } else
034c6ed7
LP
2216 service_enter_start(s);
2217
2218 return;
2219
2220fail:
66870f90
ZJS
2221 log_warning_unit(UNIT(s)->id,
2222 "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2223 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
2224}
2225
2226static void service_enter_restart(Service *s) {
718db961 2227 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
034c6ed7 2228 int r;
398ef8ba 2229
034c6ed7
LP
2230 assert(s);
2231
a8bb2e65
LP
2232 if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
2233 /* Don't restart things if we are going down anyway */
66870f90
ZJS
2234 log_info_unit(UNIT(s)->id,
2235 "Stop job pending for unit, delaying automatic restart.");
2edfa366 2236
718db961 2237 r = service_arm_timer(s, s->restart_usec);
a8bb2e65 2238 if (r < 0)
2edfa366 2239 goto fail;
feae8adb
DW
2240
2241 return;
2edfa366
LP
2242 }
2243
48bb5876
DW
2244 /* Any units that are bound to this service must also be
2245 * restarted. We use JOB_RESTART (instead of the more obvious
2246 * JOB_START) here so that those dependency jobs will be added
2247 * as well. */
2248 r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
2249 if (r < 0)
034c6ed7
LP
2250 goto fail;
2251
a8bb2e65
LP
2252 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
2253 * it will be canceled as part of the service_stop() call that
2254 * is executed as part of JOB_RESTART. */
2255
66870f90
ZJS
2256 log_debug_unit(UNIT(s)->id,
2257 "%s scheduled restart job.", UNIT(s)->id);
034c6ed7
LP
2258 return;
2259
2260fail:
66870f90
ZJS
2261 log_warning_unit(UNIT(s)->id,
2262 "%s failed to schedule restart job: %s",
718db961 2263 UNIT(s)->id, bus_error_message(&error, -r));
f42806df 2264 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
2265}
2266
2267static void service_enter_reload(Service *s) {
2268 int r;
2269
2270 assert(s);
2271
5e94833f
LP
2272 service_unwatch_control_pid(s);
2273
117dcc57
ZJS
2274 s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2275 if (s->control_command) {
867b3b7d
LP
2276 s->control_command_id = SERVICE_EXEC_RELOAD;
2277
ecedd90f
LP
2278 r = service_spawn(s,
2279 s->control_command,
2280 true,
2281 false,
2282 !s->permissions_start_only,
2283 !s->root_directory_start_only,
2284 false,
2285 false,
2286 true,
2287 &s->control_pid);
2288 if (r < 0)
034c6ed7
LP
2289 goto fail;
2290
80876c20
LP
2291 service_set_state(s, SERVICE_RELOAD);
2292 } else
f42806df 2293 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2294
2295 return;
2296
2297fail:
66870f90
ZJS
2298 log_warning_unit(UNIT(s)->id,
2299 "%s failed to run 'reload' task: %s",
2300 UNIT(s)->id, strerror(-r));
f42806df
LP
2301 s->reload_result = SERVICE_FAILURE_RESOURCES;
2302 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2303}
2304
f42806df 2305static void service_run_next_control(Service *s) {
034c6ed7
LP
2306 int r;
2307
2308 assert(s);
2309 assert(s->control_command);
2310 assert(s->control_command->command_next);
2311
34e9ba66 2312 assert(s->control_command_id != SERVICE_EXEC_START);
034c6ed7 2313
34e9ba66 2314 s->control_command = s->control_command->command_next;
5e94833f
LP
2315 service_unwatch_control_pid(s);
2316
ecedd90f
LP
2317 r = service_spawn(s,
2318 s->control_command,
2319 true,
2320 false,
2321 !s->permissions_start_only,
2322 !s->root_directory_start_only,
2323 s->control_command_id == SERVICE_EXEC_START_PRE ||
2324 s->control_command_id == SERVICE_EXEC_STOP_POST,
2325 false,
2326 true,
2327 &s->control_pid);
2328 if (r < 0)
034c6ed7
LP
2329 goto fail;
2330
2331 return;
2332
2333fail:
66870f90
ZJS
2334 log_warning_unit(UNIT(s)->id,
2335 "%s failed to run next control task: %s",
2336 UNIT(s)->id, strerror(-r));
034c6ed7 2337
80876c20 2338 if (s->state == SERVICE_START_PRE)
f42806df 2339 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
80876c20 2340 else if (s->state == SERVICE_STOP)
f42806df 2341 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7 2342 else if (s->state == SERVICE_STOP_POST)
f42806df 2343 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
e2f3b44c 2344 else if (s->state == SERVICE_RELOAD) {
f42806df
LP
2345 s->reload_result = SERVICE_FAILURE_RESOURCES;
2346 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c 2347 } else
f42806df 2348 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
5cb5a6ff
LP
2349}
2350
f42806df 2351static void service_run_next_main(Service *s) {
34e9ba66
LP
2352 pid_t pid;
2353 int r;
2354
2355 assert(s);
867b3b7d
LP
2356 assert(s->main_command);
2357 assert(s->main_command->command_next);
2358 assert(s->type == SERVICE_ONESHOT);
34e9ba66 2359
867b3b7d 2360 s->main_command = s->main_command->command_next;
34e9ba66
LP
2361 service_unwatch_main_pid(s);
2362
ecedd90f
LP
2363 r = service_spawn(s,
2364 s->main_command,
98709151 2365 true,
ecedd90f
LP
2366 true,
2367 true,
2368 true,
2369 true,
2370 s->notify_access != NOTIFY_NONE,
2371 false,
2372 &pid);
2373 if (r < 0)
34e9ba66
LP
2374 goto fail;
2375
2376 service_set_main_pid(s, pid);
2377
2378 return;
2379
2380fail:
66870f90
ZJS
2381 log_warning_unit(UNIT(s)->id,
2382 "%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
f42806df 2383 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
34e9ba66
LP
2384}
2385
bf500566 2386static int service_execute_action(Service *s, FailureAction action, const char *reason, bool log_action_none) {
4b939747
MO
2387 assert(s);
2388
bf500566
MO
2389 if (action == SERVICE_FAILURE_ACTION_REBOOT ||
2390 action == SERVICE_FAILURE_ACTION_REBOOT_FORCE)
efe6e7d3
MO
2391 update_reboot_param_file(s->reboot_arg);
2392
93ae25e6 2393 switch (action) {
4b939747 2394
bf500566 2395 case SERVICE_FAILURE_ACTION_NONE:
93ae25e6
MO
2396 if (log_action_none)
2397 log_warning_unit(UNIT(s)->id,
2398 "%s %s, refusing to start.", UNIT(s)->id, reason);
4b939747
MO
2399 break;
2400
bf500566 2401 case SERVICE_FAILURE_ACTION_REBOOT: {
718db961 2402 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
4b939747
MO
2403 int r;
2404
66870f90 2405 log_warning_unit(UNIT(s)->id,
93ae25e6 2406 "%s %s, rebooting.", UNIT(s)->id, reason);
4b939747 2407
117dcc57
ZJS
2408 r = manager_add_job_by_name(UNIT(s)->manager, JOB_START,
2409 SPECIAL_REBOOT_TARGET, JOB_REPLACE,
2410 true, &error, NULL);
718db961 2411 if (r < 0)
66870f90 2412 log_error_unit(UNIT(s)->id,
718db961 2413 "Failed to reboot: %s.", bus_error_message(&error, r));
4b939747
MO
2414
2415 break;
2416 }
2417
bf500566 2418 case SERVICE_FAILURE_ACTION_REBOOT_FORCE:
66870f90 2419 log_warning_unit(UNIT(s)->id,
93ae25e6 2420 "%s %s, forcibly rebooting.", UNIT(s)->id, reason);
4b939747
MO
2421 UNIT(s)->manager->exit_code = MANAGER_REBOOT;
2422 break;
2423
bf500566 2424 case SERVICE_FAILURE_ACTION_REBOOT_IMMEDIATE:
66870f90 2425 log_warning_unit(UNIT(s)->id,
93ae25e6 2426 "%s %s, rebooting immediately.", UNIT(s)->id, reason);
0049f05a 2427 sync();
efe6e7d3
MO
2428 if (s->reboot_arg) {
2429 log_info("Rebooting with argument '%s'.", s->reboot_arg);
2430 syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
2431 LINUX_REBOOT_CMD_RESTART2, s->reboot_arg);
2432 }
2433
2434 log_info("Rebooting.");
4b939747
MO
2435 reboot(RB_AUTOBOOT);
2436 break;
2437
2438 default:
66870f90 2439 log_error_unit(UNIT(s)->id,
bf500566
MO
2440 "failure action=%i", action);
2441 assert_not_reached("Unknown FailureAction.");
4b939747
MO
2442 }
2443
2444 return -ECANCELED;
2445}
2446
93ae25e6
MO
2447static int service_start_limit_test(Service *s) {
2448 assert(s);
2449
2450 if (ratelimit_test(&s->start_limit))
2451 return 0;
2452
2453 return service_execute_action(s, s->start_limit_action, "start request repeated too quickly", true);
2454}
2455
87f0e418
LP
2456static int service_start(Unit *u) {
2457 Service *s = SERVICE(u);
4b939747 2458 int r;
5cb5a6ff
LP
2459
2460 assert(s);
2461
034c6ed7
LP
2462 /* We cannot fulfill this request right now, try again later
2463 * please! */
2464 if (s->state == SERVICE_STOP ||
2465 s->state == SERVICE_STOP_SIGTERM ||
2466 s->state == SERVICE_STOP_SIGKILL ||
2467 s->state == SERVICE_STOP_POST ||
2468 s->state == SERVICE_FINAL_SIGTERM ||
2469 s->state == SERVICE_FINAL_SIGKILL)
5cb5a6ff
LP
2470 return -EAGAIN;
2471
034c6ed7
LP
2472 /* Already on it! */
2473 if (s->state == SERVICE_START_PRE ||
2474 s->state == SERVICE_START ||
2475 s->state == SERVICE_START_POST)
2476 return 0;
2477
2e9d6c12 2478 /* A service that will be restarted must be stopped first to
7f2cddae 2479 * trigger BindsTo and/or OnFailure dependencies. If a user
2e9d6c12 2480 * does not want to wait for the holdoff time to elapse, the
d4943dc7
LP
2481 * service should be manually restarted, not started. We
2482 * simply return EAGAIN here, so that any start jobs stay
2483 * queued, and assume that the auto restart timer will
2484 * eventually trigger the restart. */
2485 if (s->state == SERVICE_AUTO_RESTART)
a8bb2e65 2486 return -EAGAIN;
2e9d6c12
DW
2487
2488 assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
5cb5a6ff 2489
1e2e8133 2490 /* Make sure we don't enter a busy loop of some kind. */
4b939747 2491 r = service_start_limit_test(s);
c2f34808 2492 if (r < 0) {
8d1b002a 2493 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
4b939747 2494 return r;
c2f34808 2495 }
1e2e8133 2496
f42806df
LP
2497 s->result = SERVICE_SUCCESS;
2498 s->reload_result = SERVICE_SUCCESS;
034c6ed7 2499 s->main_pid_known = false;
6dfa5494 2500 s->main_pid_alien = false;
47342320 2501 s->forbid_restart = false;
034c6ed7
LP
2502
2503 service_enter_start_pre(s);
2504 return 0;
5cb5a6ff
LP
2505}
2506
87f0e418
LP
2507static int service_stop(Unit *u) {
2508 Service *s = SERVICE(u);
5cb5a6ff
LP
2509
2510 assert(s);
2511
f0c7b229 2512 /* Don't create restart jobs from here. */
47342320 2513 s->forbid_restart = true;
034c6ed7 2514
e537352b
LP
2515 /* Already on it */
2516 if (s->state == SERVICE_STOP ||
2517 s->state == SERVICE_STOP_SIGTERM ||
2518 s->state == SERVICE_STOP_SIGKILL ||
2519 s->state == SERVICE_STOP_POST ||
2520 s->state == SERVICE_FINAL_SIGTERM ||
2521 s->state == SERVICE_FINAL_SIGKILL)
2522 return 0;
2523
f0c7b229 2524 /* A restart will be scheduled or is in progress. */
034c6ed7 2525 if (s->state == SERVICE_AUTO_RESTART) {
0c7f15b3 2526 service_set_state(s, SERVICE_DEAD);
034c6ed7
LP
2527 return 0;
2528 }
2529
3f6c78dc
LP
2530 /* If there's already something running we go directly into
2531 * kill mode. */
2532 if (s->state == SERVICE_START_PRE ||
2533 s->state == SERVICE_START ||
2534 s->state == SERVICE_START_POST ||
2535 s->state == SERVICE_RELOAD) {
f42806df 2536 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
3f6c78dc
LP
2537 return 0;
2538 }
5cb5a6ff 2539
3f6c78dc
LP
2540 assert(s->state == SERVICE_RUNNING ||
2541 s->state == SERVICE_EXITED);
3a762661 2542
f42806df 2543 service_enter_stop(s, SERVICE_SUCCESS);
5cb5a6ff
LP
2544 return 0;
2545}
2546
87f0e418
LP
2547static int service_reload(Unit *u) {
2548 Service *s = SERVICE(u);
034c6ed7
LP
2549
2550 assert(s);
2551
80876c20 2552 assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
034c6ed7
LP
2553
2554 service_enter_reload(s);
5cb5a6ff
LP
2555 return 0;
2556}
2557
44a6b1b6 2558_pure_ static bool service_can_reload(Unit *u) {
87f0e418 2559 Service *s = SERVICE(u);
034c6ed7
LP
2560
2561 assert(s);
2562
2563 return !!s->exec_command[SERVICE_EXEC_RELOAD];
2564}
2565
a16e1123
LP
2566static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2567 Service *s = SERVICE(u);
2568
2569 assert(u);
2570 assert(f);
2571 assert(fds);
2572
2573 unit_serialize_item(u, f, "state", service_state_to_string(s->state));
f42806df
LP
2574 unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2575 unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
a16e1123
LP
2576
2577 if (s->control_pid > 0)
ccd06097
ZJS
2578 unit_serialize_item_format(u, f, "control-pid", PID_FMT,
2579 s->control_pid);
a16e1123 2580
5925dd3c 2581 if (s->main_pid_known && s->main_pid > 0)
ccd06097 2582 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
a16e1123
LP
2583
2584 unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
2585
3a2776bc
LP
2586 if (s->status_text)
2587 unit_serialize_item(u, f, "status-text", s->status_text);
2588
cfc4eb4c
LP
2589 /* FIXME: There's a minor uncleanliness here: if there are
2590 * multiple commands attached here, we will start from the
2591 * first one again */
a16e1123 2592 if (s->control_command_id >= 0)
117dcc57
ZJS
2593 unit_serialize_item(u, f, "control-command",
2594 service_exec_command_to_string(s->control_command_id));
a16e1123
LP
2595
2596 if (s->socket_fd >= 0) {
2597 int copy;
2598
2599 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
2600 return copy;
2601
2602 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2603 }
2604
ecdbca40 2605 if (s->main_exec_status.pid > 0) {
ccd06097
ZJS
2606 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT,
2607 s->main_exec_status.pid);
117dcc57
ZJS
2608 dual_timestamp_serialize(f, "main-exec-status-start",
2609 &s->main_exec_status.start_timestamp);
2610 dual_timestamp_serialize(f, "main-exec-status-exit",
2611 &s->main_exec_status.exit_timestamp);
ecdbca40 2612
799fd0fd 2613 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
117dcc57
ZJS
2614 unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
2615 s->main_exec_status.code);
2616 unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
2617 s->main_exec_status.status);
ecdbca40
LP
2618 }
2619 }
a6927d7f 2620 if (dual_timestamp_is_set(&s->watchdog_timestamp))
842129f5 2621 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
ecdbca40 2622
6aca9a58 2623 if (s->forbid_restart)
8d1a2802 2624 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
6aca9a58 2625
a16e1123
LP
2626 return 0;
2627}
2628
2629static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2630 Service *s = SERVICE(u);
a16e1123
LP
2631
2632 assert(u);
2633 assert(key);
2634 assert(value);
2635 assert(fds);
2636
2637 if (streq(key, "state")) {
2638 ServiceState state;
2639
117dcc57
ZJS
2640 state = service_state_from_string(value);
2641 if (state < 0)
66870f90 2642 log_debug_unit(u->id, "Failed to parse state value %s", value);
a16e1123
LP
2643 else
2644 s->deserialized_state = state;
f42806df
LP
2645 } else if (streq(key, "result")) {
2646 ServiceResult f;
2647
2648 f = service_result_from_string(value);
2649 if (f < 0)
66870f90 2650 log_debug_unit(u->id, "Failed to parse result value %s", value);
f42806df
LP
2651 else if (f != SERVICE_SUCCESS)
2652 s->result = f;
2653
2654 } else if (streq(key, "reload-result")) {
2655 ServiceResult f;
2656
2657 f = service_result_from_string(value);
2658 if (f < 0)
66870f90 2659 log_debug_unit(u->id, "Failed to parse reload result value %s", value);
f42806df
LP
2660 else if (f != SERVICE_SUCCESS)
2661 s->reload_result = f;
a16e1123 2662
a16e1123 2663 } else if (streq(key, "control-pid")) {
5925dd3c 2664 pid_t pid;
a16e1123 2665
e364ad06 2666 if (parse_pid(value, &pid) < 0)
66870f90 2667 log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
a16e1123 2668 else
e55224ca 2669 s->control_pid = pid;
a16e1123 2670 } else if (streq(key, "main-pid")) {
5925dd3c 2671 pid_t pid;
a16e1123 2672
e364ad06 2673 if (parse_pid(value, &pid) < 0)
66870f90 2674 log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
7400b9d2
LP
2675 else {
2676 service_set_main_pid(s, pid);
2677 unit_watch_pid(UNIT(s), pid);
2678 }
a16e1123
LP
2679 } else if (streq(key, "main-pid-known")) {
2680 int b;
2681
117dcc57
ZJS
2682 b = parse_boolean(value);
2683 if (b < 0)
66870f90 2684 log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
a16e1123
LP
2685 else
2686 s->main_pid_known = b;
3a2776bc
LP
2687 } else if (streq(key, "status-text")) {
2688 char *t;
2689
117dcc57
ZJS
2690 t = strdup(value);
2691 if (!t)
2692 log_oom();
2693 else {
3a2776bc
LP
2694 free(s->status_text);
2695 s->status_text = t;
2696 }
2697
a16e1123
LP
2698 } else if (streq(key, "control-command")) {
2699 ServiceExecCommand id;
2700
117dcc57
ZJS
2701 id = service_exec_command_from_string(value);
2702 if (id < 0)
66870f90 2703 log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
a16e1123
LP
2704 else {
2705 s->control_command_id = id;
2706 s->control_command = s->exec_command[id];
2707 }
2708 } else if (streq(key, "socket-fd")) {
2709 int fd;
2710
2711 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
66870f90 2712 log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
a16e1123
LP
2713 else {
2714
03e334a1 2715 safe_close(s->socket_fd);
a16e1123
LP
2716 s->socket_fd = fdset_remove(fds, fd);
2717 }
ecdbca40
LP
2718 } else if (streq(key, "main-exec-status-pid")) {
2719 pid_t pid;
2720
e364ad06 2721 if (parse_pid(value, &pid) < 0)
66870f90 2722 log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
ecdbca40
LP
2723 else
2724 s->main_exec_status.pid = pid;
2725 } else if (streq(key, "main-exec-status-code")) {
2726 int i;
2727
e364ad06 2728 if (safe_atoi(value, &i) < 0)
66870f90 2729 log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
ecdbca40
LP
2730 else
2731 s->main_exec_status.code = i;
2732 } else if (streq(key, "main-exec-status-status")) {
2733 int i;
2734
e364ad06 2735 if (safe_atoi(value, &i) < 0)
66870f90 2736 log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
ecdbca40
LP
2737 else
2738 s->main_exec_status.status = i;
799fd0fd
LP
2739 } else if (streq(key, "main-exec-status-start"))
2740 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2741 else if (streq(key, "main-exec-status-exit"))
2742 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
a6927d7f
MO
2743 else if (streq(key, "watchdog-timestamp"))
2744 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
613b411c 2745 else if (streq(key, "forbid-restart")) {
6aca9a58
SE
2746 int b;
2747
2748 b = parse_boolean(value);
2749 if (b < 0)
8d1a2802 2750 log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
6aca9a58
SE
2751 else
2752 s->forbid_restart = b;
c17ec25e 2753 } else
66870f90 2754 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
a16e1123
LP
2755
2756 return 0;
2757}
2758
44a6b1b6 2759_pure_ static UnitActiveState service_active_state(Unit *u) {
e056b01d
LP
2760 const UnitActiveState *table;
2761
87f0e418 2762 assert(u);
5cb5a6ff 2763
e056b01d
LP
2764 table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2765
2766 return table[SERVICE(u)->state];
034c6ed7
LP
2767}
2768
10a94420
LP
2769static const char *service_sub_state_to_string(Unit *u) {
2770 assert(u);
2771
2772 return service_state_to_string(SERVICE(u)->state);
2773}
2774
701cc384
LP
2775static bool service_check_gc(Unit *u) {
2776 Service *s = SERVICE(u);
2777
2778 assert(s);
2779
6d55002a
LP
2780 /* Never clean up services that still have a process around,
2781 * even if the service is formally dead. */
2782 if (cgroup_good(s) > 0 ||
2783 main_pid_good(s) > 0 ||
2784 control_pid_good(s) > 0)
2785 return true;
2786
2787#ifdef HAVE_SYSV_COMPAT
1b64d026 2788 if (s->is_sysv)
6d55002a 2789 return true;
07459bb6 2790#endif
701cc384 2791
6d55002a
LP
2792 return false;
2793}
2794
44a6b1b6 2795_pure_ static bool service_check_snapshot(Unit *u) {
701cc384
LP
2796 Service *s = SERVICE(u);
2797
2798 assert(s);
2799
99f37ad8 2800 return (s->socket_fd < 0);
701cc384
LP
2801}
2802
3a111838
MS
2803static int service_retry_pid_file(Service *s) {
2804 int r;
2805
2806 assert(s->pid_file);
2807 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2808
2809 r = service_load_pid_file(s, false);
2810 if (r < 0)
2811 return r;
2812
2813 service_unwatch_pid_file(s);
2814
f42806df 2815 service_enter_running(s, SERVICE_SUCCESS);
3a111838
MS
2816 return 0;
2817}
2818
2819static int service_watch_pid_file(Service *s) {
2820 int r;
2821
66870f90
ZJS
2822 log_debug_unit(UNIT(s)->id,
2823 "Setting watch for %s's PID file %s",
2824 UNIT(s)->id, s->pid_file_pathspec->path);
718db961 2825 r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
3a111838
MS
2826 if (r < 0)
2827 goto fail;
2828
2829 /* the pidfile might have appeared just before we set the watch */
bc41f93e
ZJS
2830 log_debug_unit(UNIT(s)->id,
2831 "Trying to read %s's PID file %s in case it changed",
2832 UNIT(s)->id, s->pid_file_pathspec->path);
3a111838
MS
2833 service_retry_pid_file(s);
2834
2835 return 0;
2836fail:
66870f90
ZJS
2837 log_error_unit(UNIT(s)->id,
2838 "Failed to set a watch for %s's PID file %s: %s",
2839 UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
3a111838
MS
2840 service_unwatch_pid_file(s);
2841 return r;
2842}
2843
2844static int service_demand_pid_file(Service *s) {
2845 PathSpec *ps;
2846
2847 assert(s->pid_file);
2848 assert(!s->pid_file_pathspec);
2849
2850 ps = new0(PathSpec, 1);
2851 if (!ps)
2852 return -ENOMEM;
2853
718db961 2854 ps->unit = UNIT(s);
3a111838
MS
2855 ps->path = strdup(s->pid_file);
2856 if (!ps->path) {
2857 free(ps);
2858 return -ENOMEM;
2859 }
2860
2861 path_kill_slashes(ps->path);
2862
2863 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2864 * keep their PID file open all the time. */
2865 ps->type = PATH_MODIFIED;
2866 ps->inotify_fd = -1;
2867
2868 s->pid_file_pathspec = ps;
2869
2870 return service_watch_pid_file(s);
2871}
2872
718db961 2873static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
e14c2802
LP
2874 PathSpec *p = userdata;
2875 Service *s;
2876
2877 assert(p);
2878
2879 s = SERVICE(p->unit);
3a111838
MS
2880
2881 assert(s);
2882 assert(fd >= 0);
2883 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2884 assert(s->pid_file_pathspec);
57020a3a 2885 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
3a111838 2886
718db961 2887 log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
3a111838 2888
e14c2802 2889 if (path_spec_fd_event(p, events) < 0)
3a111838
MS
2890 goto fail;
2891
2892 if (service_retry_pid_file(s) == 0)
718db961 2893 return 0;
3a111838
MS
2894
2895 if (service_watch_pid_file(s) < 0)
2896 goto fail;
2897
718db961
LP
2898 return 0;
2899
3a111838
MS
2900fail:
2901 service_unwatch_pid_file(s);
f42806df 2902 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
718db961 2903 return 0;
3a111838
MS
2904}
2905
a911bb9a
LP
2906static void service_notify_cgroup_empty_event(Unit *u) {
2907 Service *s = SERVICE(u);
2908
2909 assert(u);
2910
2911 log_debug_unit(u->id, "%s: cgroup is empty", u->id);
2912
2913 switch (s->state) {
2914
2915 /* Waiting for SIGCHLD is usually more interesting,
2916 * because it includes return codes/signals. Which is
2917 * why we ignore the cgroup events for most cases,
2918 * except when we don't know pid which to expect the
2919 * SIGCHLD for. */
2920
2921 case SERVICE_START:
2922 case SERVICE_START_POST:
2923 /* If we were hoping for the daemon to write its PID file,
2924 * we can give up now. */
2925 if (s->pid_file_pathspec) {
2926 log_warning_unit(u->id,
2927 "%s never wrote its PID file. Failing.", UNIT(s)->id);
2928 service_unwatch_pid_file(s);
2929 if (s->state == SERVICE_START)
2930 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2931 else
2932 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2933 }
2934 break;
2935
2936 case SERVICE_RUNNING:
2937 /* service_enter_running() will figure out what to do */
2938 service_enter_running(s, SERVICE_SUCCESS);
2939 break;
2940
2941 case SERVICE_STOP_SIGTERM:
2942 case SERVICE_STOP_SIGKILL:
2943
2944 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2945 service_enter_stop_post(s, SERVICE_SUCCESS);
2946
2947 break;
2948
2949 case SERVICE_STOP_POST:
2950 case SERVICE_FINAL_SIGTERM:
2951 case SERVICE_FINAL_SIGKILL:
2952 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2953 service_enter_dead(s, SERVICE_SUCCESS, true);
2954
2955 break;
2956
2957 default:
2958 ;
2959 }
2960}
2961
87f0e418
LP
2962static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2963 Service *s = SERVICE(u);
f42806df 2964 ServiceResult f;
5cb5a6ff
LP
2965
2966 assert(s);
034c6ed7
LP
2967 assert(pid >= 0);
2968
96342de6
LN
2969 if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2970 is_clean_exit_lsb(code, status, &s->success_status))
f42806df
LP
2971 f = SERVICE_SUCCESS;
2972 else if (code == CLD_EXITED)
2973 f = SERVICE_FAILURE_EXIT_CODE;
2974 else if (code == CLD_KILLED)
2975 f = SERVICE_FAILURE_SIGNAL;
2976 else if (code == CLD_DUMPED)
2977 f = SERVICE_FAILURE_CORE_DUMP;
d06dacd0 2978 else
cfc4eb4c 2979 assert_not_reached("Unknown code");
034c6ed7
LP
2980
2981 if (s->main_pid == pid) {
db01f8b3
MS
2982 /* Forking services may occasionally move to a new PID.
2983 * As long as they update the PID file before exiting the old
2984 * PID, they're fine. */
5375410b 2985 if (service_load_pid_file(s, false) == 0)
db01f8b3 2986 return;
034c6ed7 2987
034c6ed7 2988 s->main_pid = 0;
6ea832a2 2989 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
034c6ed7 2990
867b3b7d 2991 if (s->main_command) {
fbeefb45
LP
2992 /* If this is not a forking service than the
2993 * main process got started and hence we copy
2994 * the exit status so that it is recorded both
2995 * as main and as control process exit
2996 * status */
2997
867b3b7d 2998 s->main_command->exec_status = s->main_exec_status;
b708e7ce 2999
867b3b7d 3000 if (s->main_command->ignore)
f42806df 3001 f = SERVICE_SUCCESS;
fbeefb45
LP
3002 } else if (s->exec_command[SERVICE_EXEC_START]) {
3003
3004 /* If this is a forked process, then we should
3005 * ignore the return value if this was
3006 * configured for the starter process */
3007
3008 if (s->exec_command[SERVICE_EXEC_START]->ignore)
3009 f = SERVICE_SUCCESS;
034c6ed7
LP
3010 }
3011
bbc9006e
MT
3012 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
3013 u->id,
23635a85
ZJS
3014 "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
3015 u->id, sigchld_code_to_string(code), status,
3016 strna(code == CLD_EXITED
3017 ? exit_status_to_string(status, EXIT_STATUS_FULL)
3018 : signal_to_string(status)),
23635a85
ZJS
3019 "EXIT_CODE=%s", sigchld_code_to_string(code),
3020 "EXIT_STATUS=%i", status,
3021 NULL);
f42806df
LP
3022
3023 if (f != SERVICE_SUCCESS)
3024 s->result = f;
034c6ed7 3025
867b3b7d
LP
3026 if (s->main_command &&
3027 s->main_command->command_next &&
f42806df 3028 f == SERVICE_SUCCESS) {
034c6ed7 3029
34e9ba66
LP
3030 /* There is another command to *
3031 * execute, so let's do that. */
034c6ed7 3032
66870f90
ZJS
3033 log_debug_unit(u->id,
3034 "%s running next main command for state %s",
3035 u->id, service_state_to_string(s->state));
f42806df 3036 service_run_next_main(s);
034c6ed7 3037
34e9ba66
LP
3038 } else {
3039
3040 /* The service exited, so the service is officially
3041 * gone. */
867b3b7d 3042 s->main_command = NULL;
34e9ba66
LP
3043
3044 switch (s->state) {
3045
3046 case SERVICE_START_POST:
3047 case SERVICE_RELOAD:
3048 case SERVICE_STOP:
3049 /* Need to wait until the operation is
3050 * done */
c4653a4d 3051 break;
7d55e835 3052
34e9ba66
LP
3053 case SERVICE_START:
3054 if (s->type == SERVICE_ONESHOT) {
3055 /* This was our main goal, so let's go on */
f42806df 3056 if (f == SERVICE_SUCCESS)
34e9ba66
LP
3057 service_enter_start_post(s);
3058 else
f42806df 3059 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
34e9ba66 3060 break;
34e9ba66 3061 }
034c6ed7 3062
bfba3256
LP
3063 /* Fall through */
3064
34e9ba66 3065 case SERVICE_RUNNING:
f42806df 3066 service_enter_running(s, f);
34e9ba66 3067 break;
034c6ed7 3068
34e9ba66
LP
3069 case SERVICE_STOP_SIGTERM:
3070 case SERVICE_STOP_SIGKILL:
5cb5a6ff 3071
34e9ba66 3072 if (!control_pid_good(s))
f42806df 3073 service_enter_stop_post(s, f);
5cb5a6ff 3074
34e9ba66
LP
3075 /* If there is still a control process, wait for that first */
3076 break;
3077
bf108e55
LP
3078 case SERVICE_STOP_POST:
3079 case SERVICE_FINAL_SIGTERM:
3080 case SERVICE_FINAL_SIGKILL:
3081
3082 if (!control_pid_good(s))
3083 service_enter_dead(s, f, true);
3084 break;
3085
34e9ba66
LP
3086 default:
3087 assert_not_reached("Uh, main process died at wrong time.");
3088 }
034c6ed7 3089 }
5cb5a6ff 3090
034c6ed7 3091 } else if (s->control_pid == pid) {
34e9ba66
LP
3092 s->control_pid = 0;
3093
b708e7ce 3094 if (s->control_command) {
117dcc57
ZJS
3095 exec_status_exit(&s->control_command->exec_status,
3096 &s->exec_context, pid, code, status);
a16e1123 3097
b708e7ce 3098 if (s->control_command->ignore)
f42806df 3099 f = SERVICE_SUCCESS;
b708e7ce
LP
3100 }
3101
66870f90
ZJS
3102 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
3103 "%s: control process exited, code=%s status=%i",
3104 u->id, sigchld_code_to_string(code), status);
f42806df
LP
3105
3106 if (f != SERVICE_SUCCESS)
3107 s->result = f;
034c6ed7 3108
88f3e0c9
LP
3109 /* Immediately get rid of the cgroup, so that the
3110 * kernel doesn't delay the cgroup empty messages for
3111 * the service cgroup any longer than necessary */
4ad49000 3112 service_kill_control_processes(s);
88f3e0c9 3113
34e9ba66
LP
3114 if (s->control_command &&
3115 s->control_command->command_next &&
f42806df 3116 f == SERVICE_SUCCESS) {
034c6ed7
LP
3117
3118 /* There is another command to *
3119 * execute, so let's do that. */
3120
66870f90
ZJS
3121 log_debug_unit(u->id,
3122 "%s running next control command for state %s",
3123 u->id, service_state_to_string(s->state));
f42806df 3124 service_run_next_control(s);
034c6ed7 3125
80876c20 3126 } else {
034c6ed7
LP
3127 /* No further commands for this step, so let's
3128 * figure out what to do next */
3129
a16e1123
LP
3130 s->control_command = NULL;
3131 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3132
66870f90
ZJS
3133 log_debug_unit(u->id,
3134 "%s got final SIGCHLD for state %s",
3135 u->id, service_state_to_string(s->state));
bd982a8b 3136
034c6ed7
LP
3137 switch (s->state) {
3138
3139 case SERVICE_START_PRE:
f42806df 3140 if (f == SERVICE_SUCCESS)
034c6ed7
LP
3141 service_enter_start(s);
3142 else
f42806df 3143 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
034c6ed7
LP
3144 break;
3145
3146 case SERVICE_START:
bfba3256
LP
3147 if (s->type != SERVICE_FORKING)
3148 /* Maybe spurious event due to a reload that changed the type? */
3149 break;
034c6ed7 3150
f42806df
LP
3151 if (f != SERVICE_SUCCESS) {
3152 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3a111838
MS
3153 break;
3154 }
034c6ed7 3155
3a111838 3156 if (s->pid_file) {
f42806df
LP
3157 bool has_start_post;
3158 int r;
3159
3a111838
MS
3160 /* Let's try to load the pid file here if we can.
3161 * The PID file might actually be created by a START_POST
3162 * script. In that case don't worry if the loading fails. */
f42806df
LP
3163
3164 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3165 r = service_load_pid_file(s, !has_start_post);
3a111838
MS
3166 if (!has_start_post && r < 0) {
3167 r = service_demand_pid_file(s);
3168 if (r < 0 || !cgroup_good(s))
f42806df 3169 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3a111838
MS
3170 break;
3171 }
034c6ed7 3172 } else
3a111838 3173 service_search_main_pid(s);
034c6ed7 3174
3a111838 3175 service_enter_start_post(s);
034c6ed7
LP
3176 break;
3177
3178 case SERVICE_START_POST:
f42806df
LP
3179 if (f != SERVICE_SUCCESS) {
3180 service_enter_stop(s, f);
2096e009 3181 break;
034c6ed7
LP
3182 }
3183
2096e009 3184 if (s->pid_file) {
f42806df
LP
3185 int r;
3186
3187 r = service_load_pid_file(s, true);
2096e009
MS
3188 if (r < 0) {
3189 r = service_demand_pid_file(s);
3190 if (r < 0 || !cgroup_good(s))
f42806df 3191 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2096e009
MS
3192 break;
3193 }
3194 } else
3195 service_search_main_pid(s);
3196
f42806df 3197 service_enter_running(s, SERVICE_SUCCESS);
3185a36b 3198 break;
034c6ed7
LP
3199
3200 case SERVICE_RELOAD:
f42806df 3201 if (f == SERVICE_SUCCESS) {
5375410b 3202 service_load_pid_file(s, true);
3185a36b
LP
3203 service_search_main_pid(s);
3204 }
3205
f42806df
LP
3206 s->reload_result = f;
3207 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
3208 break;
3209
3210 case SERVICE_STOP:
f42806df 3211 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
3212 break;
3213
3214 case SERVICE_STOP_SIGTERM:
3215 case SERVICE_STOP_SIGKILL:
3216 if (main_pid_good(s) <= 0)
f42806df 3217 service_enter_stop_post(s, f);
034c6ed7
LP
3218
3219 /* If there is still a service
3220 * process around, wait until
3221 * that one quit, too */
3222 break;
3223
3224 case SERVICE_STOP_POST:
3225 case SERVICE_FINAL_SIGTERM:
3226 case SERVICE_FINAL_SIGKILL:
bf108e55
LP
3227 if (main_pid_good(s) <= 0)
3228 service_enter_dead(s, f, true);
034c6ed7
LP
3229 break;
3230
3231 default:
3232 assert_not_reached("Uh, control process died at wrong time.");
3233 }
3234 }
8c47c732 3235 }
c4e2ceae
LP
3236
3237 /* Notify clients about changed exit status */
3238 unit_add_to_dbus_queue(u);
a911bb9a
LP
3239
3240 /* We got one SIGCHLD for the service, let's watch all
3241 * processes that are now running of the service, and watch
3242 * that. Among the PIDs we then watch will be children
3243 * reassigned to us, which hopefully allows us to identify
3244 * when all children are gone */
3245 unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
3246 unit_watch_all_pids(u);
3247
3248 /* If the PID set is empty now, then let's finish this off */
3249 if (set_isempty(u->pids))
3250 service_notify_cgroup_empty_event(u);
034c6ed7
LP
3251}
3252
718db961
LP
3253static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
3254 Service *s = SERVICE(userdata);
034c6ed7
LP
3255
3256 assert(s);
718db961 3257 assert(source == s->timer_event_source);
034c6ed7
LP
3258
3259 switch (s->state) {
3260
3261 case SERVICE_START_PRE:
3262 case SERVICE_START:
718db961 3263 log_warning_unit(UNIT(s)->id,
41aef6fc
ZJS
3264 "%s %s operation timed out. Terminating.",
3265 UNIT(s)->id,
3266 s->state == SERVICE_START ? "start" : "start-pre");
f42806df 3267 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
80876c20
LP
3268 break;
3269
034c6ed7 3270 case SERVICE_START_POST:
718db961 3271 log_warning_unit(UNIT(s)->id,
41aef6fc 3272 "%s start-post operation timed out. Stopping.", UNIT(s)->id);
f42806df 3273 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3274 break;
3275
e2f3b44c 3276 case SERVICE_RELOAD:
718db961 3277 log_warning_unit(UNIT(s)->id,
41aef6fc 3278 "%s reload operation timed out. Stopping.", UNIT(s)->id);
f42806df
LP
3279 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3280 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c
LP
3281 break;
3282
034c6ed7 3283 case SERVICE_STOP:
718db961
LP
3284 log_warning_unit(UNIT(s)->id,
3285 "%s stopping timed out. Terminating.", UNIT(s)->id);
f42806df 3286 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3287 break;
3288
3289 case SERVICE_STOP_SIGTERM:
4819ff03 3290 if (s->kill_context.send_sigkill) {
718db961 3291 log_warning_unit(UNIT(s)->id,
41aef6fc 3292 "%s stop-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 3293 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3294 } else {
718db961 3295 log_warning_unit(UNIT(s)->id,
41aef6fc 3296 "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s)->id);
f42806df 3297 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
ba035df2
LP
3298 }
3299
034c6ed7
LP
3300 break;
3301
3302 case SERVICE_STOP_SIGKILL:
35b8ca3a 3303 /* Uh, we sent a SIGKILL and it is still not gone?
034c6ed7
LP
3304 * Must be something we cannot kill, so let's just be
3305 * weirded out and continue */
3306
718db961
LP
3307 log_warning_unit(UNIT(s)->id,
3308 "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
f42806df 3309 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3310 break;
3311
3312 case SERVICE_STOP_POST:
718db961 3313 log_warning_unit(UNIT(s)->id,
41aef6fc 3314 "%s stop-post timed out. Terminating.", UNIT(s)->id);
f42806df 3315 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3316 break;
3317
3318 case SERVICE_FINAL_SIGTERM:
4819ff03 3319 if (s->kill_context.send_sigkill) {
718db961 3320 log_warning_unit(UNIT(s)->id,
41aef6fc 3321 "%s stop-final-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 3322 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3323 } else {
718db961 3324 log_warning_unit(UNIT(s)->id,
41aef6fc 3325 "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.",
718db961 3326 UNIT(s)->id);
f42806df 3327 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
ba035df2
LP
3328 }
3329
034c6ed7
LP
3330 break;
3331
3332 case SERVICE_FINAL_SIGKILL:
718db961 3333 log_warning_unit(UNIT(s)->id,
41aef6fc 3334 "%s still around after final SIGKILL. Entering failed mode.", UNIT(s)->id);
f42806df 3335 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
034c6ed7
LP
3336 break;
3337
3338 case SERVICE_AUTO_RESTART:
718db961 3339 log_info_unit(UNIT(s)->id,
ef417cfd
ZJS
3340 s->restart_usec > 0 ?
3341 "%s holdoff time over, scheduling restart." :
3342 "%s has no holdoff time, scheduling restart.",
3343 UNIT(s)->id);
034c6ed7
LP
3344 service_enter_restart(s);
3345 break;
3346
3347 default:
3348 assert_not_reached("Timeout at wrong time.");
3349 }
718db961
LP
3350
3351 return 0;
3352}
3353
3354static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
3355 Service *s = SERVICE(userdata);
3356
3357 assert(s);
3358 assert(source == s->watchdog_event_source);
3359
842129f5
LP
3360 log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id);
3361 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
3362
718db961 3363 return 0;
5cb5a6ff
LP
3364}
3365
c952c6ec 3366static void service_notify_message(Unit *u, pid_t pid, char **tags) {
8c47c732
LP
3367 Service *s = SERVICE(u);
3368 const char *e;
30b5275a 3369 bool notify_dbus = false;
8c47c732
LP
3370
3371 assert(u);
3372
ccd06097
ZJS
3373 log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT" (%s...)",
3374 u->id, pid, tags && *tags ? tags[0] : "(empty)");
da13d4d2 3375
c952c6ec 3376 if (s->notify_access == NOTIFY_NONE) {
66870f90 3377 log_warning_unit(u->id,
ccd06097
ZJS
3378 "%s: Got notification message from PID "PID_FMT", but reception is disabled.",
3379 u->id, pid);
c952c6ec
LP
3380 return;
3381 }
3382
336c6e46
LP
3383 if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
3384
3385 if (s->main_pid != 0)
3386 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);
3387 else
3a33e61d 3388 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
3389 return;
3390 }
3391
8c47c732
LP
3392 /* Interpret MAINPID= */
3393 if ((e = strv_find_prefix(tags, "MAINPID=")) &&
3394 (s->state == SERVICE_START ||
3395 s->state == SERVICE_START_POST ||
3396 s->state == SERVICE_RUNNING ||
3397 s->state == SERVICE_RELOAD)) {
8c47c732 3398
5925dd3c 3399 if (parse_pid(e + 8, &pid) < 0)
30b5275a 3400 log_warning_unit(u->id, "Failed to parse notification message %s", e);
8c47c732 3401 else {
30b5275a 3402 log_debug_unit(u->id, "%s: got %s", u->id, e);
5925dd3c 3403 service_set_main_pid(s, pid);
7400b9d2 3404 unit_watch_pid(UNIT(s), pid);
30b5275a 3405 notify_dbus = true;
8c47c732
LP
3406 }
3407 }
3408
3409 /* Interpret READY= */
30b5275a
LP
3410 if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START && strv_find(tags, "READY=1")) {
3411 log_debug_unit(u->id, "%s: got READY=1", u->id);
8c47c732 3412 service_enter_start_post(s);
30b5275a 3413 notify_dbus = true;
8c47c732
LP
3414 }
3415
3416 /* Interpret STATUS= */
7f110ff9
LP
3417 e = strv_find_prefix(tags, "STATUS=");
3418 if (e) {
8c47c732
LP
3419 char *t;
3420
3a2776bc 3421 if (e[7]) {
7f110ff9 3422 if (!utf8_is_valid(e+7)) {
30b5275a 3423 log_warning_unit(u->id, "Status message in notification is not UTF-8 clean.");
7f110ff9
LP
3424 return;
3425 }
3426
30b5275a
LP
3427 log_debug_unit(u->id, "%s: got %s", u->id, e);
3428
7f110ff9
LP
3429 t = strdup(e+7);
3430 if (!t) {
30b5275a 3431 log_oom();
3a2776bc
LP
3432 return;
3433 }
3434
30b5275a
LP
3435 } else
3436 t = NULL;
8c47c732 3437
30b5275a 3438 if (!streq_ptr(s->status_text, t)) {
3a2776bc
LP
3439 free(s->status_text);
3440 s->status_text = t;
30b5275a
LP
3441 notify_dbus = true;
3442 } else
3443 free(t);
8c47c732 3444 }
842129f5 3445
6f285378 3446 /* Interpret WATCHDOG= */
a6927d7f 3447 if (strv_find(tags, "WATCHDOG=1")) {
842129f5
LP
3448 log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
3449 service_reset_watchdog(s);
a6927d7f 3450 }
c4e2ceae
LP
3451
3452 /* Notify clients about changed status or main pid */
30b5275a
LP
3453 if (notify_dbus)
3454 unit_add_to_dbus_queue(u);
8c47c732
LP
3455}
3456
68db7a3b
ZJS
3457static int service_get_timeout(Unit *u, uint64_t *timeout) {
3458 Service *s = SERVICE(u);
3459 int r;
3460
3461 if (!s->timer_event_source)
3462 return 0;
3463
3464 r = sd_event_source_get_time(s->timer_event_source, timeout);
3465 if (r < 0)
3466 return r;
3467
3468 return 1;
3469}
3470
07459bb6 3471#ifdef HAVE_SYSV_COMPAT
de3910a3 3472
2c4104f0 3473static int service_enumerate(Manager *m) {
2c4104f0
LP
3474 char **p;
3475 unsigned i;
7fd1b19b
HH
3476 _cleanup_closedir_ DIR *d = NULL;
3477 _cleanup_free_ char *path = NULL, *fpath = NULL, *name = NULL;
b92bea5d 3478 Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
7fd1b19b 3479 _cleanup_set_free_ Set *shutdown_services = NULL;
c68364b7
LP
3480 Unit *service;
3481 Iterator j;
2c4104f0
LP
3482 int r;
3483
3484 assert(m);
3485
67445f4e 3486 if (m->running_as != SYSTEMD_SYSTEM)
b1bc08e5
LP
3487 return 0;
3488
84e3543e 3489 STRV_FOREACH(p, m->lookup_paths.sysvrcnd_path)
09cd1ab1 3490 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
2c4104f0
LP
3491 struct dirent *de;
3492
3493 free(path);
b7def684 3494 path = strjoin(*p, "/", rcnd_table[i].path, NULL);
70132bd0 3495 if (!path) {
2c4104f0
LP
3496 r = -ENOMEM;
3497 goto finish;
3498 }
3499
3500 if (d)
3501 closedir(d);
3502
117dcc57
ZJS
3503 d = opendir(path);
3504 if (!d) {
2c4104f0 3505 if (errno != ENOENT)
f5f6d0e2 3506 log_warning("opendir(%s) failed: %m", path);
2c4104f0
LP
3507
3508 continue;
3509 }
3510
3511 while ((de = readdir(d))) {
db06e3b6 3512 int a, b;
2c4104f0
LP
3513
3514 if (ignore_file(de->d_name))
3515 continue;
3516
3517 if (de->d_name[0] != 'S' && de->d_name[0] != 'K')
3518 continue;
3519
3520 if (strlen(de->d_name) < 4)
3521 continue;
3522
db06e3b6
LP
3523 a = undecchar(de->d_name[1]);
3524 b = undecchar(de->d_name[2]);
3525
3526 if (a < 0 || b < 0)
3527 continue;
3528
2c4104f0 3529 free(fpath);
b7def684 3530 fpath = strjoin(path, "/", de->d_name, NULL);
8ea913b2 3531 if (!fpath) {
2c4104f0
LP
3532 r = -ENOMEM;
3533 goto finish;
3534 }
3535
3536 if (access(fpath, X_OK) < 0) {
3537
3538 if (errno != ENOENT)
f5f6d0e2 3539 log_warning("access() failed on %s: %m", fpath);
2c4104f0
LP
3540
3541 continue;
3542 }
3543
3544 free(name);
117dcc57
ZJS
3545 name = sysv_translate_name(de->d_name + 3);
3546 if (!name) {
3547 r = log_oom();
2c4104f0
LP
3548 goto finish;
3549 }
3550
66870f90
ZJS
3551 r = manager_load_unit_prepare(m, name, NULL, NULL, &service);
3552 if (r < 0) {
fbe9f3a9
LP
3553 log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
3554 continue;
3555 }
2c4104f0 3556
c68364b7
LP
3557 if (de->d_name[0] == 'S') {
3558
3cdebc21 3559 if (rcnd_table[i].type == RUNLEVEL_UP) {
ea87ca5a
LP
3560 SERVICE(service)->sysv_start_priority_from_rcnd =
3561 MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
db06e3b6 3562
c68364b7 3563 SERVICE(service)->sysv_enabled = true;
f73d93a4 3564 }
db06e3b6 3565
117dcc57
ZJS
3566 r = set_ensure_allocated(&runlevel_services[i],
3567 trivial_hash_func, trivial_compare_func);
3568 if (r < 0)
c68364b7 3569 goto finish;
2c4104f0 3570
117dcc57
ZJS
3571 r = set_put(runlevel_services[i], service);
3572 if (r < 0)
2c4104f0 3573 goto finish;
23a177ef 3574
fc5df99e 3575 } else if (de->d_name[0] == 'K' &&
3cdebc21 3576 (rcnd_table[i].type == RUNLEVEL_DOWN)) {
6542952f 3577
117dcc57
ZJS
3578 r = set_ensure_allocated(&shutdown_services,
3579 trivial_hash_func, trivial_compare_func);
3580 if (r < 0)
c68364b7
LP
3581 goto finish;
3582
117dcc57
ZJS
3583 r = set_put(shutdown_services, service);
3584 if (r < 0)
2c4104f0
LP
3585 goto finish;
3586 }
3587 }
3588 }
3589
c68364b7
LP
3590 /* Now we loaded all stubs and are aware of the lowest
3591 start-up priority for all services, not let's actually load
3592 the services, this will also tell us which services are
3593 actually native now */
3594 manager_dispatch_load_queue(m);
3595
3596 /* If this is a native service, rely on native ways to pull in
3597 * a service, don't pull it in via sysv rcN.d links. */
3598 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++)
3599 SET_FOREACH(service, runlevel_services[i], j) {
3600 service = unit_follow_merge(service);
3601
ac155bb8 3602 if (service->fragment_path)
c68364b7
LP
3603 continue;
3604
117dcc57
ZJS
3605 r = unit_add_two_dependencies_by_name_inverse(
3606 service, UNIT_AFTER, UNIT_WANTS,
3607 rcnd_table[i].target, NULL, true);
3608 if (r < 0)
c68364b7
LP
3609 goto finish;
3610 }
3611
3612 /* We honour K links only for halt/reboot. For the normal
3613 * runlevels we assume the stop jobs will be implicitly added
35b8ca3a 3614 * by the core logic. Also, we don't really distinguish here
c68364b7 3615 * between the runlevels 0 and 6 and just add them to the
3cdebc21 3616 * special shutdown target. */
c68364b7
LP
3617 SET_FOREACH(service, shutdown_services, j) {
3618 service = unit_follow_merge(service);
3619
ac155bb8 3620 if (service->fragment_path)
c68364b7
LP
3621 continue;
3622
117dcc57
ZJS
3623 r = unit_add_two_dependencies_by_name(
3624 service, UNIT_BEFORE, UNIT_CONFLICTS,
3625 SPECIAL_SHUTDOWN_TARGET, NULL, true);
3626 if (r < 0)
c68364b7
LP
3627 goto finish;
3628 }
3629
2c4104f0
LP
3630 r = 0;
3631
3632finish:
fbe9f3a9 3633
c68364b7
LP
3634 for (i = 0; i < ELEMENTSOF(rcnd_table); i++)
3635 set_free(runlevel_services[i]);
2c4104f0
LP
3636
3637 return r;
3638}
07459bb6 3639#endif
2c4104f0 3640
05e343b7
LP
3641static void service_bus_name_owner_change(
3642 Unit *u,
3643 const char *name,
3644 const char *old_owner,
3645 const char *new_owner) {
3646
3647 Service *s = SERVICE(u);
718db961 3648 int r;
05e343b7
LP
3649
3650 assert(s);
3651 assert(name);
3652
3653 assert(streq(s->bus_name, name));
3654 assert(old_owner || new_owner);
3655
3656 if (old_owner && new_owner)
66870f90
ZJS
3657 log_debug_unit(u->id,
3658 "%s's D-Bus name %s changed owner from %s to %s",
3659 u->id, name, old_owner, new_owner);
05e343b7 3660 else if (old_owner)
66870f90
ZJS
3661 log_debug_unit(u->id,
3662 "%s's D-Bus name %s no longer registered by %s",
3663 u->id, name, old_owner);
05e343b7 3664 else
66870f90
ZJS
3665 log_debug_unit(u->id,
3666 "%s's D-Bus name %s now registered by %s",
3667 u->id, name, new_owner);
05e343b7
LP
3668
3669 s->bus_name_good = !!new_owner;
3670
3671 if (s->type == SERVICE_DBUS) {
3672
3673 /* service_enter_running() will figure out what to
3674 * do */
3675 if (s->state == SERVICE_RUNNING)
f42806df 3676 service_enter_running(s, SERVICE_SUCCESS);
05e343b7
LP
3677 else if (s->state == SERVICE_START && new_owner)
3678 service_enter_start_post(s);
3679
3680 } else if (new_owner &&
3681 s->main_pid <= 0 &&
3682 (s->state == SERVICE_START ||
3683 s->state == SERVICE_START_POST ||
3684 s->state == SERVICE_RUNNING ||
3685 s->state == SERVICE_RELOAD)) {
3686
5b12334d 3687 _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
718db961 3688 pid_t pid;
05e343b7 3689
718db961 3690 /* Try to acquire PID from bus service */
05e343b7 3691
49b832c5 3692 r = sd_bus_get_owner(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
5b12334d
LP
3693 if (r >= 0)
3694 r = sd_bus_creds_get_pid(creds, &pid);
718db961
LP
3695 if (r >= 0) {
3696 log_debug_unit(u->id, "%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
05e343b7 3697
718db961
LP
3698 service_set_main_pid(s, pid);
3699 unit_watch_pid(UNIT(s), pid);
3700 }
7400b9d2 3701 }
05e343b7
LP
3702}
3703
6cf6bbc2 3704int service_set_socket_fd(Service *s, int fd, Socket *sock) {
79a98c60
LP
3705 _cleanup_free_ char *peer = NULL;
3706 int r;
57020a3a 3707
4f2d528d
LP
3708 assert(s);
3709 assert(fd >= 0);
3710
3711 /* This is called by the socket code when instantiating a new
3712 * service for a stream socket and the socket needs to be
3713 * configured. */
3714
1124fe6f 3715 if (UNIT(s)->load_state != UNIT_LOADED)
4f2d528d
LP
3716 return -EINVAL;
3717
3718 if (s->socket_fd >= 0)
3719 return -EBUSY;
3720
3721 if (s->state != SERVICE_DEAD)
3722 return -EAGAIN;
3723
79a98c60
LP
3724 if (getpeername_pretty(fd, &peer) >= 0) {
3725
3726 if (UNIT(s)->description) {
3727 _cleanup_free_ char *a;
3728
3729 a = strjoin(UNIT(s)->description, " (", peer, ")", NULL);
3730 if (!a)
3731 return -ENOMEM;
3732
3733 r = unit_set_description(UNIT(s), a);
3734 } else
3735 r = unit_set_description(UNIT(s), peer);
3736
3737 if (r < 0)
3738 return r;
3739 }
3740
4f2d528d 3741 s->socket_fd = fd;
6cf6bbc2 3742
57020a3a
LP
3743 unit_ref_set(&s->accept_socket, UNIT(sock));
3744
3745 return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
4f2d528d
LP
3746}
3747
fdf20a31 3748static void service_reset_failed(Unit *u) {
5632e374
LP
3749 Service *s = SERVICE(u);
3750
3751 assert(s);
3752
fdf20a31 3753 if (s->state == SERVICE_FAILED)
5632e374
LP
3754 service_set_state(s, SERVICE_DEAD);
3755
f42806df
LP
3756 s->result = SERVICE_SUCCESS;
3757 s->reload_result = SERVICE_SUCCESS;
451b34cc
LP
3758
3759 RATELIMIT_RESET(s->start_limit);
5632e374
LP
3760}
3761
718db961 3762static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
8a0867d6 3763 Service *s = SERVICE(u);
41efeaec 3764
814cc562 3765 return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
8a0867d6
LP
3766}
3767
94f04347
LP
3768static const char* const service_state_table[_SERVICE_STATE_MAX] = {
3769 [SERVICE_DEAD] = "dead",
3770 [SERVICE_START_PRE] = "start-pre",
3771 [SERVICE_START] = "start",
3772 [SERVICE_START_POST] = "start-post",
3773 [SERVICE_RUNNING] = "running",
80876c20 3774 [SERVICE_EXITED] = "exited",
94f04347
LP
3775 [SERVICE_RELOAD] = "reload",
3776 [SERVICE_STOP] = "stop",
3777 [SERVICE_STOP_SIGTERM] = "stop-sigterm",
3778 [SERVICE_STOP_SIGKILL] = "stop-sigkill",
3779 [SERVICE_STOP_POST] = "stop-post",
3780 [SERVICE_FINAL_SIGTERM] = "final-sigterm",
3781 [SERVICE_FINAL_SIGKILL] = "final-sigkill",
fdf20a31 3782 [SERVICE_FAILED] = "failed",
94f04347
LP
3783 [SERVICE_AUTO_RESTART] = "auto-restart",
3784};
3785
3786DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
3787
3788static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
525ee6f4
LP
3789 [SERVICE_RESTART_NO] = "no",
3790 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
50caaedb 3791 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
dc99a976 3792 [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
50caaedb
LP
3793 [SERVICE_RESTART_ON_ABORT] = "on-abort",
3794 [SERVICE_RESTART_ALWAYS] = "always"
94f04347
LP
3795};
3796
3797DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3798
3799static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
94f04347 3800 [SERVICE_SIMPLE] = "simple",
0d624a78 3801 [SERVICE_FORKING] = "forking",
34e9ba66 3802 [SERVICE_ONESHOT] = "oneshot",
8c47c732 3803 [SERVICE_DBUS] = "dbus",
f2b68789
LP
3804 [SERVICE_NOTIFY] = "notify",
3805 [SERVICE_IDLE] = "idle"
94f04347
LP
3806};
3807
3808DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3809
e537352b 3810static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
94f04347
LP
3811 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
3812 [SERVICE_EXEC_START] = "ExecStart",
3813 [SERVICE_EXEC_START_POST] = "ExecStartPost",
3814 [SERVICE_EXEC_RELOAD] = "ExecReload",
3815 [SERVICE_EXEC_STOP] = "ExecStop",
3816 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3817};
3818
3819DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3820
c952c6ec
LP
3821static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
3822 [NOTIFY_NONE] = "none",
3823 [NOTIFY_MAIN] = "main",
3824 [NOTIFY_ALL] = "all"
3825};
3826
3827DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
3828
f42806df
LP
3829static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3830 [SERVICE_SUCCESS] = "success",
3831 [SERVICE_FAILURE_RESOURCES] = "resources",
3832 [SERVICE_FAILURE_TIMEOUT] = "timeout",
3833 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3834 [SERVICE_FAILURE_SIGNAL] = "signal",
bb242b7b 3835 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
8d1b002a
LP
3836 [SERVICE_FAILURE_WATCHDOG] = "watchdog",
3837 [SERVICE_FAILURE_START_LIMIT] = "start-limit"
f42806df
LP
3838};
3839
3840DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3841
bf500566
MO
3842static const char* const failure_action_table[_SERVICE_FAILURE_ACTION_MAX] = {
3843 [SERVICE_FAILURE_ACTION_NONE] = "none",
3844 [SERVICE_FAILURE_ACTION_REBOOT] = "reboot",
3845 [SERVICE_FAILURE_ACTION_REBOOT_FORCE] = "reboot-force",
3846 [SERVICE_FAILURE_ACTION_REBOOT_IMMEDIATE] = "reboot-immediate"
4b939747 3847};
bf500566 3848DEFINE_STRING_TABLE_LOOKUP(failure_action, FailureAction);
4b939747 3849
87f0e418 3850const UnitVTable service_vtable = {
7d17cfbc 3851 .object_size = sizeof(Service),
718db961
LP
3852 .exec_context_offset = offsetof(Service, exec_context),
3853 .cgroup_context_offset = offsetof(Service, cgroup_context),
3854 .kill_context_offset = offsetof(Service, kill_context),
613b411c 3855 .exec_runtime_offset = offsetof(Service, exec_runtime),
3ef63c31 3856
f975e971
LP
3857 .sections =
3858 "Unit\0"
3859 "Service\0"
3860 "Install\0",
4ad49000 3861 .private_section = "Service",
71645aca 3862
034c6ed7
LP
3863 .init = service_init,
3864 .done = service_done,
a16e1123
LP
3865 .load = service_load,
3866
3867 .coldplug = service_coldplug,
034c6ed7 3868
5cb5a6ff
LP
3869 .dump = service_dump,
3870
3871 .start = service_start,
3872 .stop = service_stop,
3873 .reload = service_reload,
3874
034c6ed7
LP
3875 .can_reload = service_can_reload,
3876
8a0867d6
LP
3877 .kill = service_kill,
3878
a16e1123
LP
3879 .serialize = service_serialize,
3880 .deserialize_item = service_deserialize_item,
3881
5cb5a6ff 3882 .active_state = service_active_state,
10a94420 3883 .sub_state_to_string = service_sub_state_to_string,
5cb5a6ff 3884
701cc384
LP
3885 .check_gc = service_check_gc,
3886 .check_snapshot = service_check_snapshot,
3887
034c6ed7 3888 .sigchld_event = service_sigchld_event,
2c4104f0 3889
fdf20a31 3890 .reset_failed = service_reset_failed,
5632e374 3891
4ad49000 3892 .notify_cgroup_empty = service_notify_cgroup_empty_event,
8c47c732 3893 .notify_message = service_notify_message,
8e274523 3894
05e343b7 3895 .bus_name_owner_change = service_bus_name_owner_change,
05e343b7 3896
c4e2ceae 3897 .bus_interface = "org.freedesktop.systemd1.Service",
718db961 3898 .bus_vtable = bus_service_vtable,
74c964d3
LP
3899 .bus_set_property = bus_service_set_property,
3900 .bus_commit_properties = bus_service_commit_properties,
4139c1b2 3901
68db7a3b
ZJS
3902 .get_timeout = service_get_timeout,
3903
07459bb6 3904#ifdef HAVE_SYSV_COMPAT
c6918296 3905 .enumerate = service_enumerate,
07459bb6 3906#endif
718db961
LP
3907
3908 .can_transient = true,
3909
c6918296
MS
3910 .status_message_formats = {
3911 .starting_stopping = {
3912 [0] = "Starting %s...",
3913 [1] = "Stopping %s...",
3914 },
3915 .finished_start_job = {
3916 [JOB_DONE] = "Started %s.",
3917 [JOB_FAILED] = "Failed to start %s.",
3918 [JOB_DEPENDENCY] = "Dependency failed for %s.",
3919 [JOB_TIMEOUT] = "Timed out starting %s.",
3920 },
3921 .finished_stop_job = {
3922 [JOB_DONE] = "Stopped %s.",
3923 [JOB_FAILED] = "Stopped (with error) %s.",
3924 [JOB_TIMEOUT] = "Timed out stopping %s.",
3925 },
3926 },
5cb5a6ff 3927};