#!/usr/bin/env bash # # paas-laravel-scheduler — systemd timer entry point (every minute, user deploy). # Runs `php artisan schedule:run` for every registry app with RUNTIME=laravel # and SCHEDULER=on that has a live release. Apps run concurrently; a per-app # flock keeps a slow tick from piling up runners (task-level overlap is the # app's own `withoutOverlapping()`). Output goes to shared/storage/logs/scheduler.log. set -uo pipefail PAAS_ROOT="${PAAS_ROOT:-/srv/paas}" APPS_ROOT="${APPS_ROOT:-/srv/apps}" REG_DIR="$PAAS_ROOT/apps.d" # shellcheck disable=SC1091 [[ -f "$PAAS_ROOT/paas.conf" ]] && source "$PAAS_ROOT/paas.conf" PHP_DEFAULT="${PHP_DEFAULT:-8.3}" for conf in "$REG_DIR"/*.conf; do [[ -e "$conf" ]] || continue ( APP=''; RUNTIME=node; SCHEDULER=off; PHP_VERSION='' # shellcheck disable=SC1090 source "$conf" [[ "$RUNTIME" == "laravel" && "$SCHEDULER" == "on" && -n "$APP" ]] || exit 0 app_dir="$APPS_ROOT/$APP" [[ -d "$app_dir/current" ]] || exit 0 php="/usr/bin/php${PHP_VERSION:-$PHP_DEFAULT}" [[ -x "$php" ]] || { echo "[$APP] $php missing" >&2; exit 1; } logdir="$app_dir/shared/storage/logs" mkdir -p "$logdir" cd "$app_dir/current" || exit 1 exec flock -n "$app_dir/shared/.schedule.lock" \ env PATH="$PAAS_ROOT/php/bin/${PHP_VERSION:-$PHP_DEFAULT}:$PATH" \ "$php" artisan schedule:run --no-interaction --no-ansi >>"$logdir/scheduler.log" 2>&1 ) & done wait