From ae4d06b76d5d1b3c27f6db6bc47a2772e9eda908 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Fri, 16 Oct 2026 10:22:13 +0200 Subject: [PATCH] ReadMeABook: start the scheduler with the service (#17950) Only GET /api/init creates the scheduled jobs and starts the scheduler; upstream's image calls it after every start, the LXC never did (#17945). An ExecStartPost hook now waits for the app and Redis like app-start.sh, and update adds it to existing installs. --- ct/readmeabook.sh | 22 ++++++++++++++++++++++ install/readmeabook-install.sh | 16 ++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/ct/readmeabook.sh b/ct/readmeabook.sh index b337161cf..cb2994964 100644 --- a/ct/readmeabook.sh +++ b/ct/readmeabook.sh @@ -31,6 +31,28 @@ function update_script() { exit fi + if ! grep -q '^ExecStartPost=-/usr/local/bin/readmeabook-init$' /etc/systemd/system/readmeabook.service; then + msg_info "Starting the scheduler with the service" + cat <<'EOF' >/usr/local/bin/readmeabook-init +#!/usr/bin/env bash +# Upstream's image calls /api/init after every start: it creates the scheduled jobs and starts the scheduler +url="http://127.0.0.1:${PORT:-3030}" +for _ in $(seq 1 60); do curl -sf -o /dev/null "$url/api/health" && break; sleep 1; done +for _ in $(seq 1 30); do [[ "$(redis-cli ping 2>/dev/null)" == PONG ]] && break; sleep 1; done +for attempt in 1 2 3 4 5; do + curl -sf -o /dev/null "$url/api/init" && exit 0 + sleep "$attempt" +done +echo "ReadMeABook did not answer /api/init, scheduled jobs will not run" >&2 +exit 1 +EOF + chmod +x /usr/local/bin/readmeabook-init + sed -i '/^ExecStart=/a ExecStartPost=-/usr/local/bin/readmeabook-init\nTimeoutStartSec=180' /etc/systemd/system/readmeabook.service + systemctl daemon-reload + systemctl restart readmeabook + msg_ok "Started the scheduler with the service" + fi + if check_for_gh_release "readmeabook" "kikootwo/ReadMeABook"; then msg_info "Stopping Service" systemctl stop readmeabook diff --git a/install/readmeabook-install.sh b/install/readmeabook-install.sh index 7e54fd0c4..ae122b623 100644 --- a/install/readmeabook-install.sh +++ b/install/readmeabook-install.sh @@ -63,6 +63,20 @@ fi msg_ok "Built ReadMeABook" msg_info "Creating Service" +cat <<'EOF' >/usr/local/bin/readmeabook-init +#!/usr/bin/env bash +# Upstream's image calls /api/init after every start: it creates the scheduled jobs and starts the scheduler +url="http://127.0.0.1:${PORT:-3030}" +for _ in $(seq 1 60); do curl -sf -o /dev/null "$url/api/health" && break; sleep 1; done +for _ in $(seq 1 30); do [[ "$(redis-cli ping 2>/dev/null)" == PONG ]] && break; sleep 1; done +for attempt in 1 2 3 4 5; do + curl -sf -o /dev/null "$url/api/init" && exit 0 + sleep "$attempt" +done +echo "ReadMeABook did not answer /api/init, scheduled jobs will not run" >&2 +exit 1 +EOF +chmod +x /usr/local/bin/readmeabook-init cat </etc/systemd/system/readmeabook.service [Unit] Description=ReadMeABook @@ -75,6 +89,8 @@ User=root WorkingDirectory=/opt/readmeabook EnvironmentFile=/opt/readmeabook/.env ExecStart=${START_CMD} +ExecStartPost=-/usr/local/bin/readmeabook-init +TimeoutStartSec=180 Restart=on-failure RestartSec=10