1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4 This file is part of systemd.
6 Copyright 2010 Lennart Poettering
8 systemd is free software; you can redistribute it and/or modify it
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
11 (at your option) any later version.
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
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
29 #include "sd-messages.h"
31 #include "alloc-util.h"
32 #include "bus-common-errors.h"
34 #include "cgroup-util.h"
35 #include "dbus-unit.h"
40 #include "fileio-label.h"
41 #include "formats-util.h"
42 #include "load-dropin.h"
43 #include "load-fragment.h"
48 #include "parse-util.h"
49 #include "path-util.h"
50 #include "process-util.h"
53 #include "stat-util.h"
54 #include "stdio-util.h"
55 #include "string-util.h"
57 #include "unit-name.h"
59 #include "user-util.h"
62 const UnitVTable
* const unit_vtable
[_UNIT_TYPE_MAX
] = {
63 [UNIT_SERVICE
] = &service_vtable
,
64 [UNIT_SOCKET
] = &socket_vtable
,
65 [UNIT_BUSNAME
] = &busname_vtable
,
66 [UNIT_TARGET
] = &target_vtable
,
67 [UNIT_DEVICE
] = &device_vtable
,
68 [UNIT_MOUNT
] = &mount_vtable
,
69 [UNIT_AUTOMOUNT
] = &automount_vtable
,
70 [UNIT_SWAP
] = &swap_vtable
,
71 [UNIT_TIMER
] = &timer_vtable
,
72 [UNIT_PATH
] = &path_vtable
,
73 [UNIT_SLICE
] = &slice_vtable
,
74 [UNIT_SCOPE
] = &scope_vtable
77 static void maybe_warn_about_dependency(Unit
*u
, const char *other
, UnitDependency dependency
);
79 Unit
*unit_new(Manager
*m
, size_t size
) {
83 assert(size
>= sizeof(Unit
));
89 u
->names
= set_new(&string_hash_ops
);
96 u
->type
= _UNIT_TYPE_INVALID
;
97 u
->default_dependencies
= true;
98 u
->unit_file_state
= _UNIT_FILE_STATE_INVALID
;
99 u
->unit_file_preset
= -1;
100 u
->on_failure_job_mode
= JOB_REPLACE
;
101 u
->cgroup_inotify_wd
= -1;
103 RATELIMIT_INIT(u
->auto_stop_ratelimit
, 10 * USEC_PER_SEC
, 16);
108 bool unit_has_name(Unit
*u
, const char *name
) {
112 return !!set_get(u
->names
, (char*) name
);
115 static void unit_init(Unit
*u
) {
122 assert(u
->type
>= 0);
124 cc
= unit_get_cgroup_context(u
);
126 cgroup_context_init(cc
);
128 /* Copy in the manager defaults into the cgroup
129 * context, _before_ the rest of the settings have
130 * been initialized */
132 cc
->cpu_accounting
= u
->manager
->default_cpu_accounting
;
133 cc
->blockio_accounting
= u
->manager
->default_blockio_accounting
;
134 cc
->memory_accounting
= u
->manager
->default_memory_accounting
;
135 cc
->tasks_accounting
= u
->manager
->default_tasks_accounting
;
137 if (u
->type
!= UNIT_SLICE
)
138 cc
->tasks_max
= u
->manager
->default_tasks_max
;
141 ec
= unit_get_exec_context(u
);
143 exec_context_init(ec
);
145 kc
= unit_get_kill_context(u
);
147 kill_context_init(kc
);
149 if (UNIT_VTABLE(u
)->init
)
150 UNIT_VTABLE(u
)->init(u
);
153 int unit_add_name(Unit
*u
, const char *text
) {
154 _cleanup_free_
char *s
= NULL
, *i
= NULL
;
161 if (unit_name_is_valid(text
, UNIT_NAME_TEMPLATE
)) {
166 r
= unit_name_replace_instance(text
, u
->instance
, &s
);
175 if (set_contains(u
->names
, s
))
177 if (hashmap_contains(u
->manager
->units
, s
))
180 if (!unit_name_is_valid(s
, UNIT_NAME_PLAIN
|UNIT_NAME_INSTANCE
))
183 t
= unit_name_to_type(s
);
187 if (u
->type
!= _UNIT_TYPE_INVALID
&& t
!= u
->type
)
190 r
= unit_name_to_instance(s
, &i
);
194 if (i
&& unit_vtable
[t
]->no_instances
)
197 /* Ensure that this unit is either instanced or not instanced,
198 * but not both. Note that we do allow names with different
199 * instance names however! */
200 if (u
->type
!= _UNIT_TYPE_INVALID
&& !u
->instance
!= !i
)
203 if (unit_vtable
[t
]->no_alias
&& !set_isempty(u
->names
))
206 if (hashmap_size(u
->manager
->units
) >= MANAGER_MAX_NAMES
)
209 r
= set_put(u
->names
, s
);
214 r
= hashmap_put(u
->manager
->units
, s
, u
);
216 (void) set_remove(u
->names
, s
);
220 if (u
->type
== _UNIT_TYPE_INVALID
) {
225 LIST_PREPEND(units_by_type
, u
->manager
->units_by_type
[t
], u
);
234 unit_add_to_dbus_queue(u
);
238 int unit_choose_id(Unit
*u
, const char *name
) {
239 _cleanup_free_
char *t
= NULL
;
246 if (unit_name_is_valid(name
, UNIT_NAME_TEMPLATE
)) {
251 r
= unit_name_replace_instance(name
, u
->instance
, &t
);
258 /* Selects one of the names of this unit as the id */
259 s
= set_get(u
->names
, (char*) name
);
263 /* Determine the new instance from the new id */
264 r
= unit_name_to_instance(s
, &i
);
273 unit_add_to_dbus_queue(u
);
278 int unit_set_description(Unit
*u
, const char *description
) {
283 if (isempty(description
))
286 s
= strdup(description
);
291 free(u
->description
);
294 unit_add_to_dbus_queue(u
);
298 bool unit_check_gc(Unit
*u
) {
299 UnitActiveState state
;
308 state
= unit_active_state(u
);
310 /* If the unit is inactive and failed and no job is queued for
311 * it, then release its runtime resources */
312 if (UNIT_IS_INACTIVE_OR_FAILED(state
) &&
313 UNIT_VTABLE(u
)->release_resources
)
314 UNIT_VTABLE(u
)->release_resources(u
);
316 /* But we keep the unit object around for longer when it is
317 * referenced or configured to not be gc'ed */
318 if (state
!= UNIT_INACTIVE
)
327 if (UNIT_VTABLE(u
)->check_gc
)
328 if (UNIT_VTABLE(u
)->check_gc(u
))
334 void unit_add_to_load_queue(Unit
*u
) {
336 assert(u
->type
!= _UNIT_TYPE_INVALID
);
338 if (u
->load_state
!= UNIT_STUB
|| u
->in_load_queue
)
341 LIST_PREPEND(load_queue
, u
->manager
->load_queue
, u
);
342 u
->in_load_queue
= true;
345 void unit_add_to_cleanup_queue(Unit
*u
) {
348 if (u
->in_cleanup_queue
)
351 LIST_PREPEND(cleanup_queue
, u
->manager
->cleanup_queue
, u
);
352 u
->in_cleanup_queue
= true;
355 void unit_add_to_gc_queue(Unit
*u
) {
358 if (u
->in_gc_queue
|| u
->in_cleanup_queue
)
361 if (unit_check_gc(u
))
364 LIST_PREPEND(gc_queue
, u
->manager
->gc_queue
, u
);
365 u
->in_gc_queue
= true;
367 u
->manager
->n_in_gc_queue
++;
370 void unit_add_to_dbus_queue(Unit
*u
) {
372 assert(u
->type
!= _UNIT_TYPE_INVALID
);
374 if (u
->load_state
== UNIT_STUB
|| u
->in_dbus_queue
)
377 /* Shortcut things if nobody cares */
378 if (sd_bus_track_count(u
->manager
->subscribed
) <= 0 &&
379 set_isempty(u
->manager
->private_buses
)) {
380 u
->sent_dbus_new_signal
= true;
384 LIST_PREPEND(dbus_queue
, u
->manager
->dbus_unit_queue
, u
);
385 u
->in_dbus_queue
= true;
388 static void bidi_set_free(Unit
*u
, Set
*s
) {
394 /* Frees the set and makes sure we are dropped from the
395 * inverse pointers */
397 SET_FOREACH(other
, s
, i
) {
400 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++)
401 set_remove(other
->dependencies
[d
], u
);
403 unit_add_to_gc_queue(other
);
409 static void unit_remove_transient(Unit
*u
) {
417 if (u
->fragment_path
)
418 (void) unlink(u
->fragment_path
);
420 STRV_FOREACH(i
, u
->dropin_paths
) {
421 _cleanup_free_
char *p
= NULL
;
425 p
= dirname_malloc(*i
);
431 static void unit_free_requires_mounts_for(Unit
*u
) {
434 STRV_FOREACH(j
, u
->requires_mounts_for
) {
435 char s
[strlen(*j
) + 1];
437 PATH_FOREACH_PREFIX_MORE(s
, *j
) {
441 x
= hashmap_get2(u
->manager
->units_requiring_mounts_for
, s
, (void**) &y
);
447 if (set_isempty(x
)) {
448 hashmap_remove(u
->manager
->units_requiring_mounts_for
, y
);
455 u
->requires_mounts_for
= strv_free(u
->requires_mounts_for
);
458 static void unit_done(Unit
*u
) {
468 if (UNIT_VTABLE(u
)->done
)
469 UNIT_VTABLE(u
)->done(u
);
471 ec
= unit_get_exec_context(u
);
473 exec_context_done(ec
);
475 cc
= unit_get_cgroup_context(u
);
477 cgroup_context_done(cc
);
479 r
= unit_remove_from_netclass_cgroup(u
);
481 log_warning_errno(r
, "Unable to remove unit from netclass group: %m");
484 void unit_free(Unit
*u
) {
491 if (u
->manager
->n_reloading
<= 0)
492 unit_remove_transient(u
);
494 bus_unit_send_removed_signal(u
);
498 sd_bus_slot_unref(u
->match_bus_slot
);
500 unit_free_requires_mounts_for(u
);
502 SET_FOREACH(t
, u
->names
, i
)
503 hashmap_remove_value(u
->manager
->units
, t
, u
);
517 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++)
518 bidi_set_free(u
, u
->dependencies
[d
]);
520 if (u
->type
!= _UNIT_TYPE_INVALID
)
521 LIST_REMOVE(units_by_type
, u
->manager
->units_by_type
[u
->type
], u
);
523 if (u
->in_load_queue
)
524 LIST_REMOVE(load_queue
, u
->manager
->load_queue
, u
);
526 if (u
->in_dbus_queue
)
527 LIST_REMOVE(dbus_queue
, u
->manager
->dbus_unit_queue
, u
);
529 if (u
->in_cleanup_queue
)
530 LIST_REMOVE(cleanup_queue
, u
->manager
->cleanup_queue
, u
);
532 if (u
->in_gc_queue
) {
533 LIST_REMOVE(gc_queue
, u
->manager
->gc_queue
, u
);
534 u
->manager
->n_in_gc_queue
--;
537 if (u
->in_cgroup_queue
)
538 LIST_REMOVE(cgroup_queue
, u
->manager
->cgroup_queue
, u
);
540 unit_release_cgroup(u
);
542 (void) manager_update_failed_units(u
->manager
, u
, false);
543 set_remove(u
->manager
->startup_units
, u
);
545 free(u
->description
);
546 strv_free(u
->documentation
);
547 free(u
->fragment_path
);
548 free(u
->source_path
);
549 strv_free(u
->dropin_paths
);
552 free(u
->job_timeout_reboot_arg
);
554 set_free_free(u
->names
);
556 unit_unwatch_all_pids(u
);
558 condition_free_list(u
->conditions
);
559 condition_free_list(u
->asserts
);
561 unit_ref_unset(&u
->slice
);
564 unit_ref_unset(u
->refs
);
569 UnitActiveState
unit_active_state(Unit
*u
) {
572 if (u
->load_state
== UNIT_MERGED
)
573 return unit_active_state(unit_follow_merge(u
));
575 /* After a reload it might happen that a unit is not correctly
576 * loaded but still has a process around. That's why we won't
577 * shortcut failed loading to UNIT_INACTIVE_FAILED. */
579 return UNIT_VTABLE(u
)->active_state(u
);
582 const char* unit_sub_state_to_string(Unit
*u
) {
585 return UNIT_VTABLE(u
)->sub_state_to_string(u
);
588 static int complete_move(Set
**s
, Set
**other
) {
598 r
= set_move(*s
, *other
);
609 static int merge_names(Unit
*u
, Unit
*other
) {
617 r
= complete_move(&u
->names
, &other
->names
);
621 set_free_free(other
->names
);
625 SET_FOREACH(t
, u
->names
, i
)
626 assert_se(hashmap_replace(u
->manager
->units
, t
, u
) == 0);
631 static int reserve_dependencies(Unit
*u
, Unit
*other
, UnitDependency d
) {
636 assert(d
< _UNIT_DEPENDENCY_MAX
);
639 * If u does not have this dependency set allocated, there is no need
640 * to reserve anything. In that case other's set will be transferred
641 * as a whole to u by complete_move().
643 if (!u
->dependencies
[d
])
646 /* merge_dependencies() will skip a u-on-u dependency */
647 n_reserve
= set_size(other
->dependencies
[d
]) - !!set_get(other
->dependencies
[d
], u
);
649 return set_reserve(u
->dependencies
[d
], n_reserve
);
652 static void merge_dependencies(Unit
*u
, Unit
*other
, const char *other_id
, UnitDependency d
) {
659 assert(d
< _UNIT_DEPENDENCY_MAX
);
661 /* Fix backwards pointers */
662 SET_FOREACH(back
, other
->dependencies
[d
], i
) {
665 for (k
= 0; k
< _UNIT_DEPENDENCY_MAX
; k
++) {
666 /* Do not add dependencies between u and itself */
668 if (set_remove(back
->dependencies
[k
], other
))
669 maybe_warn_about_dependency(u
, other_id
, k
);
671 r
= set_remove_and_put(back
->dependencies
[k
], other
, u
);
673 set_remove(back
->dependencies
[k
], other
);
675 assert(r
>= 0 || r
== -ENOENT
);
680 /* Also do not move dependencies on u to itself */
681 back
= set_remove(other
->dependencies
[d
], u
);
683 maybe_warn_about_dependency(u
, other_id
, d
);
685 /* The move cannot fail. The caller must have performed a reservation. */
686 assert_se(complete_move(&u
->dependencies
[d
], &other
->dependencies
[d
]) == 0);
688 other
->dependencies
[d
] = set_free(other
->dependencies
[d
]);
691 int unit_merge(Unit
*u
, Unit
*other
) {
693 const char *other_id
= NULL
;
698 assert(u
->manager
== other
->manager
);
699 assert(u
->type
!= _UNIT_TYPE_INVALID
);
701 other
= unit_follow_merge(other
);
706 if (u
->type
!= other
->type
)
709 if (!u
->instance
!= !other
->instance
)
712 if (other
->load_state
!= UNIT_STUB
&&
713 other
->load_state
!= UNIT_NOT_FOUND
)
722 if (!UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(other
)))
726 other_id
= strdupa(other
->id
);
728 /* Make reservations to ensure merge_dependencies() won't fail */
729 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++) {
730 r
= reserve_dependencies(u
, other
, d
);
732 * We don't rollback reservations if we fail. We don't have
733 * a way to undo reservations. A reservation is not a leak.
740 r
= merge_names(u
, other
);
744 /* Redirect all references */
746 unit_ref_set(other
->refs
, u
);
748 /* Merge dependencies */
749 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++)
750 merge_dependencies(u
, other
, other_id
, d
);
752 other
->load_state
= UNIT_MERGED
;
753 other
->merged_into
= u
;
755 /* If there is still some data attached to the other node, we
756 * don't need it anymore, and can free it. */
757 if (other
->load_state
!= UNIT_STUB
)
758 if (UNIT_VTABLE(other
)->done
)
759 UNIT_VTABLE(other
)->done(other
);
761 unit_add_to_dbus_queue(u
);
762 unit_add_to_cleanup_queue(other
);
767 int unit_merge_by_name(Unit
*u
, const char *name
) {
770 _cleanup_free_
char *s
= NULL
;
775 if (unit_name_is_valid(name
, UNIT_NAME_TEMPLATE
)) {
779 r
= unit_name_replace_instance(name
, u
->instance
, &s
);
786 other
= manager_get_unit(u
->manager
, name
);
788 return unit_merge(u
, other
);
790 return unit_add_name(u
, name
);
793 Unit
* unit_follow_merge(Unit
*u
) {
796 while (u
->load_state
== UNIT_MERGED
)
797 assert_se(u
= u
->merged_into
);
802 int unit_add_exec_dependencies(Unit
*u
, ExecContext
*c
) {
808 if (c
->working_directory
) {
809 r
= unit_require_mounts_for(u
, c
->working_directory
);
814 if (c
->root_directory
) {
815 r
= unit_require_mounts_for(u
, c
->root_directory
);
820 if (u
->manager
->running_as
!= MANAGER_SYSTEM
)
823 if (c
->private_tmp
) {
824 r
= unit_require_mounts_for(u
, "/tmp");
828 r
= unit_require_mounts_for(u
, "/var/tmp");
833 if (c
->std_output
!= EXEC_OUTPUT_KMSG
&&
834 c
->std_output
!= EXEC_OUTPUT_SYSLOG
&&
835 c
->std_output
!= EXEC_OUTPUT_JOURNAL
&&
836 c
->std_output
!= EXEC_OUTPUT_KMSG_AND_CONSOLE
&&
837 c
->std_output
!= EXEC_OUTPUT_SYSLOG_AND_CONSOLE
&&
838 c
->std_output
!= EXEC_OUTPUT_JOURNAL_AND_CONSOLE
&&
839 c
->std_error
!= EXEC_OUTPUT_KMSG
&&
840 c
->std_error
!= EXEC_OUTPUT_SYSLOG
&&
841 c
->std_error
!= EXEC_OUTPUT_JOURNAL
&&
842 c
->std_error
!= EXEC_OUTPUT_KMSG_AND_CONSOLE
&&
843 c
->std_error
!= EXEC_OUTPUT_JOURNAL_AND_CONSOLE
&&
844 c
->std_error
!= EXEC_OUTPUT_SYSLOG_AND_CONSOLE
)
847 /* If syslog or kernel logging is requested, make sure our own
848 * logging daemon is run first. */
850 r
= unit_add_dependency_by_name(u
, UNIT_AFTER
, SPECIAL_JOURNALD_SOCKET
, NULL
, true);
857 const char *unit_description(Unit
*u
) {
861 return u
->description
;
866 void unit_dump(Unit
*u
, FILE *f
, const char *prefix
) {
872 timestamp1
[FORMAT_TIMESTAMP_MAX
],
873 timestamp2
[FORMAT_TIMESTAMP_MAX
],
874 timestamp3
[FORMAT_TIMESTAMP_MAX
],
875 timestamp4
[FORMAT_TIMESTAMP_MAX
],
876 timespan
[FORMAT_TIMESPAN_MAX
];
878 _cleanup_set_free_ Set
*following_set
= NULL
;
882 assert(u
->type
>= 0);
884 prefix
= strempty(prefix
);
885 prefix2
= strjoina(prefix
, "\t");
889 "%s\tDescription: %s\n"
891 "%s\tUnit Load State: %s\n"
892 "%s\tUnit Active State: %s\n"
893 "%s\tInactive Exit Timestamp: %s\n"
894 "%s\tActive Enter Timestamp: %s\n"
895 "%s\tActive Exit Timestamp: %s\n"
896 "%s\tInactive Enter Timestamp: %s\n"
897 "%s\tGC Check Good: %s\n"
898 "%s\tNeed Daemon Reload: %s\n"
899 "%s\tTransient: %s\n"
902 "%s\tCGroup realized: %s\n"
903 "%s\tCGroup mask: 0x%x\n"
904 "%s\tCGroup members mask: 0x%x\n",
906 prefix
, unit_description(u
),
907 prefix
, strna(u
->instance
),
908 prefix
, unit_load_state_to_string(u
->load_state
),
909 prefix
, unit_active_state_to_string(unit_active_state(u
)),
910 prefix
, strna(format_timestamp(timestamp1
, sizeof(timestamp1
), u
->inactive_exit_timestamp
.realtime
)),
911 prefix
, strna(format_timestamp(timestamp2
, sizeof(timestamp2
), u
->active_enter_timestamp
.realtime
)),
912 prefix
, strna(format_timestamp(timestamp3
, sizeof(timestamp3
), u
->active_exit_timestamp
.realtime
)),
913 prefix
, strna(format_timestamp(timestamp4
, sizeof(timestamp4
), u
->inactive_enter_timestamp
.realtime
)),
914 prefix
, yes_no(unit_check_gc(u
)),
915 prefix
, yes_no(unit_need_daemon_reload(u
)),
916 prefix
, yes_no(u
->transient
),
917 prefix
, strna(unit_slice_name(u
)),
918 prefix
, strna(u
->cgroup_path
),
919 prefix
, yes_no(u
->cgroup_realized
),
920 prefix
, u
->cgroup_realized_mask
,
921 prefix
, u
->cgroup_members_mask
);
923 SET_FOREACH(t
, u
->names
, i
)
924 fprintf(f
, "%s\tName: %s\n", prefix
, t
);
926 STRV_FOREACH(j
, u
->documentation
)
927 fprintf(f
, "%s\tDocumentation: %s\n", prefix
, *j
);
929 following
= unit_following(u
);
931 fprintf(f
, "%s\tFollowing: %s\n", prefix
, following
->id
);
933 r
= unit_following_set(u
, &following_set
);
937 SET_FOREACH(other
, following_set
, i
)
938 fprintf(f
, "%s\tFollowing Set Member: %s\n", prefix
, other
->id
);
941 if (u
->fragment_path
)
942 fprintf(f
, "%s\tFragment Path: %s\n", prefix
, u
->fragment_path
);
945 fprintf(f
, "%s\tSource Path: %s\n", prefix
, u
->source_path
);
947 STRV_FOREACH(j
, u
->dropin_paths
)
948 fprintf(f
, "%s\tDropIn Path: %s\n", prefix
, *j
);
950 if (u
->job_timeout
> 0)
951 fprintf(f
, "%s\tJob Timeout: %s\n", prefix
, format_timespan(timespan
, sizeof(timespan
), u
->job_timeout
, 0));
953 if (u
->job_timeout_action
!= FAILURE_ACTION_NONE
)
954 fprintf(f
, "%s\tJob Timeout Action: %s\n", prefix
, failure_action_to_string(u
->job_timeout_action
));
956 if (u
->job_timeout_reboot_arg
)
957 fprintf(f
, "%s\tJob Timeout Reboot Argument: %s\n", prefix
, u
->job_timeout_reboot_arg
);
959 condition_dump_list(u
->conditions
, f
, prefix
, condition_type_to_string
);
960 condition_dump_list(u
->asserts
, f
, prefix
, assert_type_to_string
);
962 if (dual_timestamp_is_set(&u
->condition_timestamp
))
964 "%s\tCondition Timestamp: %s\n"
965 "%s\tCondition Result: %s\n",
966 prefix
, strna(format_timestamp(timestamp1
, sizeof(timestamp1
), u
->condition_timestamp
.realtime
)),
967 prefix
, yes_no(u
->condition_result
));
969 if (dual_timestamp_is_set(&u
->assert_timestamp
))
971 "%s\tAssert Timestamp: %s\n"
972 "%s\tAssert Result: %s\n",
973 prefix
, strna(format_timestamp(timestamp1
, sizeof(timestamp1
), u
->assert_timestamp
.realtime
)),
974 prefix
, yes_no(u
->assert_result
));
976 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++) {
979 SET_FOREACH(other
, u
->dependencies
[d
], i
)
980 fprintf(f
, "%s\t%s: %s\n", prefix
, unit_dependency_to_string(d
), other
->id
);
983 if (!strv_isempty(u
->requires_mounts_for
)) {
985 "%s\tRequiresMountsFor:", prefix
);
987 STRV_FOREACH(j
, u
->requires_mounts_for
)
988 fprintf(f
, " %s", *j
);
993 if (u
->load_state
== UNIT_LOADED
) {
996 "%s\tStopWhenUnneeded: %s\n"
997 "%s\tRefuseManualStart: %s\n"
998 "%s\tRefuseManualStop: %s\n"
999 "%s\tDefaultDependencies: %s\n"
1000 "%s\tOnFailureJobMode: %s\n"
1001 "%s\tIgnoreOnIsolate: %s\n",
1002 prefix
, yes_no(u
->stop_when_unneeded
),
1003 prefix
, yes_no(u
->refuse_manual_start
),
1004 prefix
, yes_no(u
->refuse_manual_stop
),
1005 prefix
, yes_no(u
->default_dependencies
),
1006 prefix
, job_mode_to_string(u
->on_failure_job_mode
),
1007 prefix
, yes_no(u
->ignore_on_isolate
));
1009 if (UNIT_VTABLE(u
)->dump
)
1010 UNIT_VTABLE(u
)->dump(u
, f
, prefix2
);
1012 } else if (u
->load_state
== UNIT_MERGED
)
1014 "%s\tMerged into: %s\n",
1015 prefix
, u
->merged_into
->id
);
1016 else if (u
->load_state
== UNIT_ERROR
)
1017 fprintf(f
, "%s\tLoad Error Code: %s\n", prefix
, strerror(-u
->load_error
));
1021 job_dump(u
->job
, f
, prefix2
);
1024 job_dump(u
->nop_job
, f
, prefix2
);
1028 /* Common implementation for multiple backends */
1029 int unit_load_fragment_and_dropin(Unit
*u
) {
1034 /* Load a .{service,socket,...} file */
1035 r
= unit_load_fragment(u
);
1039 if (u
->load_state
== UNIT_STUB
)
1042 /* Load drop-in directory data */
1043 r
= unit_load_dropin(unit_follow_merge(u
));
1050 /* Common implementation for multiple backends */
1051 int unit_load_fragment_and_dropin_optional(Unit
*u
) {
1056 /* Same as unit_load_fragment_and_dropin(), but whether
1057 * something can be loaded or not doesn't matter. */
1059 /* Load a .service file */
1060 r
= unit_load_fragment(u
);
1064 if (u
->load_state
== UNIT_STUB
)
1065 u
->load_state
= UNIT_LOADED
;
1067 /* Load drop-in directory data */
1068 r
= unit_load_dropin(unit_follow_merge(u
));
1075 int unit_add_default_target_dependency(Unit
*u
, Unit
*target
) {
1079 if (target
->type
!= UNIT_TARGET
)
1082 /* Only add the dependency if both units are loaded, so that
1083 * that loop check below is reliable */
1084 if (u
->load_state
!= UNIT_LOADED
||
1085 target
->load_state
!= UNIT_LOADED
)
1088 /* If either side wants no automatic dependencies, then let's
1090 if (!u
->default_dependencies
||
1091 !target
->default_dependencies
)
1094 /* Don't create loops */
1095 if (set_get(target
->dependencies
[UNIT_BEFORE
], u
))
1098 return unit_add_dependency(target
, UNIT_AFTER
, u
, true);
1101 static int unit_add_target_dependencies(Unit
*u
) {
1103 static const UnitDependency deps
[] = {
1117 for (k
= 0; k
< ELEMENTSOF(deps
); k
++)
1118 SET_FOREACH(target
, u
->dependencies
[deps
[k
]], i
) {
1119 r
= unit_add_default_target_dependency(u
, target
);
1127 static int unit_add_slice_dependencies(Unit
*u
) {
1130 if (!UNIT_HAS_CGROUP_CONTEXT(u
))
1133 if (UNIT_ISSET(u
->slice
))
1134 return unit_add_two_dependencies(u
, UNIT_AFTER
, UNIT_REQUIRES
, UNIT_DEREF(u
->slice
), true);
1136 if (unit_has_name(u
, SPECIAL_ROOT_SLICE
))
1139 return unit_add_two_dependencies_by_name(u
, UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_ROOT_SLICE
, NULL
, true);
1142 static int unit_add_mount_dependencies(Unit
*u
) {
1148 STRV_FOREACH(i
, u
->requires_mounts_for
) {
1149 char prefix
[strlen(*i
) + 1];
1151 PATH_FOREACH_PREFIX_MORE(prefix
, *i
) {
1152 _cleanup_free_
char *p
= NULL
;
1155 r
= unit_name_from_path(prefix
, ".mount", &p
);
1159 m
= manager_get_unit(u
->manager
, p
);
1161 /* Make sure to load the mount unit if
1162 * it exists. If so the dependencies
1163 * on this unit will be added later
1164 * during the loading of the mount
1166 (void) manager_load_unit_prepare(u
->manager
, p
, NULL
, NULL
, &m
);
1172 if (m
->load_state
!= UNIT_LOADED
)
1175 r
= unit_add_dependency(u
, UNIT_AFTER
, m
, true);
1179 if (m
->fragment_path
) {
1180 r
= unit_add_dependency(u
, UNIT_REQUIRES
, m
, true);
1190 static int unit_add_startup_units(Unit
*u
) {
1194 c
= unit_get_cgroup_context(u
);
1198 if (c
->startup_cpu_shares
== CGROUP_CPU_SHARES_INVALID
&&
1199 c
->startup_blockio_weight
== CGROUP_BLKIO_WEIGHT_INVALID
)
1202 r
= set_ensure_allocated(&u
->manager
->startup_units
, NULL
);
1206 return set_put(u
->manager
->startup_units
, u
);
1209 int unit_load(Unit
*u
) {
1214 if (u
->in_load_queue
) {
1215 LIST_REMOVE(load_queue
, u
->manager
->load_queue
, u
);
1216 u
->in_load_queue
= false;
1219 if (u
->type
== _UNIT_TYPE_INVALID
)
1222 if (u
->load_state
!= UNIT_STUB
)
1225 if (UNIT_VTABLE(u
)->load
) {
1226 r
= UNIT_VTABLE(u
)->load(u
);
1231 if (u
->load_state
== UNIT_STUB
) {
1236 if (u
->load_state
== UNIT_LOADED
) {
1238 r
= unit_add_target_dependencies(u
);
1242 r
= unit_add_slice_dependencies(u
);
1246 r
= unit_add_mount_dependencies(u
);
1250 r
= unit_add_startup_units(u
);
1254 if (u
->on_failure_job_mode
== JOB_ISOLATE
&& set_size(u
->dependencies
[UNIT_ON_FAILURE
]) > 1) {
1255 log_unit_error(u
, "More than one OnFailure= dependencies specified but OnFailureJobMode=isolate set. Refusing.");
1260 unit_update_cgroup_members_masks(u
);
1262 /* If we are reloading, we need to wait for the deserializer
1263 * to restore the net_cls ids that have been set previously */
1264 if (u
->manager
->n_reloading
<= 0) {
1265 r
= unit_add_to_netclass_cgroup(u
);
1271 assert((u
->load_state
!= UNIT_MERGED
) == !u
->merged_into
);
1273 unit_add_to_dbus_queue(unit_follow_merge(u
));
1274 unit_add_to_gc_queue(u
);
1279 u
->load_state
= u
->load_state
== UNIT_STUB
? UNIT_NOT_FOUND
: UNIT_ERROR
;
1281 unit_add_to_dbus_queue(u
);
1282 unit_add_to_gc_queue(u
);
1284 log_unit_debug_errno(u
, r
, "Failed to load configuration: %m");
1289 static bool unit_condition_test_list(Unit
*u
, Condition
*first
, const char *(*to_string
)(ConditionType t
)) {
1296 /* If the condition list is empty, then it is true */
1300 /* Otherwise, if all of the non-trigger conditions apply and
1301 * if any of the trigger conditions apply (unless there are
1302 * none) we return true */
1303 LIST_FOREACH(conditions
, c
, first
) {
1306 r
= condition_test(c
);
1309 "Couldn't determine result for %s=%s%s%s, assuming failed: %m",
1311 c
->trigger
? "|" : "",
1312 c
->negate
? "!" : "",
1318 c
->trigger
? "|" : "",
1319 c
->negate
? "!" : "",
1321 condition_result_to_string(c
->result
));
1323 if (!c
->trigger
&& r
<= 0)
1326 if (c
->trigger
&& triggered
<= 0)
1330 return triggered
!= 0;
1333 static bool unit_condition_test(Unit
*u
) {
1336 dual_timestamp_get(&u
->condition_timestamp
);
1337 u
->condition_result
= unit_condition_test_list(u
, u
->conditions
, condition_type_to_string
);
1339 return u
->condition_result
;
1342 static bool unit_assert_test(Unit
*u
) {
1345 dual_timestamp_get(&u
->assert_timestamp
);
1346 u
->assert_result
= unit_condition_test_list(u
, u
->asserts
, assert_type_to_string
);
1348 return u
->assert_result
;
1351 void unit_status_printf(Unit
*u
, const char *status
, const char *unit_status_msg_format
) {
1352 DISABLE_WARNING_FORMAT_NONLITERAL
;
1353 manager_status_printf(u
->manager
, STATUS_TYPE_NORMAL
, status
, unit_status_msg_format
, unit_description(u
));
1357 _pure_
static const char* unit_get_status_message_format(Unit
*u
, JobType t
) {
1359 const UnitStatusMessageFormats
*format_table
;
1362 assert(IN_SET(t
, JOB_START
, JOB_STOP
, JOB_RELOAD
));
1364 if (t
!= JOB_RELOAD
) {
1365 format_table
= &UNIT_VTABLE(u
)->status_message_formats
;
1367 format
= format_table
->starting_stopping
[t
== JOB_STOP
];
1373 /* Return generic strings */
1375 return "Starting %s.";
1376 else if (t
== JOB_STOP
)
1377 return "Stopping %s.";
1379 return "Reloading %s.";
1382 static void unit_status_print_starting_stopping(Unit
*u
, JobType t
) {
1387 /* Reload status messages have traditionally not been printed to console. */
1388 if (!IN_SET(t
, JOB_START
, JOB_STOP
))
1391 format
= unit_get_status_message_format(u
, t
);
1393 DISABLE_WARNING_FORMAT_NONLITERAL
;
1394 unit_status_printf(u
, "", format
);
1398 static void unit_status_log_starting_stopping_reloading(Unit
*u
, JobType t
) {
1405 if (!IN_SET(t
, JOB_START
, JOB_STOP
, JOB_RELOAD
))
1408 if (log_on_console())
1411 /* We log status messages for all units and all operations. */
1413 format
= unit_get_status_message_format(u
, t
);
1415 DISABLE_WARNING_FORMAT_NONLITERAL
;
1416 xsprintf(buf
, format
, unit_description(u
));
1419 mid
= t
== JOB_START
? SD_MESSAGE_UNIT_STARTING
:
1420 t
== JOB_STOP
? SD_MESSAGE_UNIT_STOPPING
:
1421 SD_MESSAGE_UNIT_RELOADING
;
1423 /* Note that we deliberately use LOG_MESSAGE() instead of
1424 * LOG_UNIT_MESSAGE() here, since this is supposed to mimic
1425 * closely what is written to screen using the status output,
1426 * which is supposed the highest level, friendliest output
1427 * possible, which means we should avoid the low-level unit
1429 log_struct(LOG_INFO
,
1430 LOG_MESSAGE_ID(mid
),
1432 LOG_MESSAGE("%s", buf
),
1436 void unit_status_emit_starting_stopping_reloading(Unit
*u
, JobType t
) {
1439 assert(t
< _JOB_TYPE_MAX
);
1441 unit_status_log_starting_stopping_reloading(u
, t
);
1442 unit_status_print_starting_stopping(u
, t
);
1446 * -EBADR: This unit type does not support starting.
1447 * -EALREADY: Unit is already started.
1448 * -EAGAIN: An operation is already in progress. Retry later.
1449 * -ECANCELED: Too many requests for now.
1450 * -EPROTO: Assert failed
1452 int unit_start(Unit
*u
) {
1453 UnitActiveState state
;
1458 /* Units that aren't loaded cannot be started */
1459 if (u
->load_state
!= UNIT_LOADED
)
1462 /* If this is already started, then this will succeed. Note
1463 * that this will even succeed if this unit is not startable
1464 * by the user. This is relied on to detect when we need to
1465 * wait for units and when waiting is finished. */
1466 state
= unit_active_state(u
);
1467 if (UNIT_IS_ACTIVE_OR_RELOADING(state
))
1470 /* If the conditions failed, don't do anything at all. If we
1471 * already are activating this call might still be useful to
1472 * speed up activation in case there is some hold-off time,
1473 * but we don't want to recheck the condition in that case. */
1474 if (state
!= UNIT_ACTIVATING
&&
1475 !unit_condition_test(u
)) {
1476 log_unit_debug(u
, "Starting requested but condition failed. Not starting unit.");
1480 /* If the asserts failed, fail the entire job */
1481 if (state
!= UNIT_ACTIVATING
&&
1482 !unit_assert_test(u
)) {
1483 log_unit_notice(u
, "Starting requested but asserts failed.");
1487 /* Units of types that aren't supported cannot be
1488 * started. Note that we do this test only after the condition
1489 * checks, so that we rather return condition check errors
1490 * (which are usually not considered a true failure) than "not
1491 * supported" errors (which are considered a failure).
1493 if (!unit_supported(u
))
1496 /* Forward to the main object, if we aren't it. */
1497 following
= unit_following(u
);
1499 log_unit_debug(u
, "Redirecting start request from %s to %s.", u
->id
, following
->id
);
1500 return unit_start(following
);
1503 /* If it is stopped, but we cannot start it, then fail */
1504 if (!UNIT_VTABLE(u
)->start
)
1507 /* We don't suppress calls to ->start() here when we are
1508 * already starting, to allow this request to be used as a
1509 * "hurry up" call, for example when the unit is in some "auto
1510 * restart" state where it waits for a holdoff timer to elapse
1511 * before it will start again. */
1513 unit_add_to_dbus_queue(u
);
1515 return UNIT_VTABLE(u
)->start(u
);
1518 bool unit_can_start(Unit
*u
) {
1521 if (u
->load_state
!= UNIT_LOADED
)
1524 if (!unit_supported(u
))
1527 return !!UNIT_VTABLE(u
)->start
;
1530 bool unit_can_isolate(Unit
*u
) {
1533 return unit_can_start(u
) &&
1538 * -EBADR: This unit type does not support stopping.
1539 * -EALREADY: Unit is already stopped.
1540 * -EAGAIN: An operation is already in progress. Retry later.
1542 int unit_stop(Unit
*u
) {
1543 UnitActiveState state
;
1548 state
= unit_active_state(u
);
1549 if (UNIT_IS_INACTIVE_OR_FAILED(state
))
1552 following
= unit_following(u
);
1554 log_unit_debug(u
, "Redirecting stop request from %s to %s.", u
->id
, following
->id
);
1555 return unit_stop(following
);
1558 if (!UNIT_VTABLE(u
)->stop
)
1561 unit_add_to_dbus_queue(u
);
1563 return UNIT_VTABLE(u
)->stop(u
);
1567 * -EBADR: This unit type does not support reloading.
1568 * -ENOEXEC: Unit is not started.
1569 * -EAGAIN: An operation is already in progress. Retry later.
1571 int unit_reload(Unit
*u
) {
1572 UnitActiveState state
;
1577 if (u
->load_state
!= UNIT_LOADED
)
1580 if (!unit_can_reload(u
))
1583 state
= unit_active_state(u
);
1584 if (state
== UNIT_RELOADING
)
1587 if (state
!= UNIT_ACTIVE
) {
1588 log_unit_warning(u
, "Unit cannot be reloaded because it is inactive.");
1592 following
= unit_following(u
);
1594 log_unit_debug(u
, "Redirecting reload request from %s to %s.", u
->id
, following
->id
);
1595 return unit_reload(following
);
1598 unit_add_to_dbus_queue(u
);
1600 return UNIT_VTABLE(u
)->reload(u
);
1603 bool unit_can_reload(Unit
*u
) {
1606 if (!UNIT_VTABLE(u
)->reload
)
1609 if (!UNIT_VTABLE(u
)->can_reload
)
1612 return UNIT_VTABLE(u
)->can_reload(u
);
1615 static void unit_check_unneeded(Unit
*u
) {
1617 _cleanup_(sd_bus_error_free
) sd_bus_error error
= SD_BUS_ERROR_NULL
;
1619 static const UnitDependency needed_dependencies
[] = {
1633 /* If this service shall be shut down when unneeded then do
1636 if (!u
->stop_when_unneeded
)
1639 if (!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u
)))
1642 for (j
= 0; j
< ELEMENTSOF(needed_dependencies
); j
++)
1643 SET_FOREACH(other
, u
->dependencies
[needed_dependencies
[j
]], i
)
1644 if (unit_active_or_pending(other
))
1647 /* If stopping a unit fails continously we might enter a stop
1648 * loop here, hence stop acting on the service being
1649 * unnecessary after a while. */
1650 if (!ratelimit_test(&u
->auto_stop_ratelimit
)) {
1651 log_unit_warning(u
, "Unit not needed anymore, but not stopping since we tried this too often recently.");
1655 log_unit_info(u
, "Unit not needed anymore. Stopping.");
1657 /* Ok, nobody needs us anymore. Sniff. Then let's commit suicide */
1658 r
= manager_add_job(u
->manager
, JOB_STOP
, u
, JOB_FAIL
, &error
, NULL
);
1660 log_unit_warning_errno(u
, r
, "Failed to enqueue stop job, ignoring: %s", bus_error_message(&error
, r
));
1663 static void unit_check_binds_to(Unit
*u
) {
1664 _cleanup_(sd_bus_error_free
) sd_bus_error error
= SD_BUS_ERROR_NULL
;
1675 if (unit_active_state(u
) != UNIT_ACTIVE
)
1678 SET_FOREACH(other
, u
->dependencies
[UNIT_BINDS_TO
], i
) {
1682 if (!UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(other
)))
1692 /* If stopping a unit fails continously we might enter a stop
1693 * loop here, hence stop acting on the service being
1694 * unnecessary after a while. */
1695 if (!ratelimit_test(&u
->auto_stop_ratelimit
)) {
1696 log_unit_warning(u
, "Unit is bound to inactive unit %s, but not stopping since we tried this too often recently.", other
->id
);
1701 log_unit_info(u
, "Unit is bound to inactive unit %s. Stopping, too.", other
->id
);
1703 /* A unit we need to run is gone. Sniff. Let's stop this. */
1704 r
= manager_add_job(u
->manager
, JOB_STOP
, u
, JOB_FAIL
, &error
, NULL
);
1706 log_unit_warning_errno(u
, r
, "Failed to enqueue stop job, ignoring: %s", bus_error_message(&error
, r
));
1709 static void retroactively_start_dependencies(Unit
*u
) {
1714 assert(UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u
)));
1716 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUIRES
], i
)
1717 if (!set_get(u
->dependencies
[UNIT_AFTER
], other
) &&
1718 !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other
)))
1719 manager_add_job(u
->manager
, JOB_START
, other
, JOB_REPLACE
, NULL
, NULL
);
1721 SET_FOREACH(other
, u
->dependencies
[UNIT_BINDS_TO
], i
)
1722 if (!set_get(u
->dependencies
[UNIT_AFTER
], other
) &&
1723 !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other
)))
1724 manager_add_job(u
->manager
, JOB_START
, other
, JOB_REPLACE
, NULL
, NULL
);
1726 SET_FOREACH(other
, u
->dependencies
[UNIT_WANTS
], i
)
1727 if (!set_get(u
->dependencies
[UNIT_AFTER
], other
) &&
1728 !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other
)))
1729 manager_add_job(u
->manager
, JOB_START
, other
, JOB_FAIL
, NULL
, NULL
);
1731 SET_FOREACH(other
, u
->dependencies
[UNIT_CONFLICTS
], i
)
1732 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1733 manager_add_job(u
->manager
, JOB_STOP
, other
, JOB_REPLACE
, NULL
, NULL
);
1735 SET_FOREACH(other
, u
->dependencies
[UNIT_CONFLICTED_BY
], i
)
1736 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1737 manager_add_job(u
->manager
, JOB_STOP
, other
, JOB_REPLACE
, NULL
, NULL
);
1740 static void retroactively_stop_dependencies(Unit
*u
) {
1745 assert(UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(u
)));
1747 /* Pull down units which are bound to us recursively if enabled */
1748 SET_FOREACH(other
, u
->dependencies
[UNIT_BOUND_BY
], i
)
1749 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1750 manager_add_job(u
->manager
, JOB_STOP
, other
, JOB_REPLACE
, NULL
, NULL
);
1753 static void check_unneeded_dependencies(Unit
*u
) {
1758 assert(UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(u
)));
1760 /* Garbage collect services that might not be needed anymore, if enabled */
1761 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUIRES
], i
)
1762 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1763 unit_check_unneeded(other
);
1764 SET_FOREACH(other
, u
->dependencies
[UNIT_WANTS
], i
)
1765 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1766 unit_check_unneeded(other
);
1767 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUISITE
], i
)
1768 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1769 unit_check_unneeded(other
);
1770 SET_FOREACH(other
, u
->dependencies
[UNIT_BINDS_TO
], i
)
1771 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1772 unit_check_unneeded(other
);
1775 void unit_start_on_failure(Unit
*u
) {
1781 if (set_size(u
->dependencies
[UNIT_ON_FAILURE
]) <= 0)
1784 log_unit_info(u
, "Triggering OnFailure= dependencies.");
1786 SET_FOREACH(other
, u
->dependencies
[UNIT_ON_FAILURE
], i
) {
1789 r
= manager_add_job(u
->manager
, JOB_START
, other
, u
->on_failure_job_mode
, NULL
, NULL
);
1791 log_unit_error_errno(u
, r
, "Failed to enqueue OnFailure= job: %m");
1795 void unit_trigger_notify(Unit
*u
) {
1801 SET_FOREACH(other
, u
->dependencies
[UNIT_TRIGGERED_BY
], i
)
1802 if (UNIT_VTABLE(other
)->trigger_notify
)
1803 UNIT_VTABLE(other
)->trigger_notify(other
, u
);
1806 void unit_notify(Unit
*u
, UnitActiveState os
, UnitActiveState ns
, bool reload_success
) {
1811 assert(os
< _UNIT_ACTIVE_STATE_MAX
);
1812 assert(ns
< _UNIT_ACTIVE_STATE_MAX
);
1814 /* Note that this is called for all low-level state changes,
1815 * even if they might map to the same high-level
1816 * UnitActiveState! That means that ns == os is an expected
1817 * behavior here. For example: if a mount point is remounted
1818 * this function will be called too! */
1822 /* Update timestamps for state changes */
1823 if (m
->n_reloading
<= 0) {
1826 dual_timestamp_get(&ts
);
1828 if (UNIT_IS_INACTIVE_OR_FAILED(os
) && !UNIT_IS_INACTIVE_OR_FAILED(ns
))
1829 u
->inactive_exit_timestamp
= ts
;
1830 else if (!UNIT_IS_INACTIVE_OR_FAILED(os
) && UNIT_IS_INACTIVE_OR_FAILED(ns
))
1831 u
->inactive_enter_timestamp
= ts
;
1833 if (!UNIT_IS_ACTIVE_OR_RELOADING(os
) && UNIT_IS_ACTIVE_OR_RELOADING(ns
))
1834 u
->active_enter_timestamp
= ts
;
1835 else if (UNIT_IS_ACTIVE_OR_RELOADING(os
) && !UNIT_IS_ACTIVE_OR_RELOADING(ns
))
1836 u
->active_exit_timestamp
= ts
;
1839 /* Keep track of failed units */
1840 (void) manager_update_failed_units(u
->manager
, u
, ns
== UNIT_FAILED
);
1842 /* Make sure the cgroup is always removed when we become inactive */
1843 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1844 unit_prune_cgroup(u
);
1846 /* Note that this doesn't apply to RemainAfterExit services exiting
1847 * successfully, since there's no change of state in that case. Which is
1848 * why it is handled in service_set_state() */
1849 if (UNIT_IS_INACTIVE_OR_FAILED(os
) != UNIT_IS_INACTIVE_OR_FAILED(ns
)) {
1852 ec
= unit_get_exec_context(u
);
1853 if (ec
&& exec_context_may_touch_console(ec
)) {
1854 if (UNIT_IS_INACTIVE_OR_FAILED(ns
)) {
1857 if (m
->n_on_console
== 0)
1858 /* unset no_console_output flag, since the console is free */
1859 m
->no_console_output
= false;
1868 if (u
->job
->state
== JOB_WAITING
)
1870 /* So we reached a different state for this
1871 * job. Let's see if we can run it now if it
1872 * failed previously due to EAGAIN. */
1873 job_add_to_run_queue(u
->job
);
1875 /* Let's check whether this state change constitutes a
1876 * finished job, or maybe contradicts a running job and
1877 * hence needs to invalidate jobs. */
1879 switch (u
->job
->type
) {
1882 case JOB_VERIFY_ACTIVE
:
1884 if (UNIT_IS_ACTIVE_OR_RELOADING(ns
))
1885 job_finish_and_invalidate(u
->job
, JOB_DONE
, true);
1886 else if (u
->job
->state
== JOB_RUNNING
&& ns
!= UNIT_ACTIVATING
) {
1889 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1890 job_finish_and_invalidate(u
->job
, ns
== UNIT_FAILED
? JOB_FAILED
: JOB_DONE
, true);
1896 case JOB_RELOAD_OR_START
:
1898 if (u
->job
->state
== JOB_RUNNING
) {
1899 if (ns
== UNIT_ACTIVE
)
1900 job_finish_and_invalidate(u
->job
, reload_success
? JOB_DONE
: JOB_FAILED
, true);
1901 else if (ns
!= UNIT_ACTIVATING
&& ns
!= UNIT_RELOADING
) {
1904 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1905 job_finish_and_invalidate(u
->job
, ns
== UNIT_FAILED
? JOB_FAILED
: JOB_DONE
, true);
1913 case JOB_TRY_RESTART
:
1915 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1916 job_finish_and_invalidate(u
->job
, JOB_DONE
, true);
1917 else if (u
->job
->state
== JOB_RUNNING
&& ns
!= UNIT_DEACTIVATING
) {
1919 job_finish_and_invalidate(u
->job
, JOB_FAILED
, true);
1925 assert_not_reached("Job type unknown");
1931 if (m
->n_reloading
<= 0) {
1933 /* If this state change happened without being
1934 * requested by a job, then let's retroactively start
1935 * or stop dependencies. We skip that step when
1936 * deserializing, since we don't want to create any
1937 * additional jobs just because something is already
1941 if (UNIT_IS_INACTIVE_OR_FAILED(os
) && UNIT_IS_ACTIVE_OR_ACTIVATING(ns
))
1942 retroactively_start_dependencies(u
);
1943 else if (UNIT_IS_ACTIVE_OR_ACTIVATING(os
) && UNIT_IS_INACTIVE_OR_DEACTIVATING(ns
))
1944 retroactively_stop_dependencies(u
);
1947 /* stop unneeded units regardless if going down was expected or not */
1948 if (UNIT_IS_INACTIVE_OR_DEACTIVATING(ns
))
1949 check_unneeded_dependencies(u
);
1951 if (ns
!= os
&& ns
== UNIT_FAILED
) {
1952 log_unit_notice(u
, "Unit entered failed state.");
1953 unit_start_on_failure(u
);
1957 /* Some names are special */
1958 if (UNIT_IS_ACTIVE_OR_RELOADING(ns
)) {
1960 if (unit_has_name(u
, SPECIAL_DBUS_SERVICE
))
1961 /* The bus might have just become available,
1962 * hence try to connect to it, if we aren't
1966 if (u
->type
== UNIT_SERVICE
&&
1967 !UNIT_IS_ACTIVE_OR_RELOADING(os
) &&
1968 m
->n_reloading
<= 0) {
1969 /* Write audit record if we have just finished starting up */
1970 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_START
, true);
1974 if (!UNIT_IS_ACTIVE_OR_RELOADING(os
))
1975 manager_send_unit_plymouth(m
, u
);
1979 /* We don't care about D-Bus here, since we'll get an
1980 * asynchronous notification for it anyway. */
1982 if (u
->type
== UNIT_SERVICE
&&
1983 UNIT_IS_INACTIVE_OR_FAILED(ns
) &&
1984 !UNIT_IS_INACTIVE_OR_FAILED(os
) &&
1985 m
->n_reloading
<= 0) {
1987 /* Hmm, if there was no start record written
1988 * write it now, so that we always have a nice
1991 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_START
, ns
== UNIT_INACTIVE
);
1993 if (ns
== UNIT_INACTIVE
)
1994 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_STOP
, true);
1996 /* Write audit record if we have just finished shutting down */
1997 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_STOP
, ns
== UNIT_INACTIVE
);
1999 u
->in_audit
= false;
2003 manager_recheck_journal(m
);
2004 unit_trigger_notify(u
);
2006 if (u
->manager
->n_reloading
<= 0) {
2007 /* Maybe we finished startup and are now ready for
2008 * being stopped because unneeded? */
2009 unit_check_unneeded(u
);
2011 /* Maybe we finished startup, but something we needed
2012 * has vanished? Let's die then. (This happens when
2013 * something BindsTo= to a Type=oneshot unit, as these
2014 * units go directly from starting to inactive,
2015 * without ever entering started.) */
2016 unit_check_binds_to(u
);
2019 unit_add_to_dbus_queue(u
);
2020 unit_add_to_gc_queue(u
);
2023 int unit_watch_pid(Unit
*u
, pid_t pid
) {
2029 /* Watch a specific PID. We only support one or two units
2030 * watching each PID for now, not more. */
2032 r
= set_ensure_allocated(&u
->pids
, NULL
);
2036 r
= hashmap_ensure_allocated(&u
->manager
->watch_pids1
, NULL
);
2040 r
= hashmap_put(u
->manager
->watch_pids1
, PID_TO_PTR(pid
), u
);
2042 r
= hashmap_ensure_allocated(&u
->manager
->watch_pids2
, NULL
);
2046 r
= hashmap_put(u
->manager
->watch_pids2
, PID_TO_PTR(pid
), u
);
2049 q
= set_put(u
->pids
, PID_TO_PTR(pid
));
2056 void unit_unwatch_pid(Unit
*u
, pid_t pid
) {
2060 (void) hashmap_remove_value(u
->manager
->watch_pids1
, PID_TO_PTR(pid
), u
);
2061 (void) hashmap_remove_value(u
->manager
->watch_pids2
, PID_TO_PTR(pid
), u
);
2062 (void) set_remove(u
->pids
, PID_TO_PTR(pid
));
2065 void unit_unwatch_all_pids(Unit
*u
) {
2068 while (!set_isempty(u
->pids
))
2069 unit_unwatch_pid(u
, PTR_TO_PID(set_first(u
->pids
)));
2071 u
->pids
= set_free(u
->pids
);
2074 void unit_tidy_watch_pids(Unit
*u
, pid_t except1
, pid_t except2
) {
2080 /* Cleans dead PIDs from our list */
2082 SET_FOREACH(e
, u
->pids
, i
) {
2083 pid_t pid
= PTR_TO_PID(e
);
2085 if (pid
== except1
|| pid
== except2
)
2088 if (!pid_is_unwaited(pid
))
2089 unit_unwatch_pid(u
, pid
);
2093 bool unit_job_is_applicable(Unit
*u
, JobType j
) {
2095 assert(j
>= 0 && j
< _JOB_TYPE_MAX
);
2099 case JOB_VERIFY_ACTIVE
:
2106 case JOB_TRY_RESTART
:
2107 return unit_can_start(u
);
2110 return unit_can_reload(u
);
2112 case JOB_RELOAD_OR_START
:
2113 return unit_can_reload(u
) && unit_can_start(u
);
2116 assert_not_reached("Invalid job type");
2120 static void maybe_warn_about_dependency(Unit
*u
, const char *other
, UnitDependency dependency
) {
2123 /* Only warn about some unit types */
2124 if (!IN_SET(dependency
, UNIT_CONFLICTS
, UNIT_CONFLICTED_BY
, UNIT_BEFORE
, UNIT_AFTER
, UNIT_ON_FAILURE
, UNIT_TRIGGERS
, UNIT_TRIGGERED_BY
))
2127 if (streq_ptr(u
->id
, other
))
2128 log_unit_warning(u
, "Dependency %s=%s dropped", unit_dependency_to_string(dependency
), u
->id
);
2130 log_unit_warning(u
, "Dependency %s=%s dropped, merged into %s", unit_dependency_to_string(dependency
), strna(other
), u
->id
);
2133 int unit_add_dependency(Unit
*u
, UnitDependency d
, Unit
*other
, bool add_reference
) {
2135 static const UnitDependency inverse_table
[_UNIT_DEPENDENCY_MAX
] = {
2136 [UNIT_REQUIRES
] = UNIT_REQUIRED_BY
,
2137 [UNIT_WANTS
] = UNIT_WANTED_BY
,
2138 [UNIT_REQUISITE
] = UNIT_REQUISITE_OF
,
2139 [UNIT_BINDS_TO
] = UNIT_BOUND_BY
,
2140 [UNIT_PART_OF
] = UNIT_CONSISTS_OF
,
2141 [UNIT_REQUIRED_BY
] = UNIT_REQUIRES
,
2142 [UNIT_REQUISITE_OF
] = UNIT_REQUISITE
,
2143 [UNIT_WANTED_BY
] = UNIT_WANTS
,
2144 [UNIT_BOUND_BY
] = UNIT_BINDS_TO
,
2145 [UNIT_CONSISTS_OF
] = UNIT_PART_OF
,
2146 [UNIT_CONFLICTS
] = UNIT_CONFLICTED_BY
,
2147 [UNIT_CONFLICTED_BY
] = UNIT_CONFLICTS
,
2148 [UNIT_BEFORE
] = UNIT_AFTER
,
2149 [UNIT_AFTER
] = UNIT_BEFORE
,
2150 [UNIT_ON_FAILURE
] = _UNIT_DEPENDENCY_INVALID
,
2151 [UNIT_REFERENCES
] = UNIT_REFERENCED_BY
,
2152 [UNIT_REFERENCED_BY
] = UNIT_REFERENCES
,
2153 [UNIT_TRIGGERS
] = UNIT_TRIGGERED_BY
,
2154 [UNIT_TRIGGERED_BY
] = UNIT_TRIGGERS
,
2155 [UNIT_PROPAGATES_RELOAD_TO
] = UNIT_RELOAD_PROPAGATED_FROM
,
2156 [UNIT_RELOAD_PROPAGATED_FROM
] = UNIT_PROPAGATES_RELOAD_TO
,
2157 [UNIT_JOINS_NAMESPACE_OF
] = UNIT_JOINS_NAMESPACE_OF
,
2159 int r
, q
= 0, v
= 0, w
= 0;
2160 Unit
*orig_u
= u
, *orig_other
= other
;
2163 assert(d
>= 0 && d
< _UNIT_DEPENDENCY_MAX
);
2166 u
= unit_follow_merge(u
);
2167 other
= unit_follow_merge(other
);
2169 /* We won't allow dependencies on ourselves. We will not
2170 * consider them an error however. */
2172 maybe_warn_about_dependency(orig_u
, orig_other
->id
, d
);
2176 r
= set_ensure_allocated(&u
->dependencies
[d
], NULL
);
2180 if (inverse_table
[d
] != _UNIT_DEPENDENCY_INVALID
) {
2181 r
= set_ensure_allocated(&other
->dependencies
[inverse_table
[d
]], NULL
);
2186 if (add_reference
) {
2187 r
= set_ensure_allocated(&u
->dependencies
[UNIT_REFERENCES
], NULL
);
2191 r
= set_ensure_allocated(&other
->dependencies
[UNIT_REFERENCED_BY
], NULL
);
2196 q
= set_put(u
->dependencies
[d
], other
);
2200 if (inverse_table
[d
] != _UNIT_DEPENDENCY_INVALID
&& inverse_table
[d
] != d
) {
2201 v
= set_put(other
->dependencies
[inverse_table
[d
]], u
);
2208 if (add_reference
) {
2209 w
= set_put(u
->dependencies
[UNIT_REFERENCES
], other
);
2215 r
= set_put(other
->dependencies
[UNIT_REFERENCED_BY
], u
);
2220 unit_add_to_dbus_queue(u
);
2225 set_remove(u
->dependencies
[d
], other
);
2228 set_remove(other
->dependencies
[inverse_table
[d
]], u
);
2231 set_remove(u
->dependencies
[UNIT_REFERENCES
], other
);
2236 int unit_add_two_dependencies(Unit
*u
, UnitDependency d
, UnitDependency e
, Unit
*other
, bool add_reference
) {
2241 r
= unit_add_dependency(u
, d
, other
, add_reference
);
2245 return unit_add_dependency(u
, e
, other
, add_reference
);
2248 static int resolve_template(Unit
*u
, const char *name
, const char*path
, char **buf
, const char **ret
) {
2252 assert(name
|| path
);
2257 name
= basename(path
);
2259 if (!unit_name_is_valid(name
, UNIT_NAME_TEMPLATE
)) {
2266 r
= unit_name_replace_instance(name
, u
->instance
, buf
);
2268 _cleanup_free_
char *i
= NULL
;
2270 r
= unit_name_to_prefix(u
->id
, &i
);
2274 r
= unit_name_replace_instance(name
, i
, buf
);
2283 int unit_add_dependency_by_name(Unit
*u
, UnitDependency d
, const char *name
, const char *path
, bool add_reference
) {
2284 _cleanup_free_
char *buf
= NULL
;
2289 assert(name
|| path
);
2291 r
= resolve_template(u
, name
, path
, &buf
, &name
);
2295 r
= manager_load_unit(u
->manager
, name
, path
, NULL
, &other
);
2299 return unit_add_dependency(u
, d
, other
, add_reference
);
2302 int unit_add_two_dependencies_by_name(Unit
*u
, UnitDependency d
, UnitDependency e
, const char *name
, const char *path
, bool add_reference
) {
2303 _cleanup_free_
char *buf
= NULL
;
2308 assert(name
|| path
);
2310 r
= resolve_template(u
, name
, path
, &buf
, &name
);
2314 r
= manager_load_unit(u
->manager
, name
, path
, NULL
, &other
);
2318 return unit_add_two_dependencies(u
, d
, e
, other
, add_reference
);
2321 int set_unit_path(const char *p
) {
2322 /* This is mostly for debug purposes */
2323 if (setenv("SYSTEMD_UNIT_PATH", p
, 1) < 0)
2329 char *unit_dbus_path(Unit
*u
) {
2335 return unit_dbus_path_from_name(u
->id
);
2338 int unit_set_slice(Unit
*u
, Unit
*slice
) {
2342 /* Sets the unit slice if it has not been set before. Is extra
2343 * careful, to only allow this for units that actually have a
2344 * cgroup context. Also, we don't allow to set this for slices
2345 * (since the parent slice is derived from the name). Make
2346 * sure the unit we set is actually a slice. */
2348 if (!UNIT_HAS_CGROUP_CONTEXT(u
))
2351 if (u
->type
== UNIT_SLICE
)
2354 if (unit_active_state(u
) != UNIT_INACTIVE
)
2357 if (slice
->type
!= UNIT_SLICE
)
2360 if (unit_has_name(u
, SPECIAL_INIT_SCOPE
) &&
2361 !unit_has_name(slice
, SPECIAL_ROOT_SLICE
))
2364 if (UNIT_DEREF(u
->slice
) == slice
)
2367 if (UNIT_ISSET(u
->slice
))
2370 unit_ref_set(&u
->slice
, slice
);
2374 int unit_set_default_slice(Unit
*u
) {
2375 _cleanup_free_
char *b
= NULL
;
2376 const char *slice_name
;
2382 if (UNIT_ISSET(u
->slice
))
2386 _cleanup_free_
char *prefix
= NULL
, *escaped
= NULL
;
2388 /* Implicitly place all instantiated units in their
2389 * own per-template slice */
2391 r
= unit_name_to_prefix(u
->id
, &prefix
);
2395 /* The prefix is already escaped, but it might include
2396 * "-" which has a special meaning for slice units,
2397 * hence escape it here extra. */
2398 escaped
= unit_name_escape(prefix
);
2402 if (u
->manager
->running_as
== MANAGER_SYSTEM
)
2403 b
= strjoin("system-", escaped
, ".slice", NULL
);
2405 b
= strappend(escaped
, ".slice");
2412 u
->manager
->running_as
== MANAGER_SYSTEM
&& !unit_has_name(u
, SPECIAL_INIT_SCOPE
)
2413 ? SPECIAL_SYSTEM_SLICE
2414 : SPECIAL_ROOT_SLICE
;
2416 r
= manager_load_unit(u
->manager
, slice_name
, NULL
, NULL
, &slice
);
2420 return unit_set_slice(u
, slice
);
2423 const char *unit_slice_name(Unit
*u
) {
2426 if (!UNIT_ISSET(u
->slice
))
2429 return UNIT_DEREF(u
->slice
)->id
;
2432 int unit_load_related_unit(Unit
*u
, const char *type
, Unit
**_found
) {
2433 _cleanup_free_
char *t
= NULL
;
2440 r
= unit_name_change_suffix(u
->id
, type
, &t
);
2443 if (unit_has_name(u
, t
))
2446 r
= manager_load_unit(u
->manager
, t
, NULL
, NULL
, _found
);
2447 assert(r
< 0 || *_found
!= u
);
2451 static int signal_name_owner_changed(sd_bus_message
*message
, void *userdata
, sd_bus_error
*error
) {
2452 const char *name
, *old_owner
, *new_owner
;
2459 r
= sd_bus_message_read(message
, "sss", &name
, &old_owner
, &new_owner
);
2461 bus_log_parse_error(r
);
2465 if (UNIT_VTABLE(u
)->bus_name_owner_change
)
2466 UNIT_VTABLE(u
)->bus_name_owner_change(u
, name
, old_owner
, new_owner
);
2471 int unit_install_bus_match(Unit
*u
, sd_bus
*bus
, const char *name
) {
2478 if (u
->match_bus_slot
)
2481 match
= strjoina("type='signal',"
2482 "sender='org.freedesktop.DBus',"
2483 "path='/org/freedesktop/DBus',"
2484 "interface='org.freedesktop.DBus',"
2485 "member='NameOwnerChanged',"
2486 "arg0='", name
, "'",
2489 return sd_bus_add_match(bus
, &u
->match_bus_slot
, match
, signal_name_owner_changed
, u
);
2492 int unit_watch_bus_name(Unit
*u
, const char *name
) {
2498 /* Watch a specific name on the bus. We only support one unit
2499 * watching each name for now. */
2501 if (u
->manager
->api_bus
) {
2502 /* If the bus is already available, install the match directly.
2503 * Otherwise, just put the name in the list. bus_setup_api() will take care later. */
2504 r
= unit_install_bus_match(u
, u
->manager
->api_bus
, name
);
2506 return log_warning_errno(r
, "Failed to subscribe to NameOwnerChanged signal for '%s': %m", name
);
2509 r
= hashmap_put(u
->manager
->watch_bus
, name
, u
);
2511 u
->match_bus_slot
= sd_bus_slot_unref(u
->match_bus_slot
);
2512 return log_warning_errno(r
, "Failed to put bus name to hashmap: %m");
2518 void unit_unwatch_bus_name(Unit
*u
, const char *name
) {
2522 hashmap_remove_value(u
->manager
->watch_bus
, name
, u
);
2523 u
->match_bus_slot
= sd_bus_slot_unref(u
->match_bus_slot
);
2526 bool unit_can_serialize(Unit
*u
) {
2529 return UNIT_VTABLE(u
)->serialize
&& UNIT_VTABLE(u
)->deserialize_item
;
2532 int unit_serialize(Unit
*u
, FILE *f
, FDSet
*fds
, bool serialize_jobs
) {
2539 if (unit_can_serialize(u
)) {
2542 r
= UNIT_VTABLE(u
)->serialize(u
, f
, fds
);
2546 rt
= unit_get_exec_runtime(u
);
2548 r
= exec_runtime_serialize(u
, rt
, f
, fds
);
2554 dual_timestamp_serialize(f
, "inactive-exit-timestamp", &u
->inactive_exit_timestamp
);
2555 dual_timestamp_serialize(f
, "active-enter-timestamp", &u
->active_enter_timestamp
);
2556 dual_timestamp_serialize(f
, "active-exit-timestamp", &u
->active_exit_timestamp
);
2557 dual_timestamp_serialize(f
, "inactive-enter-timestamp", &u
->inactive_enter_timestamp
);
2558 dual_timestamp_serialize(f
, "condition-timestamp", &u
->condition_timestamp
);
2559 dual_timestamp_serialize(f
, "assert-timestamp", &u
->assert_timestamp
);
2561 if (dual_timestamp_is_set(&u
->condition_timestamp
))
2562 unit_serialize_item(u
, f
, "condition-result", yes_no(u
->condition_result
));
2564 if (dual_timestamp_is_set(&u
->assert_timestamp
))
2565 unit_serialize_item(u
, f
, "assert-result", yes_no(u
->assert_result
));
2567 unit_serialize_item(u
, f
, "transient", yes_no(u
->transient
));
2568 unit_serialize_item_format(u
, f
, "cpuacct-usage-base", "%" PRIu64
, u
->cpuacct_usage_base
);
2571 unit_serialize_item(u
, f
, "cgroup", u
->cgroup_path
);
2572 unit_serialize_item(u
, f
, "cgroup-realized", yes_no(u
->cgroup_realized
));
2574 if (u
->cgroup_netclass_id
)
2575 unit_serialize_item_format(u
, f
, "netclass-id", "%" PRIu32
, u
->cgroup_netclass_id
);
2577 if (serialize_jobs
) {
2579 fprintf(f
, "job\n");
2580 job_serialize(u
->job
, f
, fds
);
2584 fprintf(f
, "job\n");
2585 job_serialize(u
->nop_job
, f
, fds
);
2594 int unit_serialize_item(Unit
*u
, FILE *f
, const char *key
, const char *value
) {
2610 int unit_serialize_item_escaped(Unit
*u
, FILE *f
, const char *key
, const char *value
) {
2611 _cleanup_free_
char *c
= NULL
;
2632 int unit_serialize_item_fd(Unit
*u
, FILE *f
, FDSet
*fds
, const char *key
, int fd
) {
2642 copy
= fdset_put_dup(fds
, fd
);
2646 fprintf(f
, "%s=%i\n", key
, copy
);
2650 void unit_serialize_item_format(Unit
*u
, FILE *f
, const char *key
, const char *format
, ...) {
2661 va_start(ap
, format
);
2662 vfprintf(f
, format
, ap
);
2668 int unit_deserialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
2669 ExecRuntime
**rt
= NULL
;
2677 offset
= UNIT_VTABLE(u
)->exec_runtime_offset
;
2679 rt
= (ExecRuntime
**) ((uint8_t*) u
+ offset
);
2682 char line
[LINE_MAX
], *l
, *v
;
2685 if (!fgets(line
, sizeof(line
), f
)) {
2698 k
= strcspn(l
, "=");
2706 if (streq(l
, "job")) {
2708 /* new-style serialized job */
2715 r
= job_deserialize(j
, f
, fds
);
2721 r
= hashmap_put(u
->manager
->jobs
, UINT32_TO_PTR(j
->id
), j
);
2727 r
= job_install_deserialized(j
);
2729 hashmap_remove(u
->manager
->jobs
, UINT32_TO_PTR(j
->id
));
2733 } else /* legacy for pre-44 */
2734 log_unit_warning(u
, "Update from too old systemd versions are unsupported, cannot deserialize job: %s", v
);
2736 } else if (streq(l
, "inactive-exit-timestamp")) {
2737 dual_timestamp_deserialize(v
, &u
->inactive_exit_timestamp
);
2739 } else if (streq(l
, "active-enter-timestamp")) {
2740 dual_timestamp_deserialize(v
, &u
->active_enter_timestamp
);
2742 } else if (streq(l
, "active-exit-timestamp")) {
2743 dual_timestamp_deserialize(v
, &u
->active_exit_timestamp
);
2745 } else if (streq(l
, "inactive-enter-timestamp")) {
2746 dual_timestamp_deserialize(v
, &u
->inactive_enter_timestamp
);
2748 } else if (streq(l
, "condition-timestamp")) {
2749 dual_timestamp_deserialize(v
, &u
->condition_timestamp
);
2751 } else if (streq(l
, "assert-timestamp")) {
2752 dual_timestamp_deserialize(v
, &u
->assert_timestamp
);
2754 } else if (streq(l
, "condition-result")) {
2756 r
= parse_boolean(v
);
2758 log_unit_debug(u
, "Failed to parse condition result value %s, ignoring.", v
);
2760 u
->condition_result
= r
;
2764 } else if (streq(l
, "assert-result")) {
2766 r
= parse_boolean(v
);
2768 log_unit_debug(u
, "Failed to parse assert result value %s, ignoring.", v
);
2770 u
->assert_result
= r
;
2774 } else if (streq(l
, "transient")) {
2776 r
= parse_boolean(v
);
2778 log_unit_debug(u
, "Failed to parse transient bool %s, ignoring.", v
);
2784 } else if (streq(l
, "cpuacct-usage-base")) {
2786 r
= safe_atou64(v
, &u
->cpuacct_usage_base
);
2788 log_unit_debug(u
, "Failed to parse CPU usage %s, ignoring.", v
);
2792 } else if (streq(l
, "cgroup")) {
2794 r
= unit_set_cgroup_path(u
, v
);
2796 log_unit_debug_errno(u
, r
, "Failed to set cgroup path %s, ignoring: %m", v
);
2798 (void) unit_watch_cgroup(u
);
2801 } else if (streq(l
, "cgroup-realized")) {
2804 b
= parse_boolean(v
);
2806 log_unit_debug(u
, "Failed to parse cgroup-realized bool %s, ignoring.", v
);
2808 u
->cgroup_realized
= b
;
2811 } else if (streq(l
, "netclass-id")) {
2812 r
= safe_atou32(v
, &u
->cgroup_netclass_id
);
2814 log_unit_debug(u
, "Failed to parse netclass ID %s, ignoring.", v
);
2816 r
= unit_add_to_netclass_cgroup(u
);
2818 log_unit_debug_errno(u
, r
, "Failed to add unit to netclass cgroup, ignoring: %m");
2824 if (unit_can_serialize(u
)) {
2826 r
= exec_runtime_deserialize_item(u
, rt
, l
, v
, fds
);
2828 log_unit_warning(u
, "Failed to deserialize runtime parameter '%s', ignoring.", l
);
2832 /* Returns positive if key was handled by the call */
2837 r
= UNIT_VTABLE(u
)->deserialize_item(u
, l
, v
, fds
);
2839 log_unit_warning(u
, "Failed to deserialize unit parameter '%s', ignoring.", l
);
2844 int unit_add_node_link(Unit
*u
, const char *what
, bool wants
, UnitDependency dep
) {
2846 _cleanup_free_
char *e
= NULL
;
2851 /* Adds in links to the device node that this unit is based on */
2855 if (!is_device_path(what
))
2858 /* When device units aren't supported (such as in a
2859 * container), don't create dependencies on them. */
2860 if (!unit_type_supported(UNIT_DEVICE
))
2863 r
= unit_name_from_path(what
, ".device", &e
);
2867 r
= manager_load_unit(u
->manager
, e
, NULL
, NULL
, &device
);
2871 r
= unit_add_two_dependencies(u
, UNIT_AFTER
,
2872 u
->manager
->running_as
== MANAGER_SYSTEM
? dep
: UNIT_WANTS
,
2878 r
= unit_add_dependency(device
, UNIT_WANTS
, u
, false);
2886 int unit_coldplug(Unit
*u
) {
2891 /* Make sure we don't enter a loop, when coldplugging
2896 u
->coldplugged
= true;
2898 if (UNIT_VTABLE(u
)->coldplug
)
2899 r
= UNIT_VTABLE(u
)->coldplug(u
);
2902 q
= job_coldplug(u
->job
);
2912 bool unit_need_daemon_reload(Unit
*u
) {
2913 _cleanup_strv_free_
char **t
= NULL
;
2916 unsigned loaded_cnt
, current_cnt
;
2920 if (u
->fragment_path
) {
2922 if (stat(u
->fragment_path
, &st
) < 0)
2923 /* What, cannot access this anymore? */
2926 if (u
->fragment_mtime
> 0 &&
2927 timespec_load(&st
.st_mtim
) != u
->fragment_mtime
)
2931 if (u
->source_path
) {
2933 if (stat(u
->source_path
, &st
) < 0)
2936 if (u
->source_mtime
> 0 &&
2937 timespec_load(&st
.st_mtim
) != u
->source_mtime
)
2941 (void) unit_find_dropin_paths(u
, &t
);
2942 loaded_cnt
= strv_length(t
);
2943 current_cnt
= strv_length(u
->dropin_paths
);
2945 if (loaded_cnt
== current_cnt
) {
2946 if (loaded_cnt
== 0)
2949 if (strv_overlap(u
->dropin_paths
, t
)) {
2950 STRV_FOREACH(path
, u
->dropin_paths
) {
2952 if (stat(*path
, &st
) < 0)
2955 if (u
->dropin_mtime
> 0 &&
2956 timespec_load(&st
.st_mtim
) > u
->dropin_mtime
)
2967 void unit_reset_failed(Unit
*u
) {
2970 if (UNIT_VTABLE(u
)->reset_failed
)
2971 UNIT_VTABLE(u
)->reset_failed(u
);
2974 Unit
*unit_following(Unit
*u
) {
2977 if (UNIT_VTABLE(u
)->following
)
2978 return UNIT_VTABLE(u
)->following(u
);
2983 bool unit_stop_pending(Unit
*u
) {
2986 /* This call does check the current state of the unit. It's
2987 * hence useful to be called from state change calls of the
2988 * unit itself, where the state isn't updated yet. This is
2989 * different from unit_inactive_or_pending() which checks both
2990 * the current state and for a queued job. */
2992 return u
->job
&& u
->job
->type
== JOB_STOP
;
2995 bool unit_inactive_or_pending(Unit
*u
) {
2998 /* Returns true if the unit is inactive or going down */
3000 if (UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(u
)))
3003 if (unit_stop_pending(u
))
3009 bool unit_active_or_pending(Unit
*u
) {
3012 /* Returns true if the unit is active or going up */
3014 if (UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u
)))
3018 (u
->job
->type
== JOB_START
||
3019 u
->job
->type
== JOB_RELOAD_OR_START
||
3020 u
->job
->type
== JOB_RESTART
))
3026 int unit_kill(Unit
*u
, KillWho w
, int signo
, sd_bus_error
*error
) {
3028 assert(w
>= 0 && w
< _KILL_WHO_MAX
);
3030 assert(signo
< _NSIG
);
3032 if (!UNIT_VTABLE(u
)->kill
)
3035 return UNIT_VTABLE(u
)->kill(u
, w
, signo
, error
);
3038 static Set
*unit_pid_set(pid_t main_pid
, pid_t control_pid
) {
3042 pid_set
= set_new(NULL
);
3046 /* Exclude the main/control pids from being killed via the cgroup */
3048 r
= set_put(pid_set
, PID_TO_PTR(main_pid
));
3053 if (control_pid
> 0) {
3054 r
= set_put(pid_set
, PID_TO_PTR(control_pid
));
3066 int unit_kill_common(
3072 sd_bus_error
*error
) {
3075 bool killed
= false;
3077 if (IN_SET(who
, KILL_MAIN
, KILL_MAIN_FAIL
)) {
3079 return sd_bus_error_setf(error
, BUS_ERROR_NO_SUCH_PROCESS
, "%s units have no main processes", unit_type_to_string(u
->type
));
3080 else if (main_pid
== 0)
3081 return sd_bus_error_set_const(error
, BUS_ERROR_NO_SUCH_PROCESS
, "No main process to kill");
3084 if (IN_SET(who
, KILL_CONTROL
, KILL_CONTROL_FAIL
)) {
3085 if (control_pid
< 0)
3086 return sd_bus_error_setf(error
, BUS_ERROR_NO_SUCH_PROCESS
, "%s units have no control processes", unit_type_to_string(u
->type
));
3087 else if (control_pid
== 0)
3088 return sd_bus_error_set_const(error
, BUS_ERROR_NO_SUCH_PROCESS
, "No control process to kill");
3091 if (IN_SET(who
, KILL_CONTROL
, KILL_CONTROL_FAIL
, KILL_ALL
, KILL_ALL_FAIL
))
3092 if (control_pid
> 0) {
3093 if (kill(control_pid
, signo
) < 0)
3099 if (IN_SET(who
, KILL_MAIN
, KILL_MAIN_FAIL
, KILL_ALL
, KILL_ALL_FAIL
))
3101 if (kill(main_pid
, signo
) < 0)
3107 if (IN_SET(who
, KILL_ALL
, KILL_ALL_FAIL
) && u
->cgroup_path
) {
3108 _cleanup_set_free_ Set
*pid_set
= NULL
;
3111 /* Exclude the main/control pids from being killed via the cgroup */
3112 pid_set
= unit_pid_set(main_pid
, control_pid
);
3116 q
= cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, u
->cgroup_path
, signo
, false, false, false, pid_set
);
3117 if (q
< 0 && q
!= -EAGAIN
&& q
!= -ESRCH
&& q
!= -ENOENT
)
3123 if (r
== 0 && !killed
&& IN_SET(who
, KILL_ALL_FAIL
, KILL_CONTROL_FAIL
))
3129 int unit_following_set(Unit
*u
, Set
**s
) {
3133 if (UNIT_VTABLE(u
)->following_set
)
3134 return UNIT_VTABLE(u
)->following_set(u
, s
);
3140 UnitFileState
unit_get_unit_file_state(Unit
*u
) {
3145 if (u
->unit_file_state
< 0 && u
->fragment_path
) {
3146 r
= unit_file_get_state(
3147 u
->manager
->running_as
== MANAGER_SYSTEM
? UNIT_FILE_SYSTEM
: UNIT_FILE_USER
,
3149 basename(u
->fragment_path
),
3150 &u
->unit_file_state
);
3152 u
->unit_file_state
= UNIT_FILE_BAD
;
3155 return u
->unit_file_state
;
3158 int unit_get_unit_file_preset(Unit
*u
) {
3161 if (u
->unit_file_preset
< 0 && u
->fragment_path
)
3162 u
->unit_file_preset
= unit_file_query_preset(
3163 u
->manager
->running_as
== MANAGER_SYSTEM
? UNIT_FILE_SYSTEM
: UNIT_FILE_USER
,
3165 basename(u
->fragment_path
));
3167 return u
->unit_file_preset
;
3170 Unit
* unit_ref_set(UnitRef
*ref
, Unit
*u
) {
3175 unit_ref_unset(ref
);
3178 LIST_PREPEND(refs
, u
->refs
, ref
);
3182 void unit_ref_unset(UnitRef
*ref
) {
3188 LIST_REMOVE(refs
, ref
->unit
->refs
, ref
);
3192 int unit_patch_contexts(Unit
*u
) {
3200 /* Patch in the manager defaults into the exec and cgroup
3201 * contexts, _after_ the rest of the settings have been
3204 ec
= unit_get_exec_context(u
);
3206 /* This only copies in the ones that need memory */
3207 for (i
= 0; i
< _RLIMIT_MAX
; i
++)
3208 if (u
->manager
->rlimit
[i
] && !ec
->rlimit
[i
]) {
3209 ec
->rlimit
[i
] = newdup(struct rlimit
, u
->manager
->rlimit
[i
], 1);
3214 if (u
->manager
->running_as
== MANAGER_USER
&&
3215 !ec
->working_directory
) {
3217 r
= get_home_dir(&ec
->working_directory
);
3221 /* Allow user services to run, even if the
3222 * home directory is missing */
3223 ec
->working_directory_missing_ok
= true;
3226 if (u
->manager
->running_as
== MANAGER_USER
&&
3227 (ec
->syscall_whitelist
||
3228 !set_isempty(ec
->syscall_filter
) ||
3229 !set_isempty(ec
->syscall_archs
) ||
3230 ec
->address_families_whitelist
||
3231 !set_isempty(ec
->address_families
)))
3232 ec
->no_new_privileges
= true;
3234 if (ec
->private_devices
)
3235 ec
->capability_bounding_set
&= ~(UINT64_C(1) << CAP_MKNOD
);
3238 cc
= unit_get_cgroup_context(u
);
3242 ec
->private_devices
&&
3243 cc
->device_policy
== CGROUP_AUTO
)
3244 cc
->device_policy
= CGROUP_CLOSED
;
3250 ExecContext
*unit_get_exec_context(Unit
*u
) {
3257 offset
= UNIT_VTABLE(u
)->exec_context_offset
;
3261 return (ExecContext
*) ((uint8_t*) u
+ offset
);
3264 KillContext
*unit_get_kill_context(Unit
*u
) {
3271 offset
= UNIT_VTABLE(u
)->kill_context_offset
;
3275 return (KillContext
*) ((uint8_t*) u
+ offset
);
3278 CGroupContext
*unit_get_cgroup_context(Unit
*u
) {
3284 offset
= UNIT_VTABLE(u
)->cgroup_context_offset
;
3288 return (CGroupContext
*) ((uint8_t*) u
+ offset
);
3291 ExecRuntime
*unit_get_exec_runtime(Unit
*u
) {
3297 offset
= UNIT_VTABLE(u
)->exec_runtime_offset
;
3301 return *(ExecRuntime
**) ((uint8_t*) u
+ offset
);
3304 static int unit_drop_in_dir(Unit
*u
, UnitSetPropertiesMode mode
, bool transient
, char **dir
) {
3307 if (u
->manager
->running_as
== MANAGER_USER
) {
3310 if (mode
== UNIT_PERSISTENT
&& !transient
)
3311 r
= user_config_home(dir
);
3313 r
= user_runtime_dir(dir
);
3320 if (mode
== UNIT_PERSISTENT
&& !transient
)
3321 *dir
= strdup("/etc/systemd/system");
3323 *dir
= strdup("/run/systemd/system");
3330 int unit_write_drop_in(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *data
) {
3332 _cleanup_free_
char *dir
= NULL
, *p
= NULL
, *q
= NULL
;
3337 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3340 r
= unit_drop_in_dir(u
, mode
, u
->transient
, &dir
);
3344 r
= write_drop_in(dir
, u
->id
, 50, name
, data
);
3348 r
= drop_in_file(dir
, u
->id
, 50, name
, &p
, &q
);
3352 r
= strv_extend(&u
->dropin_paths
, q
);
3356 strv_sort(u
->dropin_paths
);
3357 strv_uniq(u
->dropin_paths
);
3359 u
->dropin_mtime
= now(CLOCK_REALTIME
);
3364 int unit_write_drop_in_format(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *format
, ...) {
3365 _cleanup_free_
char *p
= NULL
;
3373 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3376 va_start(ap
, format
);
3377 r
= vasprintf(&p
, format
, ap
);
3383 return unit_write_drop_in(u
, mode
, name
, p
);
3386 int unit_write_drop_in_private(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *data
) {
3387 _cleanup_free_
char *ndata
= NULL
;
3393 if (!UNIT_VTABLE(u
)->private_section
)
3396 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3399 ndata
= strjoin("[", UNIT_VTABLE(u
)->private_section
, "]\n", data
, NULL
);
3403 return unit_write_drop_in(u
, mode
, name
, ndata
);
3406 int unit_write_drop_in_private_format(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *format
, ...) {
3407 _cleanup_free_
char *p
= NULL
;
3415 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3418 va_start(ap
, format
);
3419 r
= vasprintf(&p
, format
, ap
);
3425 return unit_write_drop_in_private(u
, mode
, name
, p
);
3428 int unit_make_transient(Unit
*u
) {
3431 if (!UNIT_VTABLE(u
)->can_transient
)
3434 u
->load_state
= UNIT_STUB
;
3436 u
->transient
= true;
3438 u
->fragment_path
= mfree(u
->fragment_path
);
3439 u
->source_path
= mfree(u
->source_path
);
3440 u
->dropin_paths
= strv_free(u
->dropin_paths
);
3441 u
->fragment_mtime
= u
->source_mtime
= u
->dropin_mtime
= 0;
3443 unit_add_to_dbus_queue(u
);
3444 unit_add_to_gc_queue(u
);
3445 unit_add_to_load_queue(u
);
3450 int unit_kill_context(
3456 bool main_pid_alien
) {
3458 bool wait_for_exit
= false;
3464 if (c
->kill_mode
== KILL_NONE
)
3474 case KILL_TERMINATE
:
3475 sig
= c
->kill_signal
;
3478 assert_not_reached("KillOperation unknown");
3482 r
= kill_and_sigcont(main_pid
, sig
);
3484 if (r
< 0 && r
!= -ESRCH
) {
3485 _cleanup_free_
char *comm
= NULL
;
3486 get_process_comm(main_pid
, &comm
);
3488 log_unit_warning_errno(u
, r
, "Failed to kill main process " PID_FMT
" (%s), ignoring: %m", main_pid
, strna(comm
));
3490 if (!main_pid_alien
)
3491 wait_for_exit
= true;
3493 if (c
->send_sighup
&& k
== KILL_TERMINATE
)
3494 (void) kill(main_pid
, SIGHUP
);
3498 if (control_pid
> 0) {
3499 r
= kill_and_sigcont(control_pid
, sig
);
3501 if (r
< 0 && r
!= -ESRCH
) {
3502 _cleanup_free_
char *comm
= NULL
;
3503 get_process_comm(control_pid
, &comm
);
3505 log_unit_warning_errno(u
, r
, "Failed to kill control process " PID_FMT
" (%s), ignoring: %m", control_pid
, strna(comm
));
3507 wait_for_exit
= true;
3509 if (c
->send_sighup
&& k
== KILL_TERMINATE
)
3510 (void) kill(control_pid
, SIGHUP
);
3514 if (u
->cgroup_path
&&
3515 (c
->kill_mode
== KILL_CONTROL_GROUP
|| (c
->kill_mode
== KILL_MIXED
&& k
== KILL_KILL
))) {
3516 _cleanup_set_free_ Set
*pid_set
= NULL
;
3518 /* Exclude the main/control pids from being killed via the cgroup */
3519 pid_set
= unit_pid_set(main_pid
, control_pid
);
3523 r
= cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, u
->cgroup_path
, sig
, true, k
!= KILL_TERMINATE
, false, pid_set
);
3525 if (r
!= -EAGAIN
&& r
!= -ESRCH
&& r
!= -ENOENT
)
3526 log_unit_warning_errno(u
, r
, "Failed to kill control group %s, ignoring: %m", u
->cgroup_path
);
3530 /* FIXME: For now, on the legacy hierarchy, we
3531 * will not wait for the cgroup members to die
3532 * if we are running in a container or if this
3533 * is a delegation unit, simply because cgroup
3534 * notification is unreliable in these
3535 * cases. It doesn't work at all in
3536 * containers, and outside of containers it
3537 * can be confused easily by left-over
3538 * directories in the cgroup -- which however
3539 * should not exist in non-delegated units. On
3540 * the unified hierarchy that's different,
3541 * there we get proper events. Hence rely on
3544 if (cg_unified() > 0 ||
3545 (detect_container() == 0 && !unit_cgroup_delegate(u
)))
3546 wait_for_exit
= true;
3548 if (c
->send_sighup
&& k
!= KILL_KILL
) {
3551 pid_set
= unit_pid_set(main_pid
, control_pid
);
3555 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, u
->cgroup_path
, SIGHUP
, false, true, false, pid_set
);
3560 return wait_for_exit
;
3563 int unit_require_mounts_for(Unit
*u
, const char *path
) {
3564 char prefix
[strlen(path
) + 1], *p
;
3570 /* Registers a unit for requiring a certain path and all its
3571 * prefixes. We keep a simple array of these paths in the
3572 * unit, since its usually short. However, we build a prefix
3573 * table for all possible prefixes so that new appearing mount
3574 * units can easily determine which units to make themselves a
3577 if (!path_is_absolute(path
))
3584 path_kill_slashes(p
);
3586 if (!path_is_safe(p
)) {
3591 if (strv_contains(u
->requires_mounts_for
, p
)) {
3596 r
= strv_consume(&u
->requires_mounts_for
, p
);
3600 PATH_FOREACH_PREFIX_MORE(prefix
, p
) {
3603 x
= hashmap_get(u
->manager
->units_requiring_mounts_for
, prefix
);
3607 r
= hashmap_ensure_allocated(&u
->manager
->units_requiring_mounts_for
, &string_hash_ops
);
3621 r
= hashmap_put(u
->manager
->units_requiring_mounts_for
, q
, x
);
3637 int unit_setup_exec_runtime(Unit
*u
) {
3643 offset
= UNIT_VTABLE(u
)->exec_runtime_offset
;
3646 /* Check if there already is an ExecRuntime for this unit? */
3647 rt
= (ExecRuntime
**) ((uint8_t*) u
+ offset
);
3651 /* Try to get it from somebody else */
3652 SET_FOREACH(other
, u
->dependencies
[UNIT_JOINS_NAMESPACE_OF
], i
) {
3654 *rt
= unit_get_exec_runtime(other
);
3656 exec_runtime_ref(*rt
);
3661 return exec_runtime_make(rt
, unit_get_exec_context(u
), u
->id
);
3664 bool unit_type_supported(UnitType t
) {
3665 if (_unlikely_(t
< 0))
3667 if (_unlikely_(t
>= _UNIT_TYPE_MAX
))
3670 if (!unit_vtable
[t
]->supported
)
3673 return unit_vtable
[t
]->supported();
3676 void unit_warn_if_dir_nonempty(Unit
*u
, const char* where
) {
3682 r
= dir_is_empty(where
);
3686 log_unit_warning_errno(u
, r
, "Failed to check directory %s: %m", where
);
3690 log_struct(LOG_NOTICE
,
3691 LOG_MESSAGE_ID(SD_MESSAGE_OVERMOUNTING
),
3693 LOG_UNIT_MESSAGE(u
, "Directory %s to mount over is not empty, mounting anyway.", where
),
3698 int unit_fail_if_symlink(Unit
*u
, const char* where
) {
3704 r
= is_symlink(where
);
3706 log_unit_debug_errno(u
, r
, "Failed to check symlink %s, ignoring: %m", where
);
3713 LOG_MESSAGE_ID(SD_MESSAGE_OVERMOUNTING
),
3715 LOG_UNIT_MESSAGE(u
, "Mount on symlink %s not allowed.", where
),
3722 bool unit_is_pristine(Unit
*u
) {
3725 /* Check if the unit already exists or is already around,
3726 * in a number of different ways. Note that to cater for unit
3727 * types such as slice, we are generally fine with units that
3728 * are marked UNIT_LOADED even even though nothing was
3729 * actually loaded, as those unit types don't require a file
3730 * on disk to validly load. */
3732 return !(!IN_SET(u
->load_state
, UNIT_NOT_FOUND
, UNIT_LOADED
) ||
3735 !strv_isempty(u
->dropin_paths
) ||