# Installed to ~/.config/systemd/user/ by scripts/install_service.sh, which # substitutes @REPO_ROOT@. Edit this template, never the installed copy. [Unit] Description=Signal group bot Documentation=file://@REPO_ROOT@/README.md # The bot's only outbound dependency is signal-cli-rest-api in Docker. That # container runs --restart=always, so it comes back by itself, but Docker has # to exist before the bot's first connection attempt. After=network-online.target docker.service Wants=network-online.target # A config error -- missing GROUP_IDS, a port that is taken -- exits non-zero # instantly, and would otherwise spin forever at RestartSec. Five failures in # a minute stops the unit in `failed` state, which is visible in `systemctl # --user status`, instead of hiding as a permanent restart loop. StartLimitIntervalSec=60 StartLimitBurst=5 [Service] Type=exec WorkingDirectory=@REPO_ROOT@ # run.sh execs the interpreter, so this PID is the bot itself. ExecStart=@REPO_ROOT@/run.sh # `always`, not `on-failure`: this process has no correct reason to exit 0. Restart=always RestartSec=5 # The bot writes only its SQLite tally database, inside the repo. NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=read-only ReadWritePaths=@REPO_ROOT@ ProtectKernelTunables=true ProtectControlGroups=true RestrictSUIDSGID=true [Install] WantedBy=default.target