Something went wrong. Try again.
A script for creating systemd services for nextcloud-aio that will process webhooks
Something went wrong. Try again.
3.1 kB · 124 lines · Created 3mo ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125#!/bin/bashset -e
# Default settingsWORKER_COUNT=3NEXTCLOUD_CONTAINER="nextcloud-aio-nextcloud"WORKER_DIR="/opt/nextcloud-webhook-worker"WORKER_SCRIPT="${WORKER_DIR}/webhook-worker.sh"SERVICE_FILE="/etc/systemd/system/nextcloud-webhook-worker@.service"
# Parse argumentswhile [[ $# -gt 0 ]]; do case $1 in -c|--count) WORKER_COUNT="$2" shift 2 ;; -n|--container) NEXTCLOUD_CONTAINER="$2" shift 2 ;; -h|--help) echo "Usage: $0 [-c|--count WORKERS] [-n|--container CONTAINER_NAME]" exit 0 ;; *) echo "Unknown option: $1" exit 1 ;; esacdone
# Check rootif [[ $EUID -ne 0 ]]; then echo "This script must be run as root" exit 1fi
# Check dockerif ! command -v docker &> /dev/null; then echo "Docker not found. Please install Docker first." exit 1fi
# Check Nextcloud AIO container existsif ! docker ps -a --format "{{.Names}}" | grep -q "^${NEXTCLOUD_CONTAINER}$"; then echo "Container '${NEXTCLOUD_CONTAINER}' not found." echo "Make sure Nextcloud AIO is installed and running." exit 1fi
# Create worker directorymkdir -p "${WORKER_DIR}"
# Create worker scriptcat > "${WORKER_SCRIPT}" <<'EOF'#!/bin/shset -e
WORKER_ID="$1"NEXTCLOUD_CONTAINER="${NEXTCLOUD_CONTAINER:-nextcloud-aio-nextcloud}"WORKER_CLASS='OCA\WebhookListeners\BackgroundJobs\WebhookCall'
echo "[Worker ${WORKER_ID}] Starting Nextcloud AIO Webhook Worker"
while true; do if ! docker ps --format "{{.Names}}" | grep -q "^${NEXTCLOUD_CONTAINER}$"; then echo "[Worker ${WORKER_ID}] Nextcloud container '${NEXTCLOUD_CONTAINER}' not running. Waiting 60s..." sleep 60 continue fi
docker exec --user www-data "${NEXTCLOUD_CONTAINER}" \ php occ background-job:worker -v -t 60 "${WORKER_CLASS}" \ || echo "[Worker ${WORKER_ID}] Worker exited, retrying in 30s..."
sleep 30doneEOF
chmod +x "${WORKER_SCRIPT}"
# Create systemd servicecat > "${SERVICE_FILE}" <<EOF[Unit]Description=Nextcloud AIO Webhook worker %iAfter=network.target docker.service
[Service]Type=simpleEnvironment="NEXTCLOUD_CONTAINER=${NEXTCLOUD_CONTAINER}"ExecStart=${WORKER_SCRIPT} %iRestart=alwaysRestartSec=5StartLimitInterval=60StartLimitBurst=10
[Install]WantedBy=multi-user.targetEOF
# Reload systemdsystemctl daemon-reload
# Stop any existing instancesfor i in $(seq 1 99); do if systemctl is-active --quiet "nextcloud-webhook-worker@${i}" 2>/dev/null; then systemctl stop "nextcloud-webhook-worker@${i}" || true fidone
# Enable and start workersfor i in $(seq 1 "${WORKER_COUNT}"); do systemctl enable --now "nextcloud-webhook-worker@${i}"done
echo ""echo "Installed ${WORKER_COUNT} Nextcloud AIO webhook workers."echo ""echo "Status:"systemctl list-units --type=service --state=running | grep nextcloud-webhook-worker || trueecho ""echo "View logs:"echo " journalctl -xeu nextcloud-webhook-worker@1.service -f"