mirror of
https://github.com/foo-dogsquared/wiki.git
synced 2025-01-31 01:57:54 +00:00
93 lines
3.5 KiB
Org Mode
93 lines
3.5 KiB
Org Mode
|
:PROPERTIES:
|
||
|
:ID: cd5f0d04-d9bb-44e8-a0f2-630ea58c1e94
|
||
|
:END:
|
||
|
#+title: systemd services
|
||
|
#+date: 2021-07-19 21:46:52 +08:00
|
||
|
#+date_modified: 2021-08-02 11:56:12 +08:00
|
||
|
#+language: en
|
||
|
|
||
|
|
||
|
One of the functions of the system suite is service management.
|
||
|
Like most of the components, it can be used at user-level with their set locations, managing the service daemon, and all.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
* Service management basics
|
||
|
|
||
|
Just plop down a service unit file at one of the search paths and you can start managing right away.
|
||
|
For more information, see the manual page (i.e., =systemd.service.5=).
|
||
|
A summarized version can be found at [[Service configuration]].
|
||
|
|
||
|
Here's an example of a user service resided as =$HOME/.config/systemd/user/drive-backup.service=.
|
||
|
|
||
|
#+begin_src ini
|
||
|
[Unit]
|
||
|
Description=Periodic safety backup for my external drive
|
||
|
Documentation=man:borg(1) https://www.borgbackup.org/ https://torsion.org/borgmatic/
|
||
|
|
||
|
[Service]
|
||
|
Type=oneshot
|
||
|
ExecStart=%h/.nix-profile/bin/borgmatic --config %h/dotfiles/borgmatic/personal-drive.yaml --verbosity 2 create
|
||
|
ExecStart=%h/.nix-profile/bin/borgmatic --config %h/dotfiles/borgmatic/personal-drive.yaml --verbosity 2 prune
|
||
|
ExecStart=%h/.nix-profile/bin/borgmatic --config %h/dotfiles/borgmatic/personal-drive.yaml --verbosity 2 check
|
||
|
|
||
|
[Install]
|
||
|
WantedBy=default.target
|
||
|
#+end_src
|
||
|
|
||
|
You can then start the service with:
|
||
|
|
||
|
#+begin_src shell :eval no
|
||
|
systemctl --user start drive-backup.service
|
||
|
#+end_src
|
||
|
|
||
|
You can also stop it with the =stop= subcommand (e.g., ~systemctl --user stop drive-backup.service~) and restart it with =restart= (e.g., ~systemctl --user restart drive-backup.service~).
|
||
|
|
||
|
If you want to enable it at startup, you can go with =enable= subcommand.
|
||
|
(To disable it, use the =disable= subcommand.)
|
||
|
|
||
|
#+begin_src shell :eval no
|
||
|
systemctl --user enable drive-backup.service
|
||
|
#+end_src
|
||
|
|
||
|
systemd will use the configuration file as-is by the time it is started/enabled.
|
||
|
Which means if the config file has been modified after activation, it will not take effect until you restarted it.
|
||
|
For this, you can reload the daemon with =daemon-reload= subcommand.
|
||
|
But for simpler cases, you can use the =reload= subcommand without fully restarting the daemon.
|
||
|
|
||
|
#+begin_src shell :eval no
|
||
|
systemctl --user reload drive-backup.service
|
||
|
|
||
|
# You could also use...
|
||
|
# systemctl --user daemon-reload
|
||
|
# ...if you need a stronger option.
|
||
|
#+end_src
|
||
|
|
||
|
|
||
|
* Service configuration
|
||
|
|
||
|
There are different types of services.
|
||
|
|
||
|
- The most common type of service is =simple= which considers the unit active after the main process is forked (e.g., =Service.ExecStart=).
|
||
|
This is the recommended type for long-running processes.
|
||
|
|
||
|
- =oneshot= marks the service resolved after the main process exits.
|
||
|
Due to the behavior, it will directly go from activating to deactivating instead of active.
|
||
|
|
||
|
- =exec= considers the service active after the binary has been executed.
|
||
|
|
||
|
Aside from types, each service may have one or more commands although the behavior is set depending on the type.
|
||
|
|
||
|
- =ExecStart= which is usually the main command and most services will throw an error if it's missing.
|
||
|
All services, unless specified as a =oneshot= service, only have one of these values.
|
||
|
|
||
|
- =ExecStop= only executes after the main command successfully starts.
|
||
|
|
||
|
- =ExecStartPre= and =ExecStartPost= gives you additional commands that will be executed before and after the main command, respectively.
|
||
|
|
||
|
- =ExecStopPre= and =ExecStopPost= is similar to the pre- and post-start commands except for the stop command.
|
||
|
|
||
|
- =Reload= sets whether the service restarts on fail.
|
||
|
Values accepted are =no=, =on-failure=, and =on-success=.
|