]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/service.c
service: add support for reboot argument when triggered by StartLimitAction=
[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,
a7d3cc26
LP
395 "network", SPECIAL_NETWORK_TARGET,
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
LP
836 char *n, *m;
837
838 if (!(n = strndup(w, z))) {
839 r = -ENOMEM;
840 goto finish;
841 }
842
2b6bf07d 843 r = sysv_translate_facility(n, basename(path), &m);
e83c7c0b 844 if (r < 0) {
66870f90
ZJS
845 log_error_unit(u->id,
846 "[%s:%u] Failed to translate LSB dependency %s, ignoring: %s",
847 path, line, n, strerror(-r));
e83c7c0b
LP
848 free(n);
849 continue;
850 }
851
852 free(n);
2c4104f0
LP
853
854 if (r == 0)
855 continue;
856
c2b35af6 857 r = unit_add_dependency_by_name(u, startswith_no_case(t, "X-Start-Before:") ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true);
2c4104f0
LP
858
859 if (r < 0)
66870f90
ZJS
860 log_error_unit(u->id, "[%s:%u] Failed to add dependency on %s, ignoring: %s",
861 path, line, m, strerror(-r));
42a097a2
LP
862
863 free(m);
2c4104f0 864 }
c2b35af6 865 } else if (startswith_no_case(t, "Default-Start:")) {
8309400a
LP
866 char *k, *d;
867
868 state = LSB;
869
870 k = delete_chars(t+14, WHITESPACE "-");
871
872 if (k[0] != 0) {
873 if (!(d = strdup(k))) {
874 r = -ENOMEM;
875 goto finish;
876 }
877
878 free(s->sysv_runlevels);
879 s->sysv_runlevels = d;
880 }
2c4104f0 881
0b5d26f9
LP
882 } else if (startswith_no_case(t, "Description:")) {
883 char *d, *j;
ed4c1cc6 884
2c4104f0
LP
885 state = LSB_DESCRIPTION;
886
0b5d26f9
LP
887 if ((j = strstrip(t+12)) && *j) {
888 if (!(d = strdup(j))) {
889 r = -ENOMEM;
890 goto finish;
891 }
892 } else
893 d = NULL;
2c4104f0 894
0b5d26f9
LP
895 free(long_description);
896 long_description = d;
2c4104f0 897
ed4c1cc6 898 } else if (startswith_no_case(t, "Short-Description:")) {
0b5d26f9 899 char *d, *j;
2c4104f0 900
2c4104f0
LP
901 state = LSB;
902
0b5d26f9
LP
903 if ((j = strstrip(t+18)) && *j) {
904 if (!(d = strdup(j))) {
905 r = -ENOMEM;
906 goto finish;
907 }
908 } else
909 d = NULL;
2c4104f0 910
0b5d26f9
LP
911 free(short_description);
912 short_description = d;
2c4104f0
LP
913
914 } else if (state == LSB_DESCRIPTION) {
915
916 if (startswith(l, "#\t") || startswith(l, "# ")) {
0b5d26f9 917 char *j;
2c4104f0 918
0b5d26f9
LP
919 if ((j = strstrip(t)) && *j) {
920 char *d = NULL;
921
922 if (long_description)
b7def684 923 d = strjoin(long_description, " ", t, NULL);
0b5d26f9
LP
924 else
925 d = strdup(j);
926
927 if (!d) {
928 r = -ENOMEM;
929 goto finish;
930 }
931
932 free(long_description);
933 long_description = d;
2c4104f0
LP
934 }
935
2c4104f0
LP
936 } else
937 state = LSB;
938 }
939 }
940 }
941
37e2941d 942 if ((r = sysv_exec_commands(s, supports_reload)) < 0)
2c4104f0
LP
943 goto finish;
944
a40eb732 945 if (s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels)) {
0bc824be
LP
946 /* If there a runlevels configured for this service
947 * but none of the standard ones, then we assume this
948 * is some special kind of service (which might be
949 * needed for early boot) and don't create any links
950 * to it. */
951
1124fe6f 952 UNIT(s)->default_dependencies = false;
09cd1ab1 953
09cd1ab1 954 /* Don't timeout special services during boot (like fsck) */
d568a335
MS
955 s->timeout_start_usec = 0;
956 s->timeout_stop_usec = 0;
957 } else {
958 s->timeout_start_usec = DEFAULT_SYSV_TIMEOUT_USEC;
959 s->timeout_stop_usec = DEFAULT_SYSV_TIMEOUT_USEC;
960 }
961
80876c20 962 /* Special setting for all SysV services */
1f48cf56 963 s->type = SERVICE_FORKING;
f8788303 964 s->remain_after_exit = !s->pid_file;
1835f23c 965 s->guess_main_pid = false;
525ee6f4 966 s->restart = SERVICE_RESTART_NO;
353e12c2 967 s->exec_context.ignore_sigpipe = false;
4819ff03 968 s->kill_context.kill_mode = KILL_PROCESS;
80876c20 969
0b5d26f9
LP
970 /* We use the long description only if
971 * no short description is set. */
972
973 if (short_description)
974 description = short_description;
975 else if (chkconfig_description)
976 description = chkconfig_description;
977 else if (long_description)
978 description = long_description;
979 else
980 description = NULL;
981
982 if (description) {
983 char *d;
984
e527618d 985 if (!(d = strappend(s->sysv_has_lsb ? "LSB: " : "SYSV: ", description))) {
0b5d26f9
LP
986 r = -ENOMEM;
987 goto finish;
988 }
989
ac155bb8 990 u->description = d;
0b5d26f9
LP
991 }
992
1c07b16c
LP
993 /* Initialize the start priority from what has been set in the
994 * /etc/rcN.d/ hierarchies if we load the unit file as SysV
995 * init script. */
ea87ca5a
LP
996 if (s->sysv_start_priority_from_rcnd >= 0)
997 s->sysv_start_priority = s->sysv_start_priority_from_rcnd;
998
ac155bb8 999 u->load_state = UNIT_LOADED;
23a177ef 1000 r = 0;
2c4104f0
LP
1001
1002finish:
1003
1004 if (f)
1005 fclose(f);
1006
0b5d26f9
LP
1007 free(short_description);
1008 free(long_description);
1009 free(chkconfig_description);
1010
2c4104f0
LP
1011 return r;
1012}
1013
e537352b 1014static int service_load_sysv_name(Service *s, const char *name) {
2c4104f0
LP
1015 char **p;
1016
1017 assert(s);
1018 assert(name);
1019
c2756a68 1020 /* For SysV services we strip the *.sh suffixes. */
3f95f83c 1021 if (endswith(name, ".sh.service"))
d017c6ca
LP
1022 return -ENOENT;
1023
1124fe6f 1024 STRV_FOREACH(p, UNIT(s)->manager->lookup_paths.sysvinit_path) {
2c4104f0
LP
1025 char *path;
1026 int r;
1027
b7def684 1028 path = strjoin(*p, "/", name, NULL);
44d91056 1029 if (!path)
2c4104f0
LP
1030 return -ENOMEM;
1031
1032 assert(endswith(path, ".service"));
1033 path[strlen(path)-8] = 0;
1034
e537352b 1035 r = service_load_sysv_path(s, path);
fbe9f3a9 1036
1124fe6f 1037 if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) {
20771ae3 1038 /* Try *.sh source'able init scripts */
fbe9f3a9
LP
1039 strcat(path, ".sh");
1040 r = service_load_sysv_path(s, path);
1041 }
2c4104f0
LP
1042 free(path);
1043
23a177ef 1044 if (r < 0)
2c4104f0 1045 return r;
23a177ef 1046
88516c0c 1047 if (UNIT(s)->load_state != UNIT_STUB)
23a177ef 1048 break;
2c4104f0
LP
1049 }
1050
1051 return 0;
1052}
1053
e537352b 1054static int service_load_sysv(Service *s) {
2c4104f0
LP
1055 const char *t;
1056 Iterator i;
1057 int r;
1058
5cb5a6ff
LP
1059 assert(s);
1060
1061 /* Load service data from SysV init scripts, preferably with
1062 * LSB headers ... */
1063
1124fe6f 1064 if (strv_isempty(UNIT(s)->manager->lookup_paths.sysvinit_path))
2c4104f0
LP
1065 return 0;
1066
1124fe6f 1067 if ((t = UNIT(s)->id))
e537352b 1068 if ((r = service_load_sysv_name(s, t)) < 0)
2c4104f0
LP
1069 return r;
1070
1124fe6f
MS
1071 if (UNIT(s)->load_state == UNIT_STUB)
1072 SET_FOREACH(t, UNIT(s)->names, i) {
1073 if (t == UNIT(s)->id)
e537352b
LP
1074 continue;
1075
e364ad06 1076 if ((r = service_load_sysv_name(s, t)) < 0)
23a177ef
LP
1077 return r;
1078
1124fe6f 1079 if (UNIT(s)->load_state != UNIT_STUB)
23a177ef
LP
1080 break;
1081 }
2c4104f0
LP
1082
1083 return 0;
5cb5a6ff 1084}
07459bb6 1085#endif
5cb5a6ff 1086
243b1432
LP
1087static int service_verify(Service *s) {
1088 assert(s);
1089
1124fe6f 1090 if (UNIT(s)->load_state != UNIT_LOADED)
243b1432
LP
1091 return 0;
1092
1093 if (!s->exec_command[SERVICE_EXEC_START]) {
ebc2259d 1094 log_error_unit(UNIT(s)->id, "%s lacks ExecStart setting. Refusing.", UNIT(s)->id);
243b1432
LP
1095 return -EINVAL;
1096 }
1097
34e9ba66
LP
1098 if (s->type != SERVICE_ONESHOT &&
1099 s->exec_command[SERVICE_EXEC_START]->command_next) {
ebc2259d 1100 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
1101 return -EINVAL;
1102 }
1103
b0693d30 1104 if (s->type == SERVICE_ONESHOT && s->restart != SERVICE_RESTART_NO) {
ebc2259d 1105 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
1106 return -EINVAL;
1107 }
1108
05e343b7 1109 if (s->type == SERVICE_DBUS && !s->bus_name) {
ebc2259d 1110 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
1111 return -EINVAL;
1112 }
1113
7e2668c6 1114 if (s->bus_name && s->type != SERVICE_DBUS)
ebc2259d 1115 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 1116
ebc2259d
LP
1117 if (s->exec_context.pam_name && !(s->kill_context.kill_mode == KILL_CONTROL_GROUP || s->kill_context.kill_mode == KILL_MIXED)) {
1118 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
1119 return -EINVAL;
1120 }
1121
243b1432
LP
1122 return 0;
1123}
1124
a40eb732
LP
1125static int service_add_default_dependencies(Service *s) {
1126 int r;
1127
1128 assert(s);
1129
1130 /* Add a number of automatic dependencies useful for the
1131 * majority of services. */
1132
1133 /* First, pull in base system */
fccd44ec
KS
1134 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
1135 SPECIAL_BASIC_TARGET, NULL, true);
1136 if (r < 0)
1137 return r;
a40eb732
LP
1138
1139 /* Second, activate normal shutdown */
117dcc57
ZJS
1140 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS,
1141 SPECIAL_SHUTDOWN_TARGET, NULL, true);
1142 return r;
a40eb732
LP
1143}
1144
4dfc092a
LP
1145static void service_fix_output(Service *s) {
1146 assert(s);
1147
1148 /* If nothing has been explicitly configured, patch default
1149 * output in. If input is socket/tty we avoid this however,
1150 * since in that case we want output to default to the same
1151 * place as we read input from. */
1152
1153 if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
1154 s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1155 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 1156 s->exec_context.std_error = UNIT(s)->manager->default_std_error;
4dfc092a
LP
1157
1158 if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1159 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 1160 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
4dfc092a
LP
1161}
1162
e537352b
LP
1163static int service_load(Unit *u) {
1164 int r;
1165 Service *s = SERVICE(u);
1166
1167 assert(s);
1e2e8133 1168
5cb5a6ff 1169 /* Load a .service file */
c2756a68
LP
1170 r = unit_load_fragment(u);
1171 if (r < 0)
5cb5a6ff
LP
1172 return r;
1173
07459bb6 1174#ifdef HAVE_SYSV_COMPAT
bd77d0fc 1175 /* Load a classic init script as a fallback, if we couldn't find anything */
c2756a68
LP
1176 if (u->load_state == UNIT_STUB) {
1177 r = service_load_sysv(s);
1178 if (r < 0)
23a177ef 1179 return r;
c2756a68 1180 }
07459bb6 1181#endif
d46de8a1 1182
23a177ef 1183 /* Still nothing found? Then let's give up */
ac155bb8 1184 if (u->load_state == UNIT_STUB)
23a177ef 1185 return -ENOENT;
034c6ed7 1186
23a177ef 1187 /* This is a new unit? Then let's add in some extras */
ac155bb8 1188 if (u->load_state == UNIT_LOADED) {
c2756a68
LP
1189
1190 /* We were able to load something, then let's add in
1191 * the dropin directories. */
1192 r = unit_load_dropin(u);
1193 if (r < 0)
1194 return r;
1195
0b86feac
LP
1196 if (s->type == _SERVICE_TYPE_INVALID)
1197 s->type = s->bus_name ? SERVICE_DBUS : SERVICE_SIMPLE;
1198
d568a335
MS
1199 /* Oneshot services have disabled start timeout by default */
1200 if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
1201 s->timeout_start_usec = 0;
98709151 1202
4e2b0f9b
LP
1203 service_fix_output(s);
1204
598459ce
LP
1205 r = unit_patch_contexts(u);
1206 if (r < 0)
1207 return r;
1208
117dcc57
ZJS
1209 r = unit_add_exec_dependencies(u, &s->exec_context);
1210 if (r < 0)
23a177ef
LP
1211 return r;
1212
598459ce 1213 r = unit_add_default_slice(u, &s->cgroup_context);
a016b922
LP
1214 if (r < 0)
1215 return r;
1216
07459bb6 1217#ifdef HAVE_SYSV_COMPAT
117dcc57
ZJS
1218 r = sysv_fix_order(s);
1219 if (r < 0)
23a177ef 1220 return r;
07459bb6 1221#endif
05e343b7 1222
c952c6ec
LP
1223 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
1224 s->notify_access = NOTIFY_MAIN;
a40eb732 1225
02c4ef9c
LP
1226 if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
1227 s->notify_access = NOTIFY_MAIN;
1228
598459ce
LP
1229 if (s->bus_name) {
1230 r = unit_watch_bus_name(u, s->bus_name);
117dcc57 1231 if (r < 0)
a40eb732 1232 return r;
117dcc57 1233 }
e06c73cc 1234
598459ce
LP
1235 if (u->default_dependencies) {
1236 r = service_add_default_dependencies(s);
1237 if (r < 0)
1238 return r;
1239 }
8e274523
LP
1240 }
1241
243b1432 1242 return service_verify(s);
034c6ed7
LP
1243}
1244
87f0e418 1245static void service_dump(Unit *u, FILE *f, const char *prefix) {
5cb5a6ff 1246
5cb5a6ff 1247 ServiceExecCommand c;
87f0e418 1248 Service *s = SERVICE(u);
47be870b 1249 const char *prefix2;
7fd1b19b 1250 _cleanup_free_ char *p2 = NULL;
5cb5a6ff
LP
1251
1252 assert(s);
1253
47be870b
LP
1254 p2 = strappend(prefix, "\t");
1255 prefix2 = p2 ? p2 : prefix;
44d8db9e 1256
5cb5a6ff 1257 fprintf(f,
81a2b7ce 1258 "%sService State: %s\n"
f42806df
LP
1259 "%sResult: %s\n"
1260 "%sReload Result: %s\n"
81a2b7ce 1261 "%sPermissionsStartOnly: %s\n"
8e274523 1262 "%sRootDirectoryStartOnly: %s\n"
02ee865a 1263 "%sRemainAfterExit: %s\n"
3185a36b 1264 "%sGuessMainPID: %s\n"
c952c6ec 1265 "%sType: %s\n"
2cf3143a 1266 "%sRestart: %s\n"
c952c6ec 1267 "%sNotifyAccess: %s\n",
81a2b7ce 1268 prefix, service_state_to_string(s->state),
f42806df
LP
1269 prefix, service_result_to_string(s->result),
1270 prefix, service_result_to_string(s->reload_result),
81a2b7ce 1271 prefix, yes_no(s->permissions_start_only),
8e274523 1272 prefix, yes_no(s->root_directory_start_only),
02ee865a 1273 prefix, yes_no(s->remain_after_exit),
3185a36b 1274 prefix, yes_no(s->guess_main_pid),
c952c6ec 1275 prefix, service_type_to_string(s->type),
2cf3143a 1276 prefix, service_restart_to_string(s->restart),
c952c6ec 1277 prefix, notify_access_to_string(s->notify_access));
5cb5a6ff 1278
70123e68
LP
1279 if (s->control_pid > 0)
1280 fprintf(f,
ccd06097
ZJS
1281 "%sControl PID: "PID_FMT"\n",
1282 prefix, s->control_pid);
70123e68
LP
1283
1284 if (s->main_pid > 0)
1285 fprintf(f,
ccd06097 1286 "%sMain PID: "PID_FMT"\n"
6dfa5494
LP
1287 "%sMain PID Known: %s\n"
1288 "%sMain PID Alien: %s\n",
ccd06097 1289 prefix, s->main_pid,
6dfa5494
LP
1290 prefix, yes_no(s->main_pid_known),
1291 prefix, yes_no(s->main_pid_alien));
70123e68 1292
034c6ed7
LP
1293 if (s->pid_file)
1294 fprintf(f,
1295 "%sPIDFile: %s\n",
1296 prefix, s->pid_file);
1297
05e343b7
LP
1298 if (s->bus_name)
1299 fprintf(f,
1300 "%sBusName: %s\n"
1301 "%sBus Name Good: %s\n",
1302 prefix, s->bus_name,
1303 prefix, yes_no(s->bus_name_good));
1304
4819ff03 1305 kill_context_dump(&s->kill_context, f, prefix);
5cb5a6ff
LP
1306 exec_context_dump(&s->exec_context, f, prefix);
1307
e537352b 1308 for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
5cb5a6ff 1309
44d8db9e
LP
1310 if (!s->exec_command[c])
1311 continue;
1312
40d50879 1313 fprintf(f, "%s-> %s:\n",
94f04347 1314 prefix, service_exec_command_to_string(c));
44d8db9e
LP
1315
1316 exec_command_dump_list(s->exec_command[c], f, prefix2);
5cb5a6ff 1317 }
44d8db9e 1318
07459bb6 1319#ifdef HAVE_SYSV_COMPAT
1b64d026 1320 if (s->is_sysv)
2c4104f0 1321 fprintf(f,
9fff8a1f
LP
1322 "%sSysV Init Script has LSB Header: %s\n"
1323 "%sSysVEnabled: %s\n",
9fff8a1f
LP
1324 prefix, yes_no(s->sysv_has_lsb),
1325 prefix, yes_no(s->sysv_enabled));
2c4104f0
LP
1326
1327 if (s->sysv_start_priority >= 0)
1328 fprintf(f,
9fff8a1f
LP
1329 "%sSysVStartPriority: %i\n",
1330 prefix, s->sysv_start_priority);
2c4104f0 1331
8309400a
LP
1332 if (s->sysv_runlevels)
1333 fprintf(f, "%sSysVRunLevels: %s\n",
1334 prefix, s->sysv_runlevels);
07459bb6 1335#endif
23a177ef 1336
8c47c732
LP
1337 if (s->status_text)
1338 fprintf(f, "%sStatus Text: %s\n",
1339 prefix, s->status_text);
5cb5a6ff
LP
1340}
1341
c5419d42 1342static int service_load_pid_file(Service *s, bool may_warn) {
7fd1b19b 1343 _cleanup_free_ char *k = NULL;
034c6ed7 1344 int r;
5925dd3c 1345 pid_t pid;
034c6ed7
LP
1346
1347 assert(s);
1348
034c6ed7 1349 if (!s->pid_file)
13230d5d 1350 return -ENOENT;
034c6ed7 1351
117dcc57
ZJS
1352 r = read_one_line_file(s->pid_file, &k);
1353 if (r < 0) {
c5419d42 1354 if (may_warn)
66870f90
ZJS
1355 log_info_unit(UNIT(s)->id,
1356 "PID file %s not readable (yet?) after %s.",
1357 s->pid_file, service_state_to_string(s->state));
034c6ed7 1358 return r;
5375410b 1359 }
034c6ed7 1360
5925dd3c 1361 r = parse_pid(k, &pid);
bc41f93e
ZJS
1362 if (r < 0) {
1363 if (may_warn)
1364 log_info_unit(UNIT(s)->id,
1365 "Failed to read PID from file %s: %s",
1366 s->pid_file, strerror(-r));
5925dd3c 1367 return r;
bc41f93e 1368 }
406eaf93 1369
9f5650ae 1370 if (!pid_is_alive(pid)) {
c5419d42 1371 if (may_warn)
9f5650ae 1372 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 1373
e10c9985
YS
1374 return -ESRCH;
1375 }
1376
db01f8b3
MS
1377 if (s->main_pid_known) {
1378 if (pid == s->main_pid)
1379 return 0;
1380
66870f90 1381 log_debug_unit(UNIT(s)->id,
ccd06097
ZJS
1382 "Main PID changing: "PID_FMT" -> "PID_FMT,
1383 s->main_pid, pid);
db01f8b3
MS
1384 service_unwatch_main_pid(s);
1385 s->main_pid_known = false;
3a111838 1386 } else
66870f90 1387 log_debug_unit(UNIT(s)->id,
ccd06097 1388 "Main PID loaded: "PID_FMT, pid);
db01f8b3 1389
117dcc57
ZJS
1390 r = service_set_main_pid(s, pid);
1391 if (r < 0)
16f6025e
LP
1392 return r;
1393
117dcc57 1394 r = unit_watch_pid(UNIT(s), pid);
bc41f93e 1395 if (r < 0) {
5925dd3c 1396 /* FIXME: we need to do something here */
bc41f93e 1397 log_warning_unit(UNIT(s)->id,
ccd06097
ZJS
1398 "Failed to watch PID "PID_FMT" from service %s",
1399 pid, UNIT(s)->id);
5925dd3c 1400 return r;
bc41f93e 1401 }
034c6ed7
LP
1402
1403 return 0;
1404}
1405
4fbf50b3
LP
1406static int service_search_main_pid(Service *s) {
1407 pid_t pid;
1408 int r;
1409
1410 assert(s);
1411
3185a36b
LP
1412 /* If we know it anyway, don't ever fallback to unreliable
1413 * heuristics */
4fbf50b3
LP
1414 if (s->main_pid_known)
1415 return 0;
1416
3185a36b
LP
1417 if (!s->guess_main_pid)
1418 return 0;
1419
4fbf50b3
LP
1420 assert(s->main_pid <= 0);
1421
4ad49000 1422 pid = unit_search_main_pid(UNIT(s));
117dcc57 1423 if (pid <= 0)
4fbf50b3
LP
1424 return -ENOENT;
1425
66870f90 1426 log_debug_unit(UNIT(s)->id,
ccd06097 1427 "Main PID guessed: "PID_FMT, pid);
117dcc57
ZJS
1428 r = service_set_main_pid(s, pid);
1429 if (r < 0)
4fbf50b3
LP
1430 return r;
1431
117dcc57
ZJS
1432 r = unit_watch_pid(UNIT(s), pid);
1433 if (r < 0)
4fbf50b3 1434 /* FIXME: we need to do something here */
a827e373 1435 log_warning_unit(UNIT(s)->id,
ccd06097
ZJS
1436 "Failed to watch PID "PID_FMT" from service %s",
1437 pid, UNIT(s)->id);
bdd13f6b 1438 return r;
4fbf50b3
LP
1439}
1440
034c6ed7
LP
1441static void service_set_state(Service *s, ServiceState state) {
1442 ServiceState old_state;
e056b01d 1443 const UnitActiveState *table;
842129f5 1444
5cb5a6ff
LP
1445 assert(s);
1446
e056b01d
LP
1447 table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1448
034c6ed7 1449 old_state = s->state;
5cb5a6ff 1450 s->state = state;
034c6ed7 1451
3a111838
MS
1452 service_unwatch_pid_file(s);
1453
842129f5
LP
1454 if (!IN_SET(state,
1455 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1456 SERVICE_RELOAD,
bf108e55
LP
1457 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1458 SERVICE_STOP_POST,
842129f5
LP
1459 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
1460 SERVICE_AUTO_RESTART))
718db961 1461 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 1462
842129f5
LP
1463 if (!IN_SET(state,
1464 SERVICE_START, SERVICE_START_POST,
1465 SERVICE_RUNNING, SERVICE_RELOAD,
bf108e55
LP
1466 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1467 SERVICE_STOP_POST,
1468 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1469 service_unwatch_main_pid(s);
867b3b7d
LP
1470 s->main_command = NULL;
1471 }
034c6ed7 1472
842129f5
LP
1473 if (!IN_SET(state,
1474 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1475 SERVICE_RELOAD,
bf108e55
LP
1476 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1477 SERVICE_STOP_POST,
842129f5 1478 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1479 service_unwatch_control_pid(s);
034c6ed7 1480 s->control_command = NULL;
a16e1123 1481 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
e537352b 1482 }
034c6ed7 1483
a911bb9a
LP
1484 if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1485 unit_unwatch_all_pids(UNIT(s));
1486
842129f5
LP
1487 if (!IN_SET(state,
1488 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1489 SERVICE_RUNNING, SERVICE_RELOAD,
1490 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1491 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
1124fe6f 1492 !(state == SERVICE_DEAD && UNIT(s)->job)) {
4f2d528d 1493 service_close_socket_fd(s);
6cf6bbc2
LP
1494 service_connection_unref(s);
1495 }
4f2d528d 1496
7596e9e1 1497 if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
a6927d7f
MO
1498 service_stop_watchdog(s);
1499
f6023656
LP
1500 /* For the inactive states unit_notify() will trim the cgroup,
1501 * but for exit we have to do that ourselves... */
1124fe6f 1502 if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
4ad49000 1503 unit_destroy_cgroup(UNIT(s));
f6023656 1504
9cd86184
OB
1505 /* For remain_after_exit services, let's see if we can "release" the
1506 * hold on the console, since unit_notify() only does that in case of
1507 * change of state */
1508 if (state == SERVICE_EXITED && s->remain_after_exit &&
1509 UNIT(s)->manager->n_on_console > 0) {
1510 ExecContext *ec = unit_get_exec_context(UNIT(s));
1511 if (ec && exec_context_may_touch_console(ec)) {
1512 Manager *m = UNIT(s)->manager;
1513
1514 m->n_on_console --;
1515 if (m->n_on_console == 0)
1516 /* unset no_console_output flag, since the console is free */
1517 m->no_console_output = false;
1518 }
1519 }
1520
e537352b 1521 if (old_state != state)
842129f5 1522 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 1523
e056b01d 1524 unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
f42806df 1525 s->reload_result = SERVICE_SUCCESS;
034c6ed7
LP
1526}
1527
a16e1123
LP
1528static int service_coldplug(Unit *u) {
1529 Service *s = SERVICE(u);
1530 int r;
1531
1532 assert(s);
1533 assert(s->state == SERVICE_DEAD);
1534
1535 if (s->deserialized_state != s->state) {
1536
bf108e55
LP
1537 if (IN_SET(s->deserialized_state,
1538 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1539 SERVICE_RELOAD,
1540 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1541 SERVICE_STOP_POST,
1542 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
92c1622e
LP
1543
1544 usec_t k;
6c12b52e 1545
bf108e55 1546 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 1547
92c1622e
LP
1548 /* For the start/stop timeouts 0 means off */
1549 if (k > 0) {
1550 r = service_arm_timer(s, k);
36697dc0 1551 if (r < 0)
e558336f
LP
1552 return r;
1553 }
1554 }
a16e1123 1555
92c1622e
LP
1556 if (s->deserialized_state == SERVICE_AUTO_RESTART) {
1557
1558 /* The restart timeouts 0 means immediately */
1559 r = service_arm_timer(s, s->restart_usec);
1560 if (r < 0)
1561 return r;
1562 }
1563
9f5650ae 1564 if (pid_is_unwaited(s->main_pid) &&
bf108e55
LP
1565 ((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
1566 IN_SET(s->deserialized_state,
1567 SERVICE_START, SERVICE_START_POST,
1568 SERVICE_RUNNING, SERVICE_RELOAD,
1569 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1570 SERVICE_STOP_POST,
1571 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
1572 r = unit_watch_pid(UNIT(s), s->main_pid);
1573 if (r < 0)
1574 return r;
1575 }
a16e1123 1576
9f5650ae 1577 if (pid_is_unwaited(s->control_pid) &&
bf108e55
LP
1578 IN_SET(s->deserialized_state,
1579 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1580 SERVICE_RELOAD,
1581 SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1582 SERVICE_STOP_POST,
1583 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1584 r = unit_watch_pid(UNIT(s), s->control_pid);
1585 if (r < 0)
1586 return r;
1587 }
a16e1123 1588
a911bb9a
LP
1589 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1590 unit_watch_all_pids(UNIT(s));
1591
842129f5
LP
1592 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1593 service_start_watchdog(s);
bb242b7b 1594
a16e1123
LP
1595 service_set_state(s, s->deserialized_state);
1596 }
92c1622e 1597
a16e1123
LP
1598 return 0;
1599}
1600
44d8db9e
LP
1601static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1602 Iterator i;
1603 int r;
1604 int *rfds = NULL;
1605 unsigned rn_fds = 0;
57020a3a 1606 Unit *u;
44d8db9e
LP
1607
1608 assert(s);
1609 assert(fds);
1610 assert(n_fds);
1611
6cf6bbc2
LP
1612 if (s->socket_fd >= 0)
1613 return 0;
1614
1124fe6f 1615 SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
44d8db9e
LP
1616 int *cfds;
1617 unsigned cn_fds;
57020a3a
LP
1618 Socket *sock;
1619
ac155bb8 1620 if (u->type != UNIT_SOCKET)
57020a3a
LP
1621 continue;
1622
1623 sock = SOCKET(u);
44d8db9e 1624
117dcc57
ZJS
1625 r = socket_collect_fds(sock, &cfds, &cn_fds);
1626 if (r < 0)
44d8db9e
LP
1627 goto fail;
1628
1629 if (!cfds)
1630 continue;
1631
1632 if (!rfds) {
1633 rfds = cfds;
1634 rn_fds = cn_fds;
1635 } else {
1636 int *t;
1637
117dcc57
ZJS
1638 t = new(int, rn_fds+cn_fds);
1639 if (!t) {
44d8db9e
LP
1640 free(cfds);
1641 r = -ENOMEM;
1642 goto fail;
1643 }
1644
9c1b183c
LP
1645 memcpy(t, rfds, rn_fds * sizeof(int));
1646 memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
44d8db9e
LP
1647 free(rfds);
1648 free(cfds);
1649
1650 rfds = t;
1651 rn_fds = rn_fds+cn_fds;
1652 }
1653 }
1654
1655 *fds = rfds;
1656 *n_fds = rn_fds;
3e33402a 1657
44d8db9e
LP
1658 return 0;
1659
1660fail:
1661 free(rfds);
3e33402a 1662
44d8db9e
LP
1663 return r;
1664}
1665
81a2b7ce
LP
1666static int service_spawn(
1667 Service *s,
1668 ExecCommand *c,
1669 bool timeout,
1670 bool pass_fds,
1671 bool apply_permissions,
1672 bool apply_chroot,
1e3ad081 1673 bool apply_tty_stdin,
c952c6ec 1674 bool set_notify_socket,
ecedd90f 1675 bool is_control,
81a2b7ce
LP
1676 pid_t *_pid) {
1677
034c6ed7
LP
1678 pid_t pid;
1679 int r;
117dcc57 1680 int *fds = NULL;
7fd1b19b 1681 _cleanup_free_ int *fdsbuf = NULL;
2105e76a 1682 unsigned n_fds = 0, n_env = 0;
7fd1b19b 1683 _cleanup_strv_free_ char
117dcc57 1684 **argv = NULL, **final_env = NULL, **our_env = NULL;
4ad49000 1685 const char *path;
034c6ed7
LP
1686
1687 assert(s);
1688 assert(c);
1689 assert(_pid);
1690
4ad49000
LP
1691 unit_realize_cgroup(UNIT(s));
1692
613b411c
LP
1693 r = unit_setup_exec_runtime(UNIT(s));
1694 if (r < 0)
1695 goto fail;
1696
6cf6bbc2
LP
1697 if (pass_fds ||
1698 s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1699 s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1700 s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1701
4f2d528d
LP
1702 if (s->socket_fd >= 0) {
1703 fds = &s->socket_fd;
1704 n_fds = 1;
6cf6bbc2 1705 } else {
117dcc57
ZJS
1706 r = service_collect_fds(s, &fdsbuf, &n_fds);
1707 if (r < 0)
6cf6bbc2
LP
1708 goto fail;
1709
1710 fds = fdsbuf;
1711 }
4f2d528d 1712 }
44d8db9e 1713
92c1622e
LP
1714 if (timeout && s->timeout_start_usec > 0) {
1715 r = service_arm_timer(s, s->timeout_start_usec);
1716 if (r < 0)
1717 goto fail;
1718 } else
1719 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 1720
19f6d710
LP
1721 r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
1722 if (r < 0)
9e2f7c11 1723 goto fail;
9e2f7c11 1724
09812eb7 1725 our_env = new0(char*, 4);
97ae63e2 1726 if (!our_env) {
2105e76a
LP
1727 r = -ENOMEM;
1728 goto fail;
1729 }
c952c6ec 1730
2105e76a 1731 if (set_notify_socket)
1124fe6f 1732 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
c952c6ec
LP
1733 r = -ENOMEM;
1734 goto fail;
1735 }
1736
2105e76a 1737 if (s->main_pid > 0)
ccd06097 1738 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
c952c6ec
LP
1739 r = -ENOMEM;
1740 goto fail;
1741 }
2105e76a 1742
4ad49000 1743 if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
ccd06097 1744 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
97ae63e2
LP
1745 r = -ENOMEM;
1746 goto fail;
1747 }
1748
1749 final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
1750 if (!final_env) {
2105e76a
LP
1751 r = -ENOMEM;
1752 goto fail;
1753 }
c952c6ec 1754
4ad49000
LP
1755 if (is_control && UNIT(s)->cgroup_path) {
1756 path = strappenda(UNIT(s)->cgroup_path, "/control");
1757 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
1758 } else
1759 path = UNIT(s)->cgroup_path;
1760
9e2f7c11
LP
1761 r = exec_spawn(c,
1762 argv,
1763 &s->exec_context,
1764 fds, n_fds,
2105e76a 1765 final_env,
9e2f7c11
LP
1766 apply_permissions,
1767 apply_chroot,
1e3ad081 1768 apply_tty_stdin,
1124fe6f 1769 UNIT(s)->manager->confirm_spawn,
13b84ec7 1770 UNIT(s)->manager->cgroup_supported,
4ad49000 1771 path,
e66cf1a3 1772 manager_get_runtime_prefix(UNIT(s)->manager),
62bca2c6 1773 UNIT(s)->id,
09812eb7 1774 s->watchdog_usec,
f2b68789 1775 s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
613b411c 1776 s->exec_runtime,
9e2f7c11 1777 &pid);
9e2f7c11 1778 if (r < 0)
034c6ed7
LP
1779 goto fail;
1780
117dcc57
ZJS
1781 r = unit_watch_pid(UNIT(s), pid);
1782 if (r < 0)
034c6ed7
LP
1783 /* FIXME: we need to do something here */
1784 goto fail;
1785
1786 *_pid = pid;
1787
5cb5a6ff 1788 return 0;
034c6ed7
LP
1789
1790fail:
1791 if (timeout)
718db961 1792 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7
LP
1793
1794 return r;
1795}
1796
80876c20
LP
1797static int main_pid_good(Service *s) {
1798 assert(s);
1799
1800 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1801 * don't know */
1802
1803 /* If we know the pid file, then lets just check if it is
1804 * still valid */
6dfa5494
LP
1805 if (s->main_pid_known) {
1806
1807 /* If it's an alien child let's check if it is still
1808 * alive ... */
62220cf7 1809 if (s->main_pid_alien && s->main_pid > 0)
9f5650ae 1810 return pid_is_alive(s->main_pid);
6dfa5494
LP
1811
1812 /* .. otherwise assume we'll get a SIGCHLD for it,
1813 * which we really should wait for to collect exit
1814 * status and code */
80876c20 1815 return s->main_pid > 0;
6dfa5494 1816 }
80876c20
LP
1817
1818 /* We don't know the pid */
1819 return -EAGAIN;
1820}
1821
44a6b1b6 1822_pure_ static int control_pid_good(Service *s) {
80876c20
LP
1823 assert(s);
1824
1825 return s->control_pid > 0;
1826}
1827
1828static int cgroup_good(Service *s) {
1829 int r;
1830
1831 assert(s);
1832
4ad49000
LP
1833 if (!UNIT(s)->cgroup_path)
1834 return 0;
1835
1836 r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
117dcc57 1837 if (r < 0)
80876c20
LP
1838 return r;
1839
1840 return !r;
1841}
1842
f42806df 1843static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
034c6ed7
LP
1844 int r;
1845 assert(s);
1846
f42806df
LP
1847 if (f != SERVICE_SUCCESS)
1848 s->result = f;
034c6ed7 1849
0c7f15b3
MS
1850 service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1851
034c6ed7 1852 if (allow_restart &&
47342320 1853 !s->forbid_restart &&
034c6ed7 1854 (s->restart == SERVICE_RESTART_ALWAYS ||
f42806df
LP
1855 (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1856 (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
dc99a976 1857 (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
f42806df 1858 (s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
96342de6
LN
1859 s->result == SERVICE_FAILURE_CORE_DUMP))) &&
1860 (s->result != SERVICE_FAILURE_EXIT_CODE ||
1861 !set_contains(s->restart_ignore_status.code, INT_TO_PTR(s->main_exec_status.status))) &&
1862 (s->result != SERVICE_FAILURE_SIGNAL ||
718db961 1863 !set_contains(s->restart_ignore_status.signal, INT_TO_PTR(s->main_exec_status.status)))) {
034c6ed7 1864
718db961 1865 r = service_arm_timer(s, s->restart_usec);
f42806df 1866 if (r < 0)
034c6ed7
LP
1867 goto fail;
1868
1869 service_set_state(s, SERVICE_AUTO_RESTART);
0c7f15b3 1870 }
034c6ed7 1871
47342320
LP
1872 s->forbid_restart = false;
1873
e66cf1a3 1874 /* We want fresh tmpdirs in case service is started again immediately */
613b411c
LP
1875 exec_runtime_destroy(s->exec_runtime);
1876 s->exec_runtime = exec_runtime_unref(s->exec_runtime);
c17ec25e 1877
e66cf1a3
LP
1878 /* Also, remove the runtime directory in */
1879 exec_context_destroy_runtime_directory(&s->exec_context, manager_get_runtime_prefix(UNIT(s)->manager));
1880
9285c9ff
LN
1881 /* Try to delete the pid file. At this point it will be
1882 * out-of-date, and some software might be confused by it, so
1883 * let's remove it. */
1884 if (s->pid_file)
1885 unlink_noerrno(s->pid_file);
1886
034c6ed7
LP
1887 return;
1888
1889fail:
66870f90
ZJS
1890 log_warning_unit(UNIT(s)->id,
1891 "%s failed to run install restart timer: %s",
1892 UNIT(s)->id, strerror(-r));
f42806df 1893 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1894}
1895
f42806df 1896static void service_enter_stop_post(Service *s, ServiceResult f) {
034c6ed7
LP
1897 int r;
1898 assert(s);
1899
f42806df
LP
1900 if (f != SERVICE_SUCCESS)
1901 s->result = f;
034c6ed7 1902
5e94833f 1903 service_unwatch_control_pid(s);
a911bb9a 1904 unit_watch_all_pids(UNIT(s));
5e94833f 1905
117dcc57
ZJS
1906 s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1907 if (s->control_command) {
867b3b7d
LP
1908 s->control_command_id = SERVICE_EXEC_STOP_POST;
1909
ecedd90f
LP
1910 r = service_spawn(s,
1911 s->control_command,
1912 true,
1913 false,
1914 !s->permissions_start_only,
1915 !s->root_directory_start_only,
1916 true,
1917 false,
1918 true,
1919 &s->control_pid);
1920 if (r < 0)
034c6ed7
LP
1921 goto fail;
1922
80876c20
LP
1923 service_set_state(s, SERVICE_STOP_POST);
1924 } else
ac84d1fb 1925 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1926
1927 return;
1928
1929fail:
66870f90
ZJS
1930 log_warning_unit(UNIT(s)->id,
1931 "%s failed to run 'stop-post' task: %s",
1932 UNIT(s)->id, strerror(-r));
f42806df 1933 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1934}
1935
f42806df 1936static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
034c6ed7 1937 int r;
034c6ed7
LP
1938
1939 assert(s);
1940
f42806df
LP
1941 if (f != SERVICE_SUCCESS)
1942 s->result = f;
034c6ed7 1943
a911bb9a
LP
1944 unit_watch_all_pids(UNIT(s));
1945
cd2086fe
LP
1946 r = unit_kill_context(
1947 UNIT(s),
1948 &s->kill_context,
1949 state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
1950 s->main_pid,
1951 s->control_pid,
1952 s->main_pid_alien);
ac84d1fb 1953
cd2086fe
LP
1954 if (r < 0)
1955 goto fail;
034c6ed7 1956
cd2086fe 1957 if (r > 0) {
d568a335 1958 if (s->timeout_stop_usec > 0) {
718db961 1959 r = service_arm_timer(s, s->timeout_stop_usec);
d568a335 1960 if (r < 0)
e558336f 1961 goto fail;
d568a335 1962 }
d6ea93e3 1963
80876c20 1964 service_set_state(s, state);
ac84d1fb
LP
1965 } else if (state == SERVICE_STOP_SIGTERM)
1966 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1967 else if (state == SERVICE_STOP_SIGKILL)
f42806df 1968 service_enter_stop_post(s, SERVICE_SUCCESS);
ac84d1fb
LP
1969 else if (state == SERVICE_FINAL_SIGTERM)
1970 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
80876c20 1971 else
f42806df 1972 service_enter_dead(s, SERVICE_SUCCESS, true);
034c6ed7
LP
1973
1974 return;
1975
1976fail:
66870f90
ZJS
1977 log_warning_unit(UNIT(s)->id,
1978 "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
034c6ed7 1979
80876c20 1980 if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
f42806df 1981 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
034c6ed7 1982 else
f42806df 1983 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1984}
1985
f42806df 1986static void service_enter_stop(Service *s, ServiceResult f) {
034c6ed7 1987 int r;
5925dd3c 1988
034c6ed7
LP
1989 assert(s);
1990
f42806df
LP
1991 if (f != SERVICE_SUCCESS)
1992 s->result = f;
034c6ed7 1993
5e94833f 1994 service_unwatch_control_pid(s);
a911bb9a 1995 unit_watch_all_pids(UNIT(s));
5e94833f 1996
117dcc57
ZJS
1997 s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1998 if (s->control_command) {
867b3b7d
LP
1999 s->control_command_id = SERVICE_EXEC_STOP;
2000
ecedd90f
LP
2001 r = service_spawn(s,
2002 s->control_command,
2003 true,
2004 false,
2005 !s->permissions_start_only,
2006 !s->root_directory_start_only,
2007 false,
2008 false,
2009 true,
2010 &s->control_pid);
2011 if (r < 0)
034c6ed7
LP
2012 goto fail;
2013
80876c20
LP
2014 service_set_state(s, SERVICE_STOP);
2015 } else
f42806df 2016 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
2017
2018 return;
2019
2020fail:
66870f90
ZJS
2021 log_warning_unit(UNIT(s)->id,
2022 "%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2023 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2024}
2025
f42806df 2026static void service_enter_running(Service *s, ServiceResult f) {
4eab639f 2027 int main_pid_ok, cgroup_ok;
80876c20
LP
2028 assert(s);
2029
f42806df
LP
2030 if (f != SERVICE_SUCCESS)
2031 s->result = f;
80876c20 2032
4eab639f
LP
2033 main_pid_ok = main_pid_good(s);
2034 cgroup_ok = cgroup_good(s);
2035
2036 if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
05e343b7 2037 (s->bus_name_good || s->type != SERVICE_DBUS))
80876c20 2038 service_set_state(s, SERVICE_RUNNING);
02ee865a 2039 else if (s->remain_after_exit)
80876c20
LP
2040 service_set_state(s, SERVICE_EXITED);
2041 else
f42806df 2042 service_enter_stop(s, SERVICE_SUCCESS);
80876c20
LP
2043}
2044
034c6ed7
LP
2045static void service_enter_start_post(Service *s) {
2046 int r;
2047 assert(s);
2048
5e94833f 2049 service_unwatch_control_pid(s);
842129f5 2050 service_reset_watchdog(s);
bb242b7b 2051
117dcc57
ZJS
2052 s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
2053 if (s->control_command) {
867b3b7d
LP
2054 s->control_command_id = SERVICE_EXEC_START_POST;
2055
ecedd90f
LP
2056 r = service_spawn(s,
2057 s->control_command,
2058 true,
2059 false,
2060 !s->permissions_start_only,
2061 !s->root_directory_start_only,
2062 false,
2063 false,
2064 true,
2065 &s->control_pid);
2066 if (r < 0)
034c6ed7
LP
2067 goto fail;
2068
80876c20
LP
2069 service_set_state(s, SERVICE_START_POST);
2070 } else
f42806df 2071 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2072
2073 return;
2074
2075fail:
66870f90
ZJS
2076 log_warning_unit(UNIT(s)->id,
2077 "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2078 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2079}
2080
4ad49000
LP
2081static void service_kill_control_processes(Service *s) {
2082 char *p;
2083
2084 if (!UNIT(s)->cgroup_path)
2085 return;
2086
2087 p = strappenda(UNIT(s)->cgroup_path, "/control");
4ad49000
LP
2088 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
2089}
2090
034c6ed7 2091static void service_enter_start(Service *s) {
4ad49000 2092 ExecCommand *c;
034c6ed7
LP
2093 pid_t pid;
2094 int r;
2095
2096 assert(s);
2097
2098 assert(s->exec_command[SERVICE_EXEC_START]);
34e9ba66 2099 assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
034c6ed7 2100
41efeaec
LP
2101 service_unwatch_control_pid(s);
2102 service_unwatch_main_pid(s);
80876c20 2103
8f53a7b8
LP
2104 /* We want to ensure that nobody leaks processes from
2105 * START_PRE here, so let's go on a killing spree, People
2106 * should not spawn long running processes from START_PRE. */
4ad49000 2107 service_kill_control_processes(s);
8f53a7b8 2108
867b3b7d
LP
2109 if (s->type == SERVICE_FORKING) {
2110 s->control_command_id = SERVICE_EXEC_START;
2111 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
2112
2113 s->main_command = NULL;
2114 } else {
2115 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2116 s->control_command = NULL;
2117
2118 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
2119 }
34e9ba66 2120
ecedd90f
LP
2121 r = service_spawn(s,
2122 c,
117dcc57
ZJS
2123 s->type == SERVICE_FORKING || s->type == SERVICE_DBUS ||
2124 s->type == SERVICE_NOTIFY || s->type == SERVICE_ONESHOT,
ecedd90f
LP
2125 true,
2126 true,
2127 true,
2128 true,
2129 s->notify_access != NOTIFY_NONE,
2130 false,
2131 &pid);
2132 if (r < 0)
034c6ed7
LP
2133 goto fail;
2134
f2b68789 2135 if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
034c6ed7
LP
2136 /* For simple services we immediately start
2137 * the START_POST binaries. */
2138
5925dd3c 2139 service_set_main_pid(s, pid);
034c6ed7
LP
2140 service_enter_start_post(s);
2141
2142 } else if (s->type == SERVICE_FORKING) {
2143
2144 /* For forking services we wait until the start
2145 * process exited. */
2146
e55224ca 2147 s->control_pid = pid;
80876c20
LP
2148 service_set_state(s, SERVICE_START);
2149
34e9ba66 2150 } else if (s->type == SERVICE_ONESHOT ||
8c47c732
LP
2151 s->type == SERVICE_DBUS ||
2152 s->type == SERVICE_NOTIFY) {
7d55e835 2153
34e9ba66 2154 /* For oneshot services we wait until the start
7d55e835
LP
2155 * process exited, too, but it is our main process. */
2156
05e343b7 2157 /* For D-Bus services we know the main pid right away,
8c47c732
LP
2158 * but wait for the bus name to appear on the
2159 * bus. Notify services are similar. */
05e343b7 2160
5925dd3c 2161 service_set_main_pid(s, pid);
80876c20 2162 service_set_state(s, SERVICE_START);
034c6ed7
LP
2163 } else
2164 assert_not_reached("Unknown service type");
2165
2166 return;
2167
2168fail:
66870f90
ZJS
2169 log_warning_unit(UNIT(s)->id,
2170 "%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2171 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2172}
2173
2174static void service_enter_start_pre(Service *s) {
2175 int r;
2176
2177 assert(s);
2178
5e94833f
LP
2179 service_unwatch_control_pid(s);
2180
117dcc57
ZJS
2181 s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
2182 if (s->control_command) {
8f53a7b8
LP
2183 /* Before we start anything, let's clear up what might
2184 * be left from previous runs. */
4ad49000 2185 service_kill_control_processes(s);
8f53a7b8 2186
867b3b7d
LP
2187 s->control_command_id = SERVICE_EXEC_START_PRE;
2188
ecedd90f
LP
2189 r = service_spawn(s,
2190 s->control_command,
2191 true,
2192 false,
2193 !s->permissions_start_only,
2194 !s->root_directory_start_only,
2195 true,
2196 false,
2197 true,
2198 &s->control_pid);
2199 if (r < 0)
034c6ed7
LP
2200 goto fail;
2201
80876c20
LP
2202 service_set_state(s, SERVICE_START_PRE);
2203 } else
034c6ed7
LP
2204 service_enter_start(s);
2205
2206 return;
2207
2208fail:
66870f90
ZJS
2209 log_warning_unit(UNIT(s)->id,
2210 "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
f42806df 2211 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
2212}
2213
2214static void service_enter_restart(Service *s) {
718db961 2215 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
034c6ed7 2216 int r;
398ef8ba 2217
034c6ed7
LP
2218 assert(s);
2219
a8bb2e65
LP
2220 if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
2221 /* Don't restart things if we are going down anyway */
66870f90
ZJS
2222 log_info_unit(UNIT(s)->id,
2223 "Stop job pending for unit, delaying automatic restart.");
2edfa366 2224
718db961 2225 r = service_arm_timer(s, s->restart_usec);
a8bb2e65 2226 if (r < 0)
2edfa366 2227 goto fail;
feae8adb
DW
2228
2229 return;
2edfa366
LP
2230 }
2231
48bb5876
DW
2232 /* Any units that are bound to this service must also be
2233 * restarted. We use JOB_RESTART (instead of the more obvious
2234 * JOB_START) here so that those dependency jobs will be added
2235 * as well. */
2236 r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
2237 if (r < 0)
034c6ed7
LP
2238 goto fail;
2239
a8bb2e65
LP
2240 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
2241 * it will be canceled as part of the service_stop() call that
2242 * is executed as part of JOB_RESTART. */
2243
66870f90
ZJS
2244 log_debug_unit(UNIT(s)->id,
2245 "%s scheduled restart job.", UNIT(s)->id);
034c6ed7
LP
2246 return;
2247
2248fail:
66870f90
ZJS
2249 log_warning_unit(UNIT(s)->id,
2250 "%s failed to schedule restart job: %s",
718db961 2251 UNIT(s)->id, bus_error_message(&error, -r));
f42806df 2252 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
2253}
2254
2255static void service_enter_reload(Service *s) {
2256 int r;
2257
2258 assert(s);
2259
5e94833f
LP
2260 service_unwatch_control_pid(s);
2261
117dcc57
ZJS
2262 s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2263 if (s->control_command) {
867b3b7d
LP
2264 s->control_command_id = SERVICE_EXEC_RELOAD;
2265
ecedd90f
LP
2266 r = service_spawn(s,
2267 s->control_command,
2268 true,
2269 false,
2270 !s->permissions_start_only,
2271 !s->root_directory_start_only,
2272 false,
2273 false,
2274 true,
2275 &s->control_pid);
2276 if (r < 0)
034c6ed7
LP
2277 goto fail;
2278
80876c20
LP
2279 service_set_state(s, SERVICE_RELOAD);
2280 } else
f42806df 2281 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2282
2283 return;
2284
2285fail:
66870f90
ZJS
2286 log_warning_unit(UNIT(s)->id,
2287 "%s failed to run 'reload' task: %s",
2288 UNIT(s)->id, strerror(-r));
f42806df
LP
2289 s->reload_result = SERVICE_FAILURE_RESOURCES;
2290 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2291}
2292
f42806df 2293static void service_run_next_control(Service *s) {
034c6ed7
LP
2294 int r;
2295
2296 assert(s);
2297 assert(s->control_command);
2298 assert(s->control_command->command_next);
2299
34e9ba66 2300 assert(s->control_command_id != SERVICE_EXEC_START);
034c6ed7 2301
34e9ba66 2302 s->control_command = s->control_command->command_next;
5e94833f
LP
2303 service_unwatch_control_pid(s);
2304
ecedd90f
LP
2305 r = service_spawn(s,
2306 s->control_command,
2307 true,
2308 false,
2309 !s->permissions_start_only,
2310 !s->root_directory_start_only,
2311 s->control_command_id == SERVICE_EXEC_START_PRE ||
2312 s->control_command_id == SERVICE_EXEC_STOP_POST,
2313 false,
2314 true,
2315 &s->control_pid);
2316 if (r < 0)
034c6ed7
LP
2317 goto fail;
2318
2319 return;
2320
2321fail:
66870f90
ZJS
2322 log_warning_unit(UNIT(s)->id,
2323 "%s failed to run next control task: %s",
2324 UNIT(s)->id, strerror(-r));
034c6ed7 2325
80876c20 2326 if (s->state == SERVICE_START_PRE)
f42806df 2327 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
80876c20 2328 else if (s->state == SERVICE_STOP)
f42806df 2329 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7 2330 else if (s->state == SERVICE_STOP_POST)
f42806df 2331 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
e2f3b44c 2332 else if (s->state == SERVICE_RELOAD) {
f42806df
LP
2333 s->reload_result = SERVICE_FAILURE_RESOURCES;
2334 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c 2335 } else
f42806df 2336 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
5cb5a6ff
LP
2337}
2338
f42806df 2339static void service_run_next_main(Service *s) {
34e9ba66
LP
2340 pid_t pid;
2341 int r;
2342
2343 assert(s);
867b3b7d
LP
2344 assert(s->main_command);
2345 assert(s->main_command->command_next);
2346 assert(s->type == SERVICE_ONESHOT);
34e9ba66 2347
867b3b7d 2348 s->main_command = s->main_command->command_next;
34e9ba66
LP
2349 service_unwatch_main_pid(s);
2350
ecedd90f
LP
2351 r = service_spawn(s,
2352 s->main_command,
98709151 2353 true,
ecedd90f
LP
2354 true,
2355 true,
2356 true,
2357 true,
2358 s->notify_access != NOTIFY_NONE,
2359 false,
2360 &pid);
2361 if (r < 0)
34e9ba66
LP
2362 goto fail;
2363
2364 service_set_main_pid(s, pid);
2365
2366 return;
2367
2368fail:
66870f90
ZJS
2369 log_warning_unit(UNIT(s)->id,
2370 "%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
f42806df 2371 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
34e9ba66
LP
2372}
2373
4b939747
MO
2374static int service_start_limit_test(Service *s) {
2375 assert(s);
2376
2377 if (ratelimit_test(&s->start_limit))
2378 return 0;
2379
efe6e7d3
MO
2380 if (s->start_limit_action == SERVICE_START_LIMIT_REBOOT ||
2381 s->start_limit_action == SERVICE_START_LIMIT_REBOOT_FORCE)
2382 update_reboot_param_file(s->reboot_arg);
2383
4b939747
MO
2384 switch (s->start_limit_action) {
2385
2386 case SERVICE_START_LIMIT_NONE:
66870f90
ZJS
2387 log_warning_unit(UNIT(s)->id,
2388 "%s start request repeated too quickly, refusing to start.",
2389 UNIT(s)->id);
4b939747
MO
2390 break;
2391
2392 case SERVICE_START_LIMIT_REBOOT: {
718db961 2393 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
4b939747
MO
2394 int r;
2395
66870f90
ZJS
2396 log_warning_unit(UNIT(s)->id,
2397 "%s start request repeated too quickly, rebooting.", UNIT(s)->id);
4b939747 2398
117dcc57
ZJS
2399 r = manager_add_job_by_name(UNIT(s)->manager, JOB_START,
2400 SPECIAL_REBOOT_TARGET, JOB_REPLACE,
2401 true, &error, NULL);
718db961 2402 if (r < 0)
66870f90 2403 log_error_unit(UNIT(s)->id,
718db961 2404 "Failed to reboot: %s.", bus_error_message(&error, r));
4b939747
MO
2405
2406 break;
2407 }
2408
2409 case SERVICE_START_LIMIT_REBOOT_FORCE:
66870f90
ZJS
2410 log_warning_unit(UNIT(s)->id,
2411 "%s start request repeated too quickly, forcibly rebooting.", UNIT(s)->id);
4b939747
MO
2412 UNIT(s)->manager->exit_code = MANAGER_REBOOT;
2413 break;
2414
2415 case SERVICE_START_LIMIT_REBOOT_IMMEDIATE:
66870f90
ZJS
2416 log_warning_unit(UNIT(s)->id,
2417 "%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id);
0049f05a 2418 sync();
efe6e7d3
MO
2419 if (s->reboot_arg) {
2420 log_info("Rebooting with argument '%s'.", s->reboot_arg);
2421 syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
2422 LINUX_REBOOT_CMD_RESTART2, s->reboot_arg);
2423 }
2424
2425 log_info("Rebooting.");
4b939747
MO
2426 reboot(RB_AUTOBOOT);
2427 break;
2428
2429 default:
66870f90
ZJS
2430 log_error_unit(UNIT(s)->id,
2431 "start limit action=%i", s->start_limit_action);
4b939747
MO
2432 assert_not_reached("Unknown StartLimitAction.");
2433 }
2434
2435 return -ECANCELED;
2436}
2437
87f0e418
LP
2438static int service_start(Unit *u) {
2439 Service *s = SERVICE(u);
4b939747 2440 int r;
5cb5a6ff
LP
2441
2442 assert(s);
2443
034c6ed7
LP
2444 /* We cannot fulfill this request right now, try again later
2445 * please! */
2446 if (s->state == SERVICE_STOP ||
2447 s->state == SERVICE_STOP_SIGTERM ||
2448 s->state == SERVICE_STOP_SIGKILL ||
2449 s->state == SERVICE_STOP_POST ||
2450 s->state == SERVICE_FINAL_SIGTERM ||
2451 s->state == SERVICE_FINAL_SIGKILL)
5cb5a6ff
LP
2452 return -EAGAIN;
2453
034c6ed7
LP
2454 /* Already on it! */
2455 if (s->state == SERVICE_START_PRE ||
2456 s->state == SERVICE_START ||
2457 s->state == SERVICE_START_POST)
2458 return 0;
2459
2e9d6c12 2460 /* A service that will be restarted must be stopped first to
7f2cddae 2461 * trigger BindsTo and/or OnFailure dependencies. If a user
2e9d6c12 2462 * does not want to wait for the holdoff time to elapse, the
d4943dc7
LP
2463 * service should be manually restarted, not started. We
2464 * simply return EAGAIN here, so that any start jobs stay
2465 * queued, and assume that the auto restart timer will
2466 * eventually trigger the restart. */
2467 if (s->state == SERVICE_AUTO_RESTART)
a8bb2e65 2468 return -EAGAIN;
2e9d6c12
DW
2469
2470 assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
5cb5a6ff 2471
1e2e8133 2472 /* Make sure we don't enter a busy loop of some kind. */
4b939747 2473 r = service_start_limit_test(s);
c2f34808 2474 if (r < 0) {
8d1b002a 2475 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
4b939747 2476 return r;
c2f34808 2477 }
1e2e8133 2478
f42806df
LP
2479 s->result = SERVICE_SUCCESS;
2480 s->reload_result = SERVICE_SUCCESS;
034c6ed7 2481 s->main_pid_known = false;
6dfa5494 2482 s->main_pid_alien = false;
47342320 2483 s->forbid_restart = false;
034c6ed7
LP
2484
2485 service_enter_start_pre(s);
2486 return 0;
5cb5a6ff
LP
2487}
2488
87f0e418
LP
2489static int service_stop(Unit *u) {
2490 Service *s = SERVICE(u);
5cb5a6ff
LP
2491
2492 assert(s);
2493
f0c7b229 2494 /* Don't create restart jobs from here. */
47342320 2495 s->forbid_restart = true;
034c6ed7 2496
e537352b
LP
2497 /* Already on it */
2498 if (s->state == SERVICE_STOP ||
2499 s->state == SERVICE_STOP_SIGTERM ||
2500 s->state == SERVICE_STOP_SIGKILL ||
2501 s->state == SERVICE_STOP_POST ||
2502 s->state == SERVICE_FINAL_SIGTERM ||
2503 s->state == SERVICE_FINAL_SIGKILL)
2504 return 0;
2505
f0c7b229 2506 /* A restart will be scheduled or is in progress. */
034c6ed7 2507 if (s->state == SERVICE_AUTO_RESTART) {
0c7f15b3 2508 service_set_state(s, SERVICE_DEAD);
034c6ed7
LP
2509 return 0;
2510 }
2511
3f6c78dc
LP
2512 /* If there's already something running we go directly into
2513 * kill mode. */
2514 if (s->state == SERVICE_START_PRE ||
2515 s->state == SERVICE_START ||
2516 s->state == SERVICE_START_POST ||
2517 s->state == SERVICE_RELOAD) {
f42806df 2518 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
3f6c78dc
LP
2519 return 0;
2520 }
5cb5a6ff 2521
3f6c78dc
LP
2522 assert(s->state == SERVICE_RUNNING ||
2523 s->state == SERVICE_EXITED);
3a762661 2524
f42806df 2525 service_enter_stop(s, SERVICE_SUCCESS);
5cb5a6ff
LP
2526 return 0;
2527}
2528
87f0e418
LP
2529static int service_reload(Unit *u) {
2530 Service *s = SERVICE(u);
034c6ed7
LP
2531
2532 assert(s);
2533
80876c20 2534 assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
034c6ed7
LP
2535
2536 service_enter_reload(s);
5cb5a6ff
LP
2537 return 0;
2538}
2539
44a6b1b6 2540_pure_ static bool service_can_reload(Unit *u) {
87f0e418 2541 Service *s = SERVICE(u);
034c6ed7
LP
2542
2543 assert(s);
2544
2545 return !!s->exec_command[SERVICE_EXEC_RELOAD];
2546}
2547
a16e1123
LP
2548static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2549 Service *s = SERVICE(u);
2550
2551 assert(u);
2552 assert(f);
2553 assert(fds);
2554
2555 unit_serialize_item(u, f, "state", service_state_to_string(s->state));
f42806df
LP
2556 unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2557 unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
a16e1123
LP
2558
2559 if (s->control_pid > 0)
ccd06097
ZJS
2560 unit_serialize_item_format(u, f, "control-pid", PID_FMT,
2561 s->control_pid);
a16e1123 2562
5925dd3c 2563 if (s->main_pid_known && s->main_pid > 0)
ccd06097 2564 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
a16e1123
LP
2565
2566 unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
2567
3a2776bc
LP
2568 if (s->status_text)
2569 unit_serialize_item(u, f, "status-text", s->status_text);
2570
cfc4eb4c
LP
2571 /* FIXME: There's a minor uncleanliness here: if there are
2572 * multiple commands attached here, we will start from the
2573 * first one again */
a16e1123 2574 if (s->control_command_id >= 0)
117dcc57
ZJS
2575 unit_serialize_item(u, f, "control-command",
2576 service_exec_command_to_string(s->control_command_id));
a16e1123
LP
2577
2578 if (s->socket_fd >= 0) {
2579 int copy;
2580
2581 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
2582 return copy;
2583
2584 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2585 }
2586
ecdbca40 2587 if (s->main_exec_status.pid > 0) {
ccd06097
ZJS
2588 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT,
2589 s->main_exec_status.pid);
117dcc57
ZJS
2590 dual_timestamp_serialize(f, "main-exec-status-start",
2591 &s->main_exec_status.start_timestamp);
2592 dual_timestamp_serialize(f, "main-exec-status-exit",
2593 &s->main_exec_status.exit_timestamp);
ecdbca40 2594
799fd0fd 2595 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
117dcc57
ZJS
2596 unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
2597 s->main_exec_status.code);
2598 unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
2599 s->main_exec_status.status);
ecdbca40
LP
2600 }
2601 }
a6927d7f 2602 if (dual_timestamp_is_set(&s->watchdog_timestamp))
842129f5 2603 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
ecdbca40 2604
6aca9a58 2605 if (s->forbid_restart)
8d1a2802 2606 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
6aca9a58 2607
a16e1123
LP
2608 return 0;
2609}
2610
2611static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2612 Service *s = SERVICE(u);
a16e1123
LP
2613
2614 assert(u);
2615 assert(key);
2616 assert(value);
2617 assert(fds);
2618
2619 if (streq(key, "state")) {
2620 ServiceState state;
2621
117dcc57
ZJS
2622 state = service_state_from_string(value);
2623 if (state < 0)
66870f90 2624 log_debug_unit(u->id, "Failed to parse state value %s", value);
a16e1123
LP
2625 else
2626 s->deserialized_state = state;
f42806df
LP
2627 } else if (streq(key, "result")) {
2628 ServiceResult f;
2629
2630 f = service_result_from_string(value);
2631 if (f < 0)
66870f90 2632 log_debug_unit(u->id, "Failed to parse result value %s", value);
f42806df
LP
2633 else if (f != SERVICE_SUCCESS)
2634 s->result = f;
2635
2636 } else if (streq(key, "reload-result")) {
2637 ServiceResult f;
2638
2639 f = service_result_from_string(value);
2640 if (f < 0)
66870f90 2641 log_debug_unit(u->id, "Failed to parse reload result value %s", value);
f42806df
LP
2642 else if (f != SERVICE_SUCCESS)
2643 s->reload_result = f;
a16e1123 2644
a16e1123 2645 } else if (streq(key, "control-pid")) {
5925dd3c 2646 pid_t pid;
a16e1123 2647
e364ad06 2648 if (parse_pid(value, &pid) < 0)
66870f90 2649 log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
a16e1123 2650 else
e55224ca 2651 s->control_pid = pid;
a16e1123 2652 } else if (streq(key, "main-pid")) {
5925dd3c 2653 pid_t pid;
a16e1123 2654
e364ad06 2655 if (parse_pid(value, &pid) < 0)
66870f90 2656 log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
7400b9d2
LP
2657 else {
2658 service_set_main_pid(s, pid);
2659 unit_watch_pid(UNIT(s), pid);
2660 }
a16e1123
LP
2661 } else if (streq(key, "main-pid-known")) {
2662 int b;
2663
117dcc57
ZJS
2664 b = parse_boolean(value);
2665 if (b < 0)
66870f90 2666 log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
a16e1123
LP
2667 else
2668 s->main_pid_known = b;
3a2776bc
LP
2669 } else if (streq(key, "status-text")) {
2670 char *t;
2671
117dcc57
ZJS
2672 t = strdup(value);
2673 if (!t)
2674 log_oom();
2675 else {
3a2776bc
LP
2676 free(s->status_text);
2677 s->status_text = t;
2678 }
2679
a16e1123
LP
2680 } else if (streq(key, "control-command")) {
2681 ServiceExecCommand id;
2682
117dcc57
ZJS
2683 id = service_exec_command_from_string(value);
2684 if (id < 0)
66870f90 2685 log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
a16e1123
LP
2686 else {
2687 s->control_command_id = id;
2688 s->control_command = s->exec_command[id];
2689 }
2690 } else if (streq(key, "socket-fd")) {
2691 int fd;
2692
2693 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
66870f90 2694 log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
a16e1123
LP
2695 else {
2696
03e334a1 2697 safe_close(s->socket_fd);
a16e1123
LP
2698 s->socket_fd = fdset_remove(fds, fd);
2699 }
ecdbca40
LP
2700 } else if (streq(key, "main-exec-status-pid")) {
2701 pid_t pid;
2702
e364ad06 2703 if (parse_pid(value, &pid) < 0)
66870f90 2704 log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
ecdbca40
LP
2705 else
2706 s->main_exec_status.pid = pid;
2707 } else if (streq(key, "main-exec-status-code")) {
2708 int i;
2709
e364ad06 2710 if (safe_atoi(value, &i) < 0)
66870f90 2711 log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
ecdbca40
LP
2712 else
2713 s->main_exec_status.code = i;
2714 } else if (streq(key, "main-exec-status-status")) {
2715 int i;
2716
e364ad06 2717 if (safe_atoi(value, &i) < 0)
66870f90 2718 log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
ecdbca40
LP
2719 else
2720 s->main_exec_status.status = i;
799fd0fd
LP
2721 } else if (streq(key, "main-exec-status-start"))
2722 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2723 else if (streq(key, "main-exec-status-exit"))
2724 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
a6927d7f
MO
2725 else if (streq(key, "watchdog-timestamp"))
2726 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
613b411c 2727 else if (streq(key, "forbid-restart")) {
6aca9a58
SE
2728 int b;
2729
2730 b = parse_boolean(value);
2731 if (b < 0)
8d1a2802 2732 log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
6aca9a58
SE
2733 else
2734 s->forbid_restart = b;
c17ec25e 2735 } else
66870f90 2736 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
a16e1123
LP
2737
2738 return 0;
2739}
2740
44a6b1b6 2741_pure_ static UnitActiveState service_active_state(Unit *u) {
e056b01d
LP
2742 const UnitActiveState *table;
2743
87f0e418 2744 assert(u);
5cb5a6ff 2745
e056b01d
LP
2746 table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2747
2748 return table[SERVICE(u)->state];
034c6ed7
LP
2749}
2750
10a94420
LP
2751static const char *service_sub_state_to_string(Unit *u) {
2752 assert(u);
2753
2754 return service_state_to_string(SERVICE(u)->state);
2755}
2756
701cc384
LP
2757static bool service_check_gc(Unit *u) {
2758 Service *s = SERVICE(u);
2759
2760 assert(s);
2761
6d55002a
LP
2762 /* Never clean up services that still have a process around,
2763 * even if the service is formally dead. */
2764 if (cgroup_good(s) > 0 ||
2765 main_pid_good(s) > 0 ||
2766 control_pid_good(s) > 0)
2767 return true;
2768
2769#ifdef HAVE_SYSV_COMPAT
1b64d026 2770 if (s->is_sysv)
6d55002a 2771 return true;
07459bb6 2772#endif
701cc384 2773
6d55002a
LP
2774 return false;
2775}
2776
44a6b1b6 2777_pure_ static bool service_check_snapshot(Unit *u) {
701cc384
LP
2778 Service *s = SERVICE(u);
2779
2780 assert(s);
2781
99f37ad8 2782 return (s->socket_fd < 0);
701cc384
LP
2783}
2784
3a111838
MS
2785static int service_retry_pid_file(Service *s) {
2786 int r;
2787
2788 assert(s->pid_file);
2789 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2790
2791 r = service_load_pid_file(s, false);
2792 if (r < 0)
2793 return r;
2794
2795 service_unwatch_pid_file(s);
2796
f42806df 2797 service_enter_running(s, SERVICE_SUCCESS);
3a111838
MS
2798 return 0;
2799}
2800
2801static int service_watch_pid_file(Service *s) {
2802 int r;
2803
66870f90
ZJS
2804 log_debug_unit(UNIT(s)->id,
2805 "Setting watch for %s's PID file %s",
2806 UNIT(s)->id, s->pid_file_pathspec->path);
718db961 2807 r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
3a111838
MS
2808 if (r < 0)
2809 goto fail;
2810
2811 /* the pidfile might have appeared just before we set the watch */
bc41f93e
ZJS
2812 log_debug_unit(UNIT(s)->id,
2813 "Trying to read %s's PID file %s in case it changed",
2814 UNIT(s)->id, s->pid_file_pathspec->path);
3a111838
MS
2815 service_retry_pid_file(s);
2816
2817 return 0;
2818fail:
66870f90
ZJS
2819 log_error_unit(UNIT(s)->id,
2820 "Failed to set a watch for %s's PID file %s: %s",
2821 UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
3a111838
MS
2822 service_unwatch_pid_file(s);
2823 return r;
2824}
2825
2826static int service_demand_pid_file(Service *s) {
2827 PathSpec *ps;
2828
2829 assert(s->pid_file);
2830 assert(!s->pid_file_pathspec);
2831
2832 ps = new0(PathSpec, 1);
2833 if (!ps)
2834 return -ENOMEM;
2835
718db961 2836 ps->unit = UNIT(s);
3a111838
MS
2837 ps->path = strdup(s->pid_file);
2838 if (!ps->path) {
2839 free(ps);
2840 return -ENOMEM;
2841 }
2842
2843 path_kill_slashes(ps->path);
2844
2845 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2846 * keep their PID file open all the time. */
2847 ps->type = PATH_MODIFIED;
2848 ps->inotify_fd = -1;
2849
2850 s->pid_file_pathspec = ps;
2851
2852 return service_watch_pid_file(s);
2853}
2854
718db961 2855static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
e14c2802
LP
2856 PathSpec *p = userdata;
2857 Service *s;
2858
2859 assert(p);
2860
2861 s = SERVICE(p->unit);
3a111838
MS
2862
2863 assert(s);
2864 assert(fd >= 0);
2865 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2866 assert(s->pid_file_pathspec);
57020a3a 2867 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
3a111838 2868
718db961 2869 log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
3a111838 2870
e14c2802 2871 if (path_spec_fd_event(p, events) < 0)
3a111838
MS
2872 goto fail;
2873
2874 if (service_retry_pid_file(s) == 0)
718db961 2875 return 0;
3a111838
MS
2876
2877 if (service_watch_pid_file(s) < 0)
2878 goto fail;
2879
718db961
LP
2880 return 0;
2881
3a111838
MS
2882fail:
2883 service_unwatch_pid_file(s);
f42806df 2884 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
718db961 2885 return 0;
3a111838
MS
2886}
2887
a911bb9a
LP
2888static void service_notify_cgroup_empty_event(Unit *u) {
2889 Service *s = SERVICE(u);
2890
2891 assert(u);
2892
2893 log_debug_unit(u->id, "%s: cgroup is empty", u->id);
2894
2895 switch (s->state) {
2896
2897 /* Waiting for SIGCHLD is usually more interesting,
2898 * because it includes return codes/signals. Which is
2899 * why we ignore the cgroup events for most cases,
2900 * except when we don't know pid which to expect the
2901 * SIGCHLD for. */
2902
2903 case SERVICE_START:
2904 case SERVICE_START_POST:
2905 /* If we were hoping for the daemon to write its PID file,
2906 * we can give up now. */
2907 if (s->pid_file_pathspec) {
2908 log_warning_unit(u->id,
2909 "%s never wrote its PID file. Failing.", UNIT(s)->id);
2910 service_unwatch_pid_file(s);
2911 if (s->state == SERVICE_START)
2912 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2913 else
2914 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2915 }
2916 break;
2917
2918 case SERVICE_RUNNING:
2919 /* service_enter_running() will figure out what to do */
2920 service_enter_running(s, SERVICE_SUCCESS);
2921 break;
2922
2923 case SERVICE_STOP_SIGTERM:
2924 case SERVICE_STOP_SIGKILL:
2925
2926 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2927 service_enter_stop_post(s, SERVICE_SUCCESS);
2928
2929 break;
2930
2931 case SERVICE_STOP_POST:
2932 case SERVICE_FINAL_SIGTERM:
2933 case SERVICE_FINAL_SIGKILL:
2934 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2935 service_enter_dead(s, SERVICE_SUCCESS, true);
2936
2937 break;
2938
2939 default:
2940 ;
2941 }
2942}
2943
87f0e418
LP
2944static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2945 Service *s = SERVICE(u);
f42806df 2946 ServiceResult f;
5cb5a6ff
LP
2947
2948 assert(s);
034c6ed7
LP
2949 assert(pid >= 0);
2950
96342de6
LN
2951 if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2952 is_clean_exit_lsb(code, status, &s->success_status))
f42806df
LP
2953 f = SERVICE_SUCCESS;
2954 else if (code == CLD_EXITED)
2955 f = SERVICE_FAILURE_EXIT_CODE;
2956 else if (code == CLD_KILLED)
2957 f = SERVICE_FAILURE_SIGNAL;
2958 else if (code == CLD_DUMPED)
2959 f = SERVICE_FAILURE_CORE_DUMP;
d06dacd0 2960 else
cfc4eb4c 2961 assert_not_reached("Unknown code");
034c6ed7
LP
2962
2963 if (s->main_pid == pid) {
db01f8b3
MS
2964 /* Forking services may occasionally move to a new PID.
2965 * As long as they update the PID file before exiting the old
2966 * PID, they're fine. */
5375410b 2967 if (service_load_pid_file(s, false) == 0)
db01f8b3 2968 return;
034c6ed7 2969
034c6ed7 2970 s->main_pid = 0;
6ea832a2 2971 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
034c6ed7 2972
867b3b7d 2973 if (s->main_command) {
fbeefb45
LP
2974 /* If this is not a forking service than the
2975 * main process got started and hence we copy
2976 * the exit status so that it is recorded both
2977 * as main and as control process exit
2978 * status */
2979
867b3b7d 2980 s->main_command->exec_status = s->main_exec_status;
b708e7ce 2981
867b3b7d 2982 if (s->main_command->ignore)
f42806df 2983 f = SERVICE_SUCCESS;
fbeefb45
LP
2984 } else if (s->exec_command[SERVICE_EXEC_START]) {
2985
2986 /* If this is a forked process, then we should
2987 * ignore the return value if this was
2988 * configured for the starter process */
2989
2990 if (s->exec_command[SERVICE_EXEC_START]->ignore)
2991 f = SERVICE_SUCCESS;
034c6ed7
LP
2992 }
2993
bbc9006e
MT
2994 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2995 u->id,
23635a85
ZJS
2996 "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
2997 u->id, sigchld_code_to_string(code), status,
2998 strna(code == CLD_EXITED
2999 ? exit_status_to_string(status, EXIT_STATUS_FULL)
3000 : signal_to_string(status)),
23635a85
ZJS
3001 "EXIT_CODE=%s", sigchld_code_to_string(code),
3002 "EXIT_STATUS=%i", status,
3003 NULL);
f42806df
LP
3004
3005 if (f != SERVICE_SUCCESS)
3006 s->result = f;
034c6ed7 3007
867b3b7d
LP
3008 if (s->main_command &&
3009 s->main_command->command_next &&
f42806df 3010 f == SERVICE_SUCCESS) {
034c6ed7 3011
34e9ba66
LP
3012 /* There is another command to *
3013 * execute, so let's do that. */
034c6ed7 3014
66870f90
ZJS
3015 log_debug_unit(u->id,
3016 "%s running next main command for state %s",
3017 u->id, service_state_to_string(s->state));
f42806df 3018 service_run_next_main(s);
034c6ed7 3019
34e9ba66
LP
3020 } else {
3021
3022 /* The service exited, so the service is officially
3023 * gone. */
867b3b7d 3024 s->main_command = NULL;
34e9ba66
LP
3025
3026 switch (s->state) {
3027
3028 case SERVICE_START_POST:
3029 case SERVICE_RELOAD:
3030 case SERVICE_STOP:
3031 /* Need to wait until the operation is
3032 * done */
c4653a4d 3033 break;
7d55e835 3034
34e9ba66
LP
3035 case SERVICE_START:
3036 if (s->type == SERVICE_ONESHOT) {
3037 /* This was our main goal, so let's go on */
f42806df 3038 if (f == SERVICE_SUCCESS)
34e9ba66
LP
3039 service_enter_start_post(s);
3040 else
f42806df 3041 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
34e9ba66 3042 break;
34e9ba66 3043 }
034c6ed7 3044
bfba3256
LP
3045 /* Fall through */
3046
34e9ba66 3047 case SERVICE_RUNNING:
f42806df 3048 service_enter_running(s, f);
34e9ba66 3049 break;
034c6ed7 3050
34e9ba66
LP
3051 case SERVICE_STOP_SIGTERM:
3052 case SERVICE_STOP_SIGKILL:
5cb5a6ff 3053
34e9ba66 3054 if (!control_pid_good(s))
f42806df 3055 service_enter_stop_post(s, f);
5cb5a6ff 3056
34e9ba66
LP
3057 /* If there is still a control process, wait for that first */
3058 break;
3059
bf108e55
LP
3060 case SERVICE_STOP_POST:
3061 case SERVICE_FINAL_SIGTERM:
3062 case SERVICE_FINAL_SIGKILL:
3063
3064 if (!control_pid_good(s))
3065 service_enter_dead(s, f, true);
3066 break;
3067
34e9ba66
LP
3068 default:
3069 assert_not_reached("Uh, main process died at wrong time.");
3070 }
034c6ed7 3071 }
5cb5a6ff 3072
034c6ed7 3073 } else if (s->control_pid == pid) {
34e9ba66
LP
3074 s->control_pid = 0;
3075
b708e7ce 3076 if (s->control_command) {
117dcc57
ZJS
3077 exec_status_exit(&s->control_command->exec_status,
3078 &s->exec_context, pid, code, status);
a16e1123 3079
b708e7ce 3080 if (s->control_command->ignore)
f42806df 3081 f = SERVICE_SUCCESS;
b708e7ce
LP
3082 }
3083
66870f90
ZJS
3084 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
3085 "%s: control process exited, code=%s status=%i",
3086 u->id, sigchld_code_to_string(code), status);
f42806df
LP
3087
3088 if (f != SERVICE_SUCCESS)
3089 s->result = f;
034c6ed7 3090
88f3e0c9
LP
3091 /* Immediately get rid of the cgroup, so that the
3092 * kernel doesn't delay the cgroup empty messages for
3093 * the service cgroup any longer than necessary */
4ad49000 3094 service_kill_control_processes(s);
88f3e0c9 3095
34e9ba66
LP
3096 if (s->control_command &&
3097 s->control_command->command_next &&
f42806df 3098 f == SERVICE_SUCCESS) {
034c6ed7
LP
3099
3100 /* There is another command to *
3101 * execute, so let's do that. */
3102
66870f90
ZJS
3103 log_debug_unit(u->id,
3104 "%s running next control command for state %s",
3105 u->id, service_state_to_string(s->state));
f42806df 3106 service_run_next_control(s);
034c6ed7 3107
80876c20 3108 } else {
034c6ed7
LP
3109 /* No further commands for this step, so let's
3110 * figure out what to do next */
3111
a16e1123
LP
3112 s->control_command = NULL;
3113 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3114
66870f90
ZJS
3115 log_debug_unit(u->id,
3116 "%s got final SIGCHLD for state %s",
3117 u->id, service_state_to_string(s->state));
bd982a8b 3118
034c6ed7
LP
3119 switch (s->state) {
3120
3121 case SERVICE_START_PRE:
f42806df 3122 if (f == SERVICE_SUCCESS)
034c6ed7
LP
3123 service_enter_start(s);
3124 else
f42806df 3125 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
034c6ed7
LP
3126 break;
3127
3128 case SERVICE_START:
bfba3256
LP
3129 if (s->type != SERVICE_FORKING)
3130 /* Maybe spurious event due to a reload that changed the type? */
3131 break;
034c6ed7 3132
f42806df
LP
3133 if (f != SERVICE_SUCCESS) {
3134 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3a111838
MS
3135 break;
3136 }
034c6ed7 3137
3a111838 3138 if (s->pid_file) {
f42806df
LP
3139 bool has_start_post;
3140 int r;
3141
3a111838
MS
3142 /* Let's try to load the pid file here if we can.
3143 * The PID file might actually be created by a START_POST
3144 * script. In that case don't worry if the loading fails. */
f42806df
LP
3145
3146 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3147 r = service_load_pid_file(s, !has_start_post);
3a111838
MS
3148 if (!has_start_post && r < 0) {
3149 r = service_demand_pid_file(s);
3150 if (r < 0 || !cgroup_good(s))
f42806df 3151 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3a111838
MS
3152 break;
3153 }
034c6ed7 3154 } else
3a111838 3155 service_search_main_pid(s);
034c6ed7 3156
3a111838 3157 service_enter_start_post(s);
034c6ed7
LP
3158 break;
3159
3160 case SERVICE_START_POST:
f42806df
LP
3161 if (f != SERVICE_SUCCESS) {
3162 service_enter_stop(s, f);
2096e009 3163 break;
034c6ed7
LP
3164 }
3165
2096e009 3166 if (s->pid_file) {
f42806df
LP
3167 int r;
3168
3169 r = service_load_pid_file(s, true);
2096e009
MS
3170 if (r < 0) {
3171 r = service_demand_pid_file(s);
3172 if (r < 0 || !cgroup_good(s))
f42806df 3173 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2096e009
MS
3174 break;
3175 }
3176 } else
3177 service_search_main_pid(s);
3178
f42806df 3179 service_enter_running(s, SERVICE_SUCCESS);
3185a36b 3180 break;
034c6ed7
LP
3181
3182 case SERVICE_RELOAD:
f42806df 3183 if (f == SERVICE_SUCCESS) {
5375410b 3184 service_load_pid_file(s, true);
3185a36b
LP
3185 service_search_main_pid(s);
3186 }
3187
f42806df
LP
3188 s->reload_result = f;
3189 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
3190 break;
3191
3192 case SERVICE_STOP:
f42806df 3193 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
3194 break;
3195
3196 case SERVICE_STOP_SIGTERM:
3197 case SERVICE_STOP_SIGKILL:
3198 if (main_pid_good(s) <= 0)
f42806df 3199 service_enter_stop_post(s, f);
034c6ed7
LP
3200
3201 /* If there is still a service
3202 * process around, wait until
3203 * that one quit, too */
3204 break;
3205
3206 case SERVICE_STOP_POST:
3207 case SERVICE_FINAL_SIGTERM:
3208 case SERVICE_FINAL_SIGKILL:
bf108e55
LP
3209 if (main_pid_good(s) <= 0)
3210 service_enter_dead(s, f, true);
034c6ed7
LP
3211 break;
3212
3213 default:
3214 assert_not_reached("Uh, control process died at wrong time.");
3215 }
3216 }
8c47c732 3217 }
c4e2ceae
LP
3218
3219 /* Notify clients about changed exit status */
3220 unit_add_to_dbus_queue(u);
a911bb9a
LP
3221
3222 /* We got one SIGCHLD for the service, let's watch all
3223 * processes that are now running of the service, and watch
3224 * that. Among the PIDs we then watch will be children
3225 * reassigned to us, which hopefully allows us to identify
3226 * when all children are gone */
3227 unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
3228 unit_watch_all_pids(u);
3229
3230 /* If the PID set is empty now, then let's finish this off */
3231 if (set_isempty(u->pids))
3232 service_notify_cgroup_empty_event(u);
034c6ed7
LP
3233}
3234
718db961
LP
3235static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
3236 Service *s = SERVICE(userdata);
034c6ed7
LP
3237
3238 assert(s);
718db961 3239 assert(source == s->timer_event_source);
034c6ed7
LP
3240
3241 switch (s->state) {
3242
3243 case SERVICE_START_PRE:
3244 case SERVICE_START:
718db961 3245 log_warning_unit(UNIT(s)->id,
41aef6fc
ZJS
3246 "%s %s operation timed out. Terminating.",
3247 UNIT(s)->id,
3248 s->state == SERVICE_START ? "start" : "start-pre");
f42806df 3249 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
80876c20
LP
3250 break;
3251
034c6ed7 3252 case SERVICE_START_POST:
718db961 3253 log_warning_unit(UNIT(s)->id,
41aef6fc 3254 "%s start-post operation timed out. Stopping.", UNIT(s)->id);
f42806df 3255 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3256 break;
3257
e2f3b44c 3258 case SERVICE_RELOAD:
718db961 3259 log_warning_unit(UNIT(s)->id,
41aef6fc 3260 "%s reload operation timed out. Stopping.", UNIT(s)->id);
f42806df
LP
3261 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3262 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c
LP
3263 break;
3264
034c6ed7 3265 case SERVICE_STOP:
718db961
LP
3266 log_warning_unit(UNIT(s)->id,
3267 "%s stopping timed out. Terminating.", UNIT(s)->id);
f42806df 3268 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3269 break;
3270
3271 case SERVICE_STOP_SIGTERM:
4819ff03 3272 if (s->kill_context.send_sigkill) {
718db961 3273 log_warning_unit(UNIT(s)->id,
41aef6fc 3274 "%s stop-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 3275 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3276 } else {
718db961 3277 log_warning_unit(UNIT(s)->id,
41aef6fc 3278 "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s)->id);
f42806df 3279 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
ba035df2
LP
3280 }
3281
034c6ed7
LP
3282 break;
3283
3284 case SERVICE_STOP_SIGKILL:
35b8ca3a 3285 /* Uh, we sent a SIGKILL and it is still not gone?
034c6ed7
LP
3286 * Must be something we cannot kill, so let's just be
3287 * weirded out and continue */
3288
718db961
LP
3289 log_warning_unit(UNIT(s)->id,
3290 "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
f42806df 3291 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3292 break;
3293
3294 case SERVICE_STOP_POST:
718db961 3295 log_warning_unit(UNIT(s)->id,
41aef6fc 3296 "%s stop-post timed out. Terminating.", UNIT(s)->id);
f42806df 3297 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3298 break;
3299
3300 case SERVICE_FINAL_SIGTERM:
4819ff03 3301 if (s->kill_context.send_sigkill) {
718db961 3302 log_warning_unit(UNIT(s)->id,
41aef6fc 3303 "%s stop-final-sigterm timed out. Killing.", UNIT(s)->id);
f42806df 3304 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3305 } else {
718db961 3306 log_warning_unit(UNIT(s)->id,
41aef6fc 3307 "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.",
718db961 3308 UNIT(s)->id);
f42806df 3309 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
ba035df2
LP
3310 }
3311
034c6ed7
LP
3312 break;
3313
3314 case SERVICE_FINAL_SIGKILL:
718db961 3315 log_warning_unit(UNIT(s)->id,
41aef6fc 3316 "%s still around after final SIGKILL. Entering failed mode.", UNIT(s)->id);
f42806df 3317 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
034c6ed7
LP
3318 break;
3319
3320 case SERVICE_AUTO_RESTART:
718db961 3321 log_info_unit(UNIT(s)->id,
ef417cfd
ZJS
3322 s->restart_usec > 0 ?
3323 "%s holdoff time over, scheduling restart." :
3324 "%s has no holdoff time, scheduling restart.",
3325 UNIT(s)->id);
034c6ed7
LP
3326 service_enter_restart(s);
3327 break;
3328
3329 default:
3330 assert_not_reached("Timeout at wrong time.");
3331 }
718db961
LP
3332
3333 return 0;
3334}
3335
3336static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
3337 Service *s = SERVICE(userdata);
3338
3339 assert(s);
3340 assert(source == s->watchdog_event_source);
3341
842129f5
LP
3342 log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id);
3343 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
3344
718db961 3345 return 0;
5cb5a6ff
LP
3346}
3347
c952c6ec 3348static void service_notify_message(Unit *u, pid_t pid, char **tags) {
8c47c732
LP
3349 Service *s = SERVICE(u);
3350 const char *e;
30b5275a 3351 bool notify_dbus = false;
8c47c732
LP
3352
3353 assert(u);
3354
ccd06097
ZJS
3355 log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT" (%s...)",
3356 u->id, pid, tags && *tags ? tags[0] : "(empty)");
da13d4d2 3357
c952c6ec 3358 if (s->notify_access == NOTIFY_NONE) {
66870f90 3359 log_warning_unit(u->id,
ccd06097
ZJS
3360 "%s: Got notification message from PID "PID_FMT", but reception is disabled.",
3361 u->id, pid);
c952c6ec
LP
3362 return;
3363 }
3364
336c6e46
LP
3365 if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
3366
3367 if (s->main_pid != 0)
3368 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);
3369 else
3a33e61d 3370 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
3371 return;
3372 }
3373
8c47c732
LP
3374 /* Interpret MAINPID= */
3375 if ((e = strv_find_prefix(tags, "MAINPID=")) &&
3376 (s->state == SERVICE_START ||
3377 s->state == SERVICE_START_POST ||
3378 s->state == SERVICE_RUNNING ||
3379 s->state == SERVICE_RELOAD)) {
8c47c732 3380
5925dd3c 3381 if (parse_pid(e + 8, &pid) < 0)
30b5275a 3382 log_warning_unit(u->id, "Failed to parse notification message %s", e);
8c47c732 3383 else {
30b5275a 3384 log_debug_unit(u->id, "%s: got %s", u->id, e);
5925dd3c 3385 service_set_main_pid(s, pid);
7400b9d2 3386 unit_watch_pid(UNIT(s), pid);
30b5275a 3387 notify_dbus = true;
8c47c732
LP
3388 }
3389 }
3390
3391 /* Interpret READY= */
30b5275a
LP
3392 if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START && strv_find(tags, "READY=1")) {
3393 log_debug_unit(u->id, "%s: got READY=1", u->id);
8c47c732 3394 service_enter_start_post(s);
30b5275a 3395 notify_dbus = true;
8c47c732
LP
3396 }
3397
3398 /* Interpret STATUS= */
7f110ff9
LP
3399 e = strv_find_prefix(tags, "STATUS=");
3400 if (e) {
8c47c732
LP
3401 char *t;
3402
3a2776bc 3403 if (e[7]) {
7f110ff9 3404 if (!utf8_is_valid(e+7)) {
30b5275a 3405 log_warning_unit(u->id, "Status message in notification is not UTF-8 clean.");
7f110ff9
LP
3406 return;
3407 }
3408
30b5275a
LP
3409 log_debug_unit(u->id, "%s: got %s", u->id, e);
3410
7f110ff9
LP
3411 t = strdup(e+7);
3412 if (!t) {
30b5275a 3413 log_oom();
3a2776bc
LP
3414 return;
3415 }
3416
30b5275a
LP
3417 } else
3418 t = NULL;
8c47c732 3419
30b5275a 3420 if (!streq_ptr(s->status_text, t)) {
3a2776bc
LP
3421 free(s->status_text);
3422 s->status_text = t;
30b5275a
LP
3423 notify_dbus = true;
3424 } else
3425 free(t);
8c47c732 3426 }
842129f5 3427
6f285378 3428 /* Interpret WATCHDOG= */
a6927d7f 3429 if (strv_find(tags, "WATCHDOG=1")) {
842129f5
LP
3430 log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
3431 service_reset_watchdog(s);
a6927d7f 3432 }
c4e2ceae
LP
3433
3434 /* Notify clients about changed status or main pid */
30b5275a
LP
3435 if (notify_dbus)
3436 unit_add_to_dbus_queue(u);
8c47c732
LP
3437}
3438
68db7a3b
ZJS
3439static int service_get_timeout(Unit *u, uint64_t *timeout) {
3440 Service *s = SERVICE(u);
3441 int r;
3442
3443 if (!s->timer_event_source)
3444 return 0;
3445
3446 r = sd_event_source_get_time(s->timer_event_source, timeout);
3447 if (r < 0)
3448 return r;
3449
3450 return 1;
3451}
3452
07459bb6 3453#ifdef HAVE_SYSV_COMPAT
de3910a3 3454
2c4104f0 3455static int service_enumerate(Manager *m) {
2c4104f0
LP
3456 char **p;
3457 unsigned i;
7fd1b19b
HH
3458 _cleanup_closedir_ DIR *d = NULL;
3459 _cleanup_free_ char *path = NULL, *fpath = NULL, *name = NULL;
b92bea5d 3460 Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
7fd1b19b 3461 _cleanup_set_free_ Set *shutdown_services = NULL;
c68364b7
LP
3462 Unit *service;
3463 Iterator j;
2c4104f0
LP
3464 int r;
3465
3466 assert(m);
3467
67445f4e 3468 if (m->running_as != SYSTEMD_SYSTEM)
b1bc08e5
LP
3469 return 0;
3470
84e3543e 3471 STRV_FOREACH(p, m->lookup_paths.sysvrcnd_path)
09cd1ab1 3472 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
2c4104f0
LP
3473 struct dirent *de;
3474
3475 free(path);
b7def684 3476 path = strjoin(*p, "/", rcnd_table[i].path, NULL);
70132bd0 3477 if (!path) {
2c4104f0
LP
3478 r = -ENOMEM;
3479 goto finish;
3480 }
3481
3482 if (d)
3483 closedir(d);
3484
117dcc57
ZJS
3485 d = opendir(path);
3486 if (!d) {
2c4104f0 3487 if (errno != ENOENT)
f5f6d0e2 3488 log_warning("opendir(%s) failed: %m", path);
2c4104f0
LP
3489
3490 continue;
3491 }
3492
3493 while ((de = readdir(d))) {
db06e3b6 3494 int a, b;
2c4104f0
LP
3495
3496 if (ignore_file(de->d_name))
3497 continue;
3498
3499 if (de->d_name[0] != 'S' && de->d_name[0] != 'K')
3500 continue;
3501
3502 if (strlen(de->d_name) < 4)
3503 continue;
3504
db06e3b6
LP
3505 a = undecchar(de->d_name[1]);
3506 b = undecchar(de->d_name[2]);
3507
3508 if (a < 0 || b < 0)
3509 continue;
3510
2c4104f0 3511 free(fpath);
b7def684 3512 fpath = strjoin(path, "/", de->d_name, NULL);
8ea913b2 3513 if (!fpath) {
2c4104f0
LP
3514 r = -ENOMEM;
3515 goto finish;
3516 }
3517
3518 if (access(fpath, X_OK) < 0) {
3519
3520 if (errno != ENOENT)
f5f6d0e2 3521 log_warning("access() failed on %s: %m", fpath);
2c4104f0
LP
3522
3523 continue;
3524 }
3525
3526 free(name);
117dcc57
ZJS
3527 name = sysv_translate_name(de->d_name + 3);
3528 if (!name) {
3529 r = log_oom();
2c4104f0
LP
3530 goto finish;
3531 }
3532
66870f90
ZJS
3533 r = manager_load_unit_prepare(m, name, NULL, NULL, &service);
3534 if (r < 0) {
fbe9f3a9
LP
3535 log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
3536 continue;
3537 }
2c4104f0 3538
c68364b7
LP
3539 if (de->d_name[0] == 'S') {
3540
3cdebc21 3541 if (rcnd_table[i].type == RUNLEVEL_UP) {
ea87ca5a
LP
3542 SERVICE(service)->sysv_start_priority_from_rcnd =
3543 MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
db06e3b6 3544
c68364b7 3545 SERVICE(service)->sysv_enabled = true;
f73d93a4 3546 }
db06e3b6 3547
117dcc57
ZJS
3548 r = set_ensure_allocated(&runlevel_services[i],
3549 trivial_hash_func, trivial_compare_func);
3550 if (r < 0)
c68364b7 3551 goto finish;
2c4104f0 3552
117dcc57
ZJS
3553 r = set_put(runlevel_services[i], service);
3554 if (r < 0)
2c4104f0 3555 goto finish;
23a177ef 3556
fc5df99e 3557 } else if (de->d_name[0] == 'K' &&
3cdebc21 3558 (rcnd_table[i].type == RUNLEVEL_DOWN)) {
6542952f 3559
117dcc57
ZJS
3560 r = set_ensure_allocated(&shutdown_services,
3561 trivial_hash_func, trivial_compare_func);
3562 if (r < 0)
c68364b7
LP
3563 goto finish;
3564
117dcc57
ZJS
3565 r = set_put(shutdown_services, service);
3566 if (r < 0)
2c4104f0
LP
3567 goto finish;
3568 }
3569 }
3570 }
3571
c68364b7
LP
3572 /* Now we loaded all stubs and are aware of the lowest
3573 start-up priority for all services, not let's actually load
3574 the services, this will also tell us which services are
3575 actually native now */
3576 manager_dispatch_load_queue(m);
3577
3578 /* If this is a native service, rely on native ways to pull in
3579 * a service, don't pull it in via sysv rcN.d links. */
3580 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++)
3581 SET_FOREACH(service, runlevel_services[i], j) {
3582 service = unit_follow_merge(service);
3583
ac155bb8 3584 if (service->fragment_path)
c68364b7
LP
3585 continue;
3586
117dcc57
ZJS
3587 r = unit_add_two_dependencies_by_name_inverse(
3588 service, UNIT_AFTER, UNIT_WANTS,
3589 rcnd_table[i].target, NULL, true);
3590 if (r < 0)
c68364b7
LP
3591 goto finish;
3592 }
3593
3594 /* We honour K links only for halt/reboot. For the normal
3595 * runlevels we assume the stop jobs will be implicitly added
35b8ca3a 3596 * by the core logic. Also, we don't really distinguish here
c68364b7 3597 * between the runlevels 0 and 6 and just add them to the
3cdebc21 3598 * special shutdown target. */
c68364b7
LP
3599 SET_FOREACH(service, shutdown_services, 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(
3606 service, UNIT_BEFORE, UNIT_CONFLICTS,
3607 SPECIAL_SHUTDOWN_TARGET, NULL, true);
3608 if (r < 0)
c68364b7
LP
3609 goto finish;
3610 }
3611
2c4104f0
LP
3612 r = 0;
3613
3614finish:
fbe9f3a9 3615
c68364b7
LP
3616 for (i = 0; i < ELEMENTSOF(rcnd_table); i++)
3617 set_free(runlevel_services[i]);
2c4104f0
LP
3618
3619 return r;
3620}
07459bb6 3621#endif
2c4104f0 3622
05e343b7
LP
3623static void service_bus_name_owner_change(
3624 Unit *u,
3625 const char *name,
3626 const char *old_owner,
3627 const char *new_owner) {
3628
3629 Service *s = SERVICE(u);
718db961 3630 int r;
05e343b7
LP
3631
3632 assert(s);
3633 assert(name);
3634
3635 assert(streq(s->bus_name, name));
3636 assert(old_owner || new_owner);
3637
3638 if (old_owner && new_owner)
66870f90
ZJS
3639 log_debug_unit(u->id,
3640 "%s's D-Bus name %s changed owner from %s to %s",
3641 u->id, name, old_owner, new_owner);
05e343b7 3642 else if (old_owner)
66870f90
ZJS
3643 log_debug_unit(u->id,
3644 "%s's D-Bus name %s no longer registered by %s",
3645 u->id, name, old_owner);
05e343b7 3646 else
66870f90
ZJS
3647 log_debug_unit(u->id,
3648 "%s's D-Bus name %s now registered by %s",
3649 u->id, name, new_owner);
05e343b7
LP
3650
3651 s->bus_name_good = !!new_owner;
3652
3653 if (s->type == SERVICE_DBUS) {
3654
3655 /* service_enter_running() will figure out what to
3656 * do */
3657 if (s->state == SERVICE_RUNNING)
f42806df 3658 service_enter_running(s, SERVICE_SUCCESS);
05e343b7
LP
3659 else if (s->state == SERVICE_START && new_owner)
3660 service_enter_start_post(s);
3661
3662 } else if (new_owner &&
3663 s->main_pid <= 0 &&
3664 (s->state == SERVICE_START ||
3665 s->state == SERVICE_START_POST ||
3666 s->state == SERVICE_RUNNING ||
3667 s->state == SERVICE_RELOAD)) {
3668
5b12334d 3669 _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
718db961 3670 pid_t pid;
05e343b7 3671
718db961 3672 /* Try to acquire PID from bus service */
05e343b7 3673
49b832c5 3674 r = sd_bus_get_owner(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
5b12334d
LP
3675 if (r >= 0)
3676 r = sd_bus_creds_get_pid(creds, &pid);
718db961
LP
3677 if (r >= 0) {
3678 log_debug_unit(u->id, "%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
05e343b7 3679
718db961
LP
3680 service_set_main_pid(s, pid);
3681 unit_watch_pid(UNIT(s), pid);
3682 }
7400b9d2 3683 }
05e343b7
LP
3684}
3685
6cf6bbc2 3686int service_set_socket_fd(Service *s, int fd, Socket *sock) {
79a98c60
LP
3687 _cleanup_free_ char *peer = NULL;
3688 int r;
57020a3a 3689
4f2d528d
LP
3690 assert(s);
3691 assert(fd >= 0);
3692
3693 /* This is called by the socket code when instantiating a new
3694 * service for a stream socket and the socket needs to be
3695 * configured. */
3696
1124fe6f 3697 if (UNIT(s)->load_state != UNIT_LOADED)
4f2d528d
LP
3698 return -EINVAL;
3699
3700 if (s->socket_fd >= 0)
3701 return -EBUSY;
3702
3703 if (s->state != SERVICE_DEAD)
3704 return -EAGAIN;
3705
79a98c60
LP
3706 if (getpeername_pretty(fd, &peer) >= 0) {
3707
3708 if (UNIT(s)->description) {
3709 _cleanup_free_ char *a;
3710
3711 a = strjoin(UNIT(s)->description, " (", peer, ")", NULL);
3712 if (!a)
3713 return -ENOMEM;
3714
3715 r = unit_set_description(UNIT(s), a);
3716 } else
3717 r = unit_set_description(UNIT(s), peer);
3718
3719 if (r < 0)
3720 return r;
3721 }
3722
4f2d528d 3723 s->socket_fd = fd;
6cf6bbc2 3724
57020a3a
LP
3725 unit_ref_set(&s->accept_socket, UNIT(sock));
3726
3727 return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
4f2d528d
LP
3728}
3729
fdf20a31 3730static void service_reset_failed(Unit *u) {
5632e374
LP
3731 Service *s = SERVICE(u);
3732
3733 assert(s);
3734
fdf20a31 3735 if (s->state == SERVICE_FAILED)
5632e374
LP
3736 service_set_state(s, SERVICE_DEAD);
3737
f42806df
LP
3738 s->result = SERVICE_SUCCESS;
3739 s->reload_result = SERVICE_SUCCESS;
451b34cc
LP
3740
3741 RATELIMIT_RESET(s->start_limit);
5632e374
LP
3742}
3743
718db961 3744static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
8a0867d6 3745 Service *s = SERVICE(u);
41efeaec 3746
814cc562 3747 return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
8a0867d6
LP
3748}
3749
94f04347
LP
3750static const char* const service_state_table[_SERVICE_STATE_MAX] = {
3751 [SERVICE_DEAD] = "dead",
3752 [SERVICE_START_PRE] = "start-pre",
3753 [SERVICE_START] = "start",
3754 [SERVICE_START_POST] = "start-post",
3755 [SERVICE_RUNNING] = "running",
80876c20 3756 [SERVICE_EXITED] = "exited",
94f04347
LP
3757 [SERVICE_RELOAD] = "reload",
3758 [SERVICE_STOP] = "stop",
3759 [SERVICE_STOP_SIGTERM] = "stop-sigterm",
3760 [SERVICE_STOP_SIGKILL] = "stop-sigkill",
3761 [SERVICE_STOP_POST] = "stop-post",
3762 [SERVICE_FINAL_SIGTERM] = "final-sigterm",
3763 [SERVICE_FINAL_SIGKILL] = "final-sigkill",
fdf20a31 3764 [SERVICE_FAILED] = "failed",
94f04347
LP
3765 [SERVICE_AUTO_RESTART] = "auto-restart",
3766};
3767
3768DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
3769
3770static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
525ee6f4
LP
3771 [SERVICE_RESTART_NO] = "no",
3772 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
50caaedb 3773 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
dc99a976 3774 [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
50caaedb
LP
3775 [SERVICE_RESTART_ON_ABORT] = "on-abort",
3776 [SERVICE_RESTART_ALWAYS] = "always"
94f04347
LP
3777};
3778
3779DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3780
3781static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
94f04347 3782 [SERVICE_SIMPLE] = "simple",
0d624a78 3783 [SERVICE_FORKING] = "forking",
34e9ba66 3784 [SERVICE_ONESHOT] = "oneshot",
8c47c732 3785 [SERVICE_DBUS] = "dbus",
f2b68789
LP
3786 [SERVICE_NOTIFY] = "notify",
3787 [SERVICE_IDLE] = "idle"
94f04347
LP
3788};
3789
3790DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3791
e537352b 3792static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
94f04347
LP
3793 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
3794 [SERVICE_EXEC_START] = "ExecStart",
3795 [SERVICE_EXEC_START_POST] = "ExecStartPost",
3796 [SERVICE_EXEC_RELOAD] = "ExecReload",
3797 [SERVICE_EXEC_STOP] = "ExecStop",
3798 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3799};
3800
3801DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3802
c952c6ec
LP
3803static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
3804 [NOTIFY_NONE] = "none",
3805 [NOTIFY_MAIN] = "main",
3806 [NOTIFY_ALL] = "all"
3807};
3808
3809DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
3810
f42806df
LP
3811static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3812 [SERVICE_SUCCESS] = "success",
3813 [SERVICE_FAILURE_RESOURCES] = "resources",
3814 [SERVICE_FAILURE_TIMEOUT] = "timeout",
3815 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3816 [SERVICE_FAILURE_SIGNAL] = "signal",
bb242b7b 3817 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
8d1b002a
LP
3818 [SERVICE_FAILURE_WATCHDOG] = "watchdog",
3819 [SERVICE_FAILURE_START_LIMIT] = "start-limit"
f42806df
LP
3820};
3821
3822DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3823
4b939747
MO
3824static const char* const start_limit_action_table[_SERVICE_START_LIMIT_MAX] = {
3825 [SERVICE_START_LIMIT_NONE] = "none",
3826 [SERVICE_START_LIMIT_REBOOT] = "reboot",
3827 [SERVICE_START_LIMIT_REBOOT_FORCE] = "reboot-force",
3828 [SERVICE_START_LIMIT_REBOOT_IMMEDIATE] = "reboot-immediate"
3829};
3830DEFINE_STRING_TABLE_LOOKUP(start_limit_action, StartLimitAction);
3831
87f0e418 3832const UnitVTable service_vtable = {
7d17cfbc 3833 .object_size = sizeof(Service),
718db961
LP
3834 .exec_context_offset = offsetof(Service, exec_context),
3835 .cgroup_context_offset = offsetof(Service, cgroup_context),
3836 .kill_context_offset = offsetof(Service, kill_context),
613b411c 3837 .exec_runtime_offset = offsetof(Service, exec_runtime),
3ef63c31 3838
f975e971
LP
3839 .sections =
3840 "Unit\0"
3841 "Service\0"
3842 "Install\0",
4ad49000 3843 .private_section = "Service",
71645aca 3844
034c6ed7
LP
3845 .init = service_init,
3846 .done = service_done,
a16e1123
LP
3847 .load = service_load,
3848
3849 .coldplug = service_coldplug,
034c6ed7 3850
5cb5a6ff
LP
3851 .dump = service_dump,
3852
3853 .start = service_start,
3854 .stop = service_stop,
3855 .reload = service_reload,
3856
034c6ed7
LP
3857 .can_reload = service_can_reload,
3858
8a0867d6
LP
3859 .kill = service_kill,
3860
a16e1123
LP
3861 .serialize = service_serialize,
3862 .deserialize_item = service_deserialize_item,
3863
5cb5a6ff 3864 .active_state = service_active_state,
10a94420 3865 .sub_state_to_string = service_sub_state_to_string,
5cb5a6ff 3866
701cc384
LP
3867 .check_gc = service_check_gc,
3868 .check_snapshot = service_check_snapshot,
3869
034c6ed7 3870 .sigchld_event = service_sigchld_event,
2c4104f0 3871
fdf20a31 3872 .reset_failed = service_reset_failed,
5632e374 3873
4ad49000 3874 .notify_cgroup_empty = service_notify_cgroup_empty_event,
8c47c732 3875 .notify_message = service_notify_message,
8e274523 3876
05e343b7 3877 .bus_name_owner_change = service_bus_name_owner_change,
05e343b7 3878
c4e2ceae 3879 .bus_interface = "org.freedesktop.systemd1.Service",
718db961 3880 .bus_vtable = bus_service_vtable,
74c964d3
LP
3881 .bus_set_property = bus_service_set_property,
3882 .bus_commit_properties = bus_service_commit_properties,
4139c1b2 3883
68db7a3b
ZJS
3884 .get_timeout = service_get_timeout,
3885
07459bb6 3886#ifdef HAVE_SYSV_COMPAT
c6918296 3887 .enumerate = service_enumerate,
07459bb6 3888#endif
718db961
LP
3889
3890 .can_transient = true,
3891
c6918296
MS
3892 .status_message_formats = {
3893 .starting_stopping = {
3894 [0] = "Starting %s...",
3895 [1] = "Stopping %s...",
3896 },
3897 .finished_start_job = {
3898 [JOB_DONE] = "Started %s.",
3899 [JOB_FAILED] = "Failed to start %s.",
3900 [JOB_DEPENDENCY] = "Dependency failed for %s.",
3901 [JOB_TIMEOUT] = "Timed out starting %s.",
3902 },
3903 .finished_stop_job = {
3904 [JOB_DONE] = "Stopped %s.",
3905 [JOB_FAILED] = "Stopped (with error) %s.",
3906 [JOB_TIMEOUT] = "Timed out stopping %s.",
3907 },
3908 },
5cb5a6ff 3909};