mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-11 05:17:44 +03:00
core: add possibility to not track certain unit types
This commit is contained in:
parent
80d95fcd6e
commit
88e4bfa62b
@ -274,6 +274,15 @@ All tools:
|
|||||||
it is either set to `system` or `user` depending on whether the NSS/PAM
|
it is either set to `system` or `user` depending on whether the NSS/PAM
|
||||||
module is called by systemd in `--system` or `--user` mode.
|
module is called by systemd in `--system` or `--user` mode.
|
||||||
|
|
||||||
|
* `$SYSTEMD_SUPPORT_DEVICE`, `$SYSTEMD_SUPPORT_MOUNT`, `$SYSTEMD_SUPPORT_SWAP` -
|
||||||
|
can be set to `0` to mark respective unit type as unsupported. Generally,
|
||||||
|
having less units saves system resources so these options might be useful
|
||||||
|
for cases where we don't need to track given unit type, e.g. `--user` manager
|
||||||
|
often doesn't need to deal with device or swap units because they are
|
||||||
|
handled by the `--system` manager (PID 1). Note that setting certain unit
|
||||||
|
type as unsupported may not prevent loading some units of that type if they
|
||||||
|
are referenced by other units of another supported type.
|
||||||
|
|
||||||
`systemd-remount-fs`:
|
`systemd-remount-fs`:
|
||||||
|
|
||||||
* `$SYSTEMD_REMOUNT_ROOT_RW=1` — if set and no entry for the root directory
|
* `$SYSTEMD_REMOUNT_ROOT_RW=1` — if set and no entry for the root directory
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "dbus-unit.h"
|
#include "dbus-unit.h"
|
||||||
#include "dbus.h"
|
#include "dbus.h"
|
||||||
#include "dropin.h"
|
#include "dropin.h"
|
||||||
|
#include "env-util.h"
|
||||||
#include "escape.h"
|
#include "escape.h"
|
||||||
#include "execute.h"
|
#include "execute.h"
|
||||||
#include "fd-util.h"
|
#include "fd-util.h"
|
||||||
@ -4781,11 +4782,28 @@ int unit_setup_dynamic_creds(Unit *u) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool unit_type_supported(UnitType t) {
|
bool unit_type_supported(UnitType t) {
|
||||||
|
static int8_t cache[_UNIT_TYPE_MAX] = {}; /* -1: disabled, 1: enabled: 0: don't know */
|
||||||
|
int r;
|
||||||
|
|
||||||
if (_unlikely_(t < 0))
|
if (_unlikely_(t < 0))
|
||||||
return false;
|
return false;
|
||||||
if (_unlikely_(t >= _UNIT_TYPE_MAX))
|
if (_unlikely_(t >= _UNIT_TYPE_MAX))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (cache[t] == 0) {
|
||||||
|
char *e;
|
||||||
|
|
||||||
|
e = strjoina("SYSTEMD_SUPPORT_", unit_type_to_string(t));
|
||||||
|
|
||||||
|
r = getenv_bool(ascii_strupper(e));
|
||||||
|
if (r < 0 && r != -ENXIO)
|
||||||
|
log_debug_errno(r, "Failed to parse $%s, ignoring: %m", e);
|
||||||
|
|
||||||
|
cache[t] = r == 0 ? -1 : 1;
|
||||||
|
}
|
||||||
|
if (cache[t] < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!unit_vtable[t]->supported)
|
if (!unit_vtable[t]->supported)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user