#!/bin/bash # LibrePortal Task Processor Systemd Service Setup # Replaces crontabSetupTaskProcessor with systemd service installLibrePortalWebUITaskService() { if [[ "$CFG_REQUIREMENT_WEBUI_SERVICE" == "true" ]]; then local service_file="/etc/systemd/system/libreportal.service" if [[ ! -f "$service_file" ]]; then local task_processor_script="$install_scripts_dir/crontab/task/crontab_task_processor.sh" local task_dir="$containers_dir/libreportal/frontend/data/tasks" # Update TASK_DIR in the task processor script if [ -f "$task_processor_script" ]; then sed -i "s|TASK_DIR=\".*\"|TASK_DIR=\"$task_dir\"|g" "$task_processor_script" chmod +x "$task_processor_script" else isNotice "Task processor script not found" fi # Rootless docker exposes the daemon at /run/user//docker.sock and # depends on XDG_RUNTIME_DIR being set. Systemd units don't inherit user # bashrc, so without these Environment= lines the processor would fall # back to /var/run/docker.sock (which rootless does not create) and any # `docker …` call inside the task would fail. Rootful gets no extras — # the default /var/run path is already correct. local service_env_block="" if [[ "$CFG_DOCKER_INSTALL_TYPE" == "rootless" ]]; then local libreportal_uid libreportal_uid="$(id -u "$sudo_user_name")" service_env_block="Environment=DOCKER_HOST=unix:///run/user/${libreportal_uid}/docker.sock Environment=XDG_RUNTIME_DIR=/run/user/${libreportal_uid}" fi # Create systemd service file sudo tee "$service_file" > /dev/null </dev/null | grep -q "task_processor.sh"; then sudo -u $sudo_user_name crontab -l 2>/dev/null | grep -v "task_processor.sh" | sudo -u $sudo_user_name crontab - isNotice "Removed task processor from crontab" fi # Reload systemd and enable service sudo systemctl daemon-reload sudo systemctl enable libreportal.service >/dev/null 2>&1 sudo systemctl start libreportal.service isSuccessful "LibrePortal task processor service setup." fi fi }