mirror of
https://github.com/foo-dogsquared/wiki.git
synced 2025-01-31 04:58:21 +00:00
f868f3b3da
With the few updates on more learning, writing, and some forward calls for archiving which I'll be jotting down for some ideas soon.
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=.
|