diff --git a/README.md b/README.md new file mode 100644 index 0000000..ed293cb --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# README + +A collection of scripts and systemd services which might be useful for servers. + +After you pulled, use `./sync` and pick an action which should be self-explaining. + +Services and scripts don't depend on each other but have hints that they can be combined (out-commented line in service files for `systemd_failure_notify@.service` for example). + +Use at your own risk. \ No newline at end of file diff --git a/etc/systemd/system/docker_housekeeping.service b/etc/systemd/system/docker_housekeeping.service index 02e1152..5c8c06e 100644 --- a/etc/systemd/system/docker_housekeeping.service +++ b/etc/systemd/system/docker_housekeeping.service @@ -1,5 +1,6 @@ [Unit] Description=Run docker_housekeeping +#OnFailure=systemd_failure_notify@%n.service [Service] Type=oneshot diff --git a/etc/systemd/system/pkgfile.service b/etc/systemd/system/pkgfile.service index 54a4a19..3d02c19 100644 --- a/etc/systemd/system/pkgfile.service +++ b/etc/systemd/system/pkgfile.service @@ -1,5 +1,6 @@ [Unit] Description=Run pkgfile +#OnFailure=systemd_failure_notify@%n.service [Service] Type=oneshot diff --git a/etc/systemd/system/systemd_failure_notify@.service b/etc/systemd/system/systemd_failure_notify@.service new file mode 100644 index 0000000..a77e15d --- /dev/null +++ b/etc/systemd/system/systemd_failure_notify@.service @@ -0,0 +1,6 @@ +[Unit] +Description=Systemd Failure via mail for %i + +[Service] +Type=oneshot +ExecStart=systemd_failure_notify %i \ No newline at end of file diff --git a/etc/systemd/user/borgwrapper.service b/etc/systemd/user/borgwrapper.service index ca1466f..d7d5dd9 100644 --- a/etc/systemd/user/borgwrapper.service +++ b/etc/systemd/user/borgwrapper.service @@ -1,10 +1,11 @@ [Unit] Description=Run borgwrapper +#OnFailure=systemd_failure_notify@%n.service [Service] Type=oneshot -#ExecStart=borgwrapper /home/myUser/borgwrapper-custom.conf ExecStart=borgwrapper +#ExecStart=borgwrapper /home/myUser/borgwrapper-custom.conf #Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/myUser/.customBinaryPathWithBorgSymlinkForVirtualenv" #Environment="SSH_AUTH_SOCK=/run/user/myUserId/keyring/ssh" diff --git a/etc/systemd/user/check_updates.service b/etc/systemd/user/check_updates.service index 15ef43a..2d27f7f 100644 --- a/etc/systemd/user/check_updates.service +++ b/etc/systemd/user/check_updates.service @@ -1,5 +1,6 @@ [Unit] Description=Run check_updates +#OnFailure=systemd_failure_notify@%n.service [Service] Type=oneshot diff --git a/etc/systemd/user/disk_space_alert.service b/etc/systemd/user/disk_space_alert.service index 0d3b26d..6b21f67 100644 --- a/etc/systemd/user/disk_space_alert.service +++ b/etc/systemd/user/disk_space_alert.service @@ -1,5 +1,6 @@ [Unit] Description=Run disk_space_alert +#OnFailure=systemd_failure_notify@%n.service [Service] Type=oneshot diff --git a/etc/systemd/user/docker_check.service b/etc/systemd/user/docker_check.service index 0586ed4..294bf84 100644 --- a/etc/systemd/user/docker_check.service +++ b/etc/systemd/user/docker_check.service @@ -1,5 +1,6 @@ [Unit] Description=Run docker_check +#OnFailure=systemd_failure_notify@%n.service [Service] Type=oneshot diff --git a/etc/systemd/user/memory_usage_alert.service b/etc/systemd/user/memory_usage_alert.service index 073df4d..c150070 100644 --- a/etc/systemd/user/memory_usage_alert.service +++ b/etc/systemd/user/memory_usage_alert.service @@ -1,5 +1,6 @@ [Unit] Description=Run memory_usage_alert +#OnFailure=systemd_failure_notify@%n.service [Service] Type=oneshot diff --git a/etc/systemd/user/smartctl_tests_long.service b/etc/systemd/user/smartctl_tests_long.service index f6c01d5..e8a8c7d 100644 --- a/etc/systemd/user/smartctl_tests_long.service +++ b/etc/systemd/user/smartctl_tests_long.service @@ -1,5 +1,6 @@ [Unit] Description=Run smartctl_tests_long +#OnFailure=systemd_failure_notify@%n.service [Service] Type=oneshot diff --git a/etc/systemd/user/systemd_check.service b/etc/systemd/user/systemd_check.service index 8874e05..bd98021 100644 --- a/etc/systemd/user/systemd_check.service +++ b/etc/systemd/user/systemd_check.service @@ -1,5 +1,6 @@ [Unit] Description=Run systemd_check +#OnFailure=systemd_failure_notify@%n.service [Service] Type=oneshot diff --git a/etc/systemd/user/systemd_failure_notify@.service b/etc/systemd/user/systemd_failure_notify@.service new file mode 100644 index 0000000..a77e15d --- /dev/null +++ b/etc/systemd/user/systemd_failure_notify@.service @@ -0,0 +1,6 @@ +[Unit] +Description=Systemd Failure via mail for %i + +[Service] +Type=oneshot +ExecStart=systemd_failure_notify %i \ No newline at end of file diff --git a/usr/local/bin/systemd_failure_notify b/usr/local/bin/systemd_failure_notify new file mode 100755 index 0000000..91aac9d --- /dev/null +++ b/usr/local/bin/systemd_failure_notify @@ -0,0 +1,69 @@ +#!/usr/bin/env bash + +# usage +usage() { +USAGE=$(cat <'s service into systemd's user and systemd's system folder so it can be used by global and user services. + +If no CONFIG_FILE is given, HOME/.systemd_failure_notify.conf is used. This fallback option +has to exist or the script will exit. + +Configuration can be done in any file and any pre-defined variable can be overwritten. + +The following are at least required for the script to work: +- SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS="" // mail.rc has to be configured + +You can copy this script to '/usr/local/bin' and use create a custom CONFIG_FILE as user. Examples can be found in '/usr/share/doc/'. +EOF +) + echo "$USAGE"; +} + +set -e; + +SYSTEMD_FAILURE_NOTFY_SERVICE=$1 +if [ -z "$SYSTEMD_FAILURE_NOTFY_SERVICE" ]; then + echo "No service given"; + echo ""; + usage; + exit 1; +fi + +SYSTEMD_FAILURE_NOTFY_HOSTNAME=$(hostname) +SYSTEMD_FAILURE_NOTFY_USER=$(whoami) +SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS=""; + +# check for config file +source_config() { + local config=$1; + local configFallback=$2; + + if [[ ! -f "$config" ]]; then + if [[ ! -f "$configFallback" ]]; then + echo "No config file specified and could not find default in '$configFallback'!"; + echo ""; + usage; + exit 1; + else + config=$configFallback; + fi + fi + + set -a; + source "$config"; + set +a; +} +source_config "$2" "$HOME/.systemd_failure_notify.conf" + +SUBJECT="[systemd $SYSTEMD_FAILURE_NOTFY_HOSTNAME for $SYSTEMD_FAILURE_NOTFY_USER] $SYSTEMD_FAILURE_NOTFY_SERVICE RUN FAILED" +MESSAGE="$SYSTEMD_FAILURE_NOTFY_SERVICE run failed" +echo $MESSAGE|mailx -Ssendwait -s "$SUBJECT" $SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS; \ No newline at end of file diff --git a/usr/share/doc/systemd_failure_notify/.systemd_failure_notify.conf.example b/usr/share/doc/systemd_failure_notify/.systemd_failure_notify.conf.example new file mode 100644 index 0000000..9eb8686 --- /dev/null +++ b/usr/share/doc/systemd_failure_notify/.systemd_failure_notify.conf.example @@ -0,0 +1 @@ +SYSTEMD_FAILURE_NOTIFY_MAIL_ADDRESS="alias@domain.tld" \ No newline at end of file