Systemd/User Services/ru: Difference between revisions
Created page with "Systemd/Пользовательские сервисы" |
Created page with "<syntaxhighlight lang="nix"> systemd.user.services.my-cool-user-service = { enable = true; after = [ "network.target" ]; wantedBy = [ "default.target" ]; description = "Мой Классный Пользовательский Сервис"; serviceConfig = { Type = "simple"; ExecStart = ''/my/cool/user/service''; }; }; </syntaxhighlight>" |
||
Line 11: | Line 11: | ||
Here is an example: | Here is an example: | ||
</div> | </div> | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
systemd.user.services.my-cool-user-service = { | systemd.user.services.my-cool-user-service = { | ||
Line 17: | Line 16: | ||
after = [ "network.target" ]; | after = [ "network.target" ]; | ||
wantedBy = [ "default.target" ]; | wantedBy = [ "default.target" ]; | ||
description = " | description = "Мой Классный Пользовательский Сервис"; | ||
serviceConfig = { | serviceConfig = { | ||
Type = "simple"; | Type = "simple"; | ||
Line 24: | Line 23: | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
By default, user services will be stopped when the user logs out and will start again when the user logs back in due to us setting {{ic|<nowiki>wantedBy = [ "default.target" ]</nowiki>}} in the example. | By default, user services will be stopped when the user logs out and will start again when the user logs back in due to us setting {{ic|<nowiki>wantedBy = [ "default.target" ]</nowiki>}} in the example. |
Revision as of 16:44, 5 August 2024
Systemd supports running a separate instance of systemd for a given user, allowing the user to control their own services. See here for more information: https://wiki.archlinux.org/title/Systemd/User
In NixOS, a user service can be expressed with systemd.user.services.<name>
, as documented here: https://search.nixos.org/options?query=systemd.user.services
This may be useful if you want a user to be able to start, stop, and restart their own instance of a service without needing to make the user a sudoer.
Here is an example:
systemd.user.services.my-cool-user-service = {
enable = true;
after = [ "network.target" ];
wantedBy = [ "default.target" ];
description = "Мой Классный Пользовательский Сервис";
serviceConfig = {
Type = "simple";
ExecStart = ''/my/cool/user/service'';
};
};
By default, user services will be stopped when the user logs out and will start again when the user logs back in due to us setting wantedBy = [ "default.target" ]
in the example.
Keeping user services running after logout
If you need a user service to stay running after a user logs out, you need to enable "lingering" by setting users.users.<username>.linger = true;
You'll also likely want to change to wantedBy = [ "multi-user.target" ];
so the service starts at boot time.