No description
Find a file
Alexander Schäferdiek 73b0a98d6e
All checks were successful
/ build (push) Successful in 3m49s
Remove aur.myservermanager.com
2023-11-22 16:13:19 +01:00
.forgejo/workflows Remove aur.myservermanager.com 2023-11-22 16:13:19 +01:00
_man Notifier allows to override global configuration files on a per-command base by checking for existence of all required configuration values as environment values. 2023-03-21 18:48:46 +01:00
_pkg Rename to system-helpers 2022-09-17 20:28:53 +02:00
etc Rename to system-helpers 2022-09-17 20:28:53 +02:00
usr Add network prune to docker housekeeping 2023-04-10 19:01:52 +02:00
README.md Remove aur.myservermanager.com 2023-11-22 16:13:19 +01:00
system-helpers-sync Rename to system-helpers 2022-09-17 20:28:53 +02:00

README

system-helpers - Collection of helper systemd services, systemd timers and shell scripts for common tasks.

It can help you out for small servers where you think a proper monitoring and alerting system like Prometheus and AlertManager is too much.

The notifier script can send notifications via mail or gotify.

system-helpers collection provides the following helpers

  • notifier which sends notifications via mail or gotify (see see notifier)
  • checking if systemd services and timers are running (see man systemd_check)
  • borgmatic backup (see exposed systemd services borgmatic@ which require a valid borgmatic.yml file in /etc/borgmatic or your $HOME/.config/borgmatic)
  • restic backup (see /usr/share/doc/system-helpers/restic for an example mybackup)
  • checking if docker containers are running (see man docker_check)
  • batch docker-compose upgrades (see man docker_compose_update)
  • dynamic dns update (see man docker_compose_update)
  • memory and disk checks (see man disk_space_alert and man memory_usage_alert)
  • docker housekeeping for removing unused docker containers, volumes and images
  • update check for pacman (ArchLinux specific, see man check_updates)

Provided systemd services mostly support mail notifications if they have failed via systemd_failure_notify.

See /usr/share/doc/system-helpers for example configurations which should be copied inside $HOME or /etc depending on the helper script.

Installation

Package build for Arch Linux

  1. Clone this repository
  2. Build a pacman package for ArchLinux via makepkg -csi inside the _pkg/ folder

system-helpers-sync script to synchronize files to locations

  1. Clone this repository
  2. Run ./system-helpers-sync and pick an action which should be self-explaining

Usage

Services and scripts don't depend on each other, except for notifier which is commonly used. See more about notifier in the next section. All scripts include hints that they can be combined (out-commented line in service files for systemd_failure_notify@.service for example).

Examples are given inside usr/share/doc/system-helpers and man pages are also available.

Making use of notifier

Scripts make heavy use the bundled notifier script (see man notifier) which should be configured properly, e.g. add a /etc/notifier.conf:

NOTIFIER_MAIL_ADDRESS=monitoring@yourdomain.tld
NOTIFIER_MAIL_ENABLED=true
# Enable gotify by running gotify init first, you need a custom serverfor this
NOTIFIER_GOTIFY_ENABLED=false

Important: You can also change notifier behavior on a per-command basis, e.g. disable mail or gotify by providing ALL notifier variables as environment variables where the command is issued, for example in a systemd .service file.

# ...

[Service]
# ...
Environment="NOTIFIER_GOTIFY_ENABLED=false"
Environment="NOTIFIER_MAIL_ENABLED=true"
Environment="NOTIFIER_MAIL_ADDRESS=another-mail-different-from-your-global-config@domain.tld"

# ...

Another option is to set those inside the respective config files of another script. Let's have an example with the check_updates script.

# /etc/check_updates.conf
NOTIFIER_GOTIFY_ENABLED=false
NOTIFIER_MAIL_ENABLED=true
NOTIFIER_MAIL_ADDRESS=updatemail@domain.tld

This will not send gotify messages for check_updates and send a mail to a different address updatemail@domain.tld.

FAQ

User cannot use network-online.target

By default, no user unit can depend on system events like network-online.target. To enable this, you need to link the proper .target which you like to use inside the user service before.

systemctl --user link /usr/lib/systemd/system/network-online.target

This would make network-online.target available after a reboot to the user who issued the command.

network-online.target doesn't recognize DNS correctly

If you like to set Persistent=true, then you should probably equip the related .service file with a ExecStartPre=/bin/bash -c 'until host captiveportal.myservermanager.com; do sleep 1; done' or any domain you think is 100% reachable.