aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Dockerfile1
-rw-r--r--container/cron.py42
-rw-r--r--container/entrypoint3
3 files changed, 46 insertions, 0 deletions
diff --git a/Dockerfile b/Dockerfile
index f485f2e..8a88bb6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -8,6 +8,7 @@ COPY ["pyproject.toml", "README.md", "LICENSE.txt", "CHANGELOG.rst", "production
RUN pip install .
COPY --chmod=755 ["container/entrypoint", "/bin/entrypoint"]
+COPY --chmod=755 ["container/cron.py", "/usr/bin/cron.py"]
COPY ["container/gunicorn.conf.py", "/fietsboek/gunicorn.conf.py"]
VOLUME /fietsboek/data /fietsboek/database /fietsboek/pages
diff --git a/container/cron.py b/container/cron.py
new file mode 100644
index 0000000..47aeaa9
--- /dev/null
+++ b/container/cron.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+import os
+import sys
+import datetime
+import subprocess
+import time
+
+SLEEPY_TIME = datetime.timedelta(hours=1)
+SLEEPY_BATCH = datetime.timedelta(minutes=10)
+LOGFILE = "/fietsboek/fietscron.log"
+
+pid = os.fork()
+if pid > 0:
+ sys.exit(0)
+
+os.setsid()
+
+pid = os.fork()
+if pid > 0:
+ sys.exit(0)
+
+
+def run_fietscron():
+ with open(LOGFILE, "wb") as stdout:
+ subprocess.run(
+ ["/usr/local/bin/fietscron", "-c", "/fietsboek/fietsboek.ini"],
+ stdout=stdout,
+ stderr=subprocess.STDOUT,
+ )
+
+
+def wait(start):
+ wanted_time = start + SLEEPY_TIME
+ while (now := datetime.datetime.now(tz=datetime.UTC)) < wanted_time:
+ to_sleep = min(wanted_time - now, SLEEPY_BATCH)
+ time.sleep(to_sleep.total_seconds())
+
+
+while True:
+ start = datetime.datetime.now(tz=datetime.UTC)
+ run_fietscron()
+ wait(start)
diff --git a/container/entrypoint b/container/entrypoint
index c7f3b2d..dcfe1fa 100644
--- a/container/entrypoint
+++ b/container/entrypoint
@@ -59,4 +59,7 @@ fi
# the first time
(cd /package && fietsupdate update -fc "$CONFIG")
+# Start a cronjob for fietscron in the background
+/usr/bin/cron.py
+
exec "$@"