From 86e5463342df5385653ecccec0e81847e569a817 Mon Sep 17 00:00:00 2001 From: Mar Alegre Date: Mon, 28 Jul 2025 02:15:25 -0400 Subject: [PATCH] use systemd timers instead of crontab --- nextcloud/Containerfile | 24 +++++++------------ nextcloud/assets/bugfix/cronfix | 2 -- nextcloud/assets/config/misc.config.php | 1 + nextcloud/assets/crontab | 11 --------- nextcloud/assets/db-updown.service | 14 ----------- .../assets/systemd/nextcloud-cron.service | 9 +++++++ nextcloud/assets/systemd/nextcloud-cron.timer | 9 +++++++ .../assets/systemd/nextcloud-db-dump.service | 12 ++++++++++ .../assets/systemd/nextcloud-db-dump.timer | 8 +++++++ .../systemd/nextcloud-db-reload.service | 16 +++++++++++++ .../assets/systemd/nextcloud-scan.service | 12 ++++++++++ nextcloud/assets/systemd/nextcloud-scan.timer | 10 ++++++++ 12 files changed, 86 insertions(+), 42 deletions(-) delete mode 100755 nextcloud/assets/bugfix/cronfix delete mode 100644 nextcloud/assets/crontab delete mode 100644 nextcloud/assets/db-updown.service create mode 100644 nextcloud/assets/systemd/nextcloud-cron.service create mode 100644 nextcloud/assets/systemd/nextcloud-cron.timer create mode 100644 nextcloud/assets/systemd/nextcloud-db-dump.service create mode 100644 nextcloud/assets/systemd/nextcloud-db-dump.timer create mode 100644 nextcloud/assets/systemd/nextcloud-db-reload.service create mode 100644 nextcloud/assets/systemd/nextcloud-scan.service create mode 100644 nextcloud/assets/systemd/nextcloud-scan.timer diff --git a/nextcloud/Containerfile b/nextcloud/Containerfile index 81501c9..1d042f5 100644 --- a/nextcloud/Containerfile +++ b/nextcloud/Containerfile @@ -25,7 +25,7 @@ ENV DBNAME=nextcloud # install packages we want RUN apt update -y && apt install -y apache2 php-fpm php-gd php-zip php-pgsql \ php-curl php-mbstring php-intl php-imagick php-xml php-gmp php-json \ - redis php-redis postgresql postgresql-doc php-ldap php-bcmath cron + redis php-redis postgresql postgresql-doc php-ldap php-bcmath # put database variables in /etc/environment so anyone can access them # also autodetect versions of php and postgres and put them in /etc/environment as well @@ -118,21 +118,18 @@ RUN cd nextcloud/config && \ ln -s /vol/data/secret.config.php ### -### DB Auto Load/Dump +### Timers/Services ### -# copy service -COPY assets/db-updown.service /etc/systemd/system/ +# copy services +COPY assets/systemd/ /etc/systemd/system/ # enable service -RUN systemctl enable db-updown.service - -### -### Crontab -### -COPY assets/crontab /root/ -# crontab for www-data -RUN crontab -u www-data /root/crontab +RUN systemctl enable \ + nextcloud-cron.service nextcloud-cron.timer \ + nextcloud-db-dump.service nextcloud-db-dump.timer \ + nextcloud-db-reload.service \ + nextcloud-scan.service nextcloud-scan.timer ### ### Bugfix @@ -143,9 +140,6 @@ COPY assets/bugfix/redis-server.service /etc/systemd/system/redis-server.service COPY assets/bugfix/apache2.override /etc/systemd/system/apache2.service.d/override.conf -# bugfix for cron -COPY assets/bugfix/cronfix /root/ -RUN chmod +x /root/cronfix && /root/cronfix ### ### Workdir diff --git a/nextcloud/assets/bugfix/cronfix b/nextcloud/assets/bugfix/cronfix deleted file mode 100755 index 483c9dc..0000000 --- a/nextcloud/assets/bugfix/cronfix +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -sed -i '/session required pam_loginuid.so/c\#session required pam_loginuid.so' /etc/pam.d/cron diff --git a/nextcloud/assets/config/misc.config.php b/nextcloud/assets/config/misc.config.php index 26354c4..0981fe4 100644 --- a/nextcloud/assets/config/misc.config.php +++ b/nextcloud/assets/config/misc.config.php @@ -1,4 +1,5 @@ '/', +'maintenance_window_start' => 1, ); diff --git a/nextcloud/assets/crontab b/nextcloud/assets/crontab deleted file mode 100644 index 972ebb0..0000000 --- a/nextcloud/assets/crontab +++ /dev/null @@ -1,11 +0,0 @@ -PATH=/usr/local/bin:/bin:/usr/bin -# m h dom mon dow command - -# Run Nextcloud cron tasks every 5 minutes -*/5 * * * * php -f /var/www/html/nextcloud/cron.php - -# Scan for new files every 15 minutes -*/15 * * * * php /var/www/html/nextcloud/occ files:scan --all - -# Dump database every hour -23 * * * * maint 01 01 diff --git a/nextcloud/assets/db-updown.service b/nextcloud/assets/db-updown.service deleted file mode 100644 index f795b57..0000000 --- a/nextcloud/assets/db-updown.service +++ /dev/null @@ -1,14 +0,0 @@ -[Unit] -Description=Load/Dump database on start/stop -After=postgresql.service -Requires=postgresql.service - -[Service] -Type=oneshot -RemainAfterExit=yes -EnvironmentFile=/etc/environment -ExecStart=/bin/bash -c "if [[ $(ls -t /vol/data/sql/ | head -1) == $DBNAME-updown.sql ]]; then db-load /vol/data/sql/$DBNAME-updown.sql; else echo 'updown.sql is not most recent file in database dir, skipping db-load'; fi" -ExecStop=/bin/bash -c "db-dump /vol/data/sql/$DBNAME-updown.sql" - -[Install] -WantedBy=multi-user.target diff --git a/nextcloud/assets/systemd/nextcloud-cron.service b/nextcloud/assets/systemd/nextcloud-cron.service new file mode 100644 index 0000000..dc80386 --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-cron.service @@ -0,0 +1,9 @@ +[Unit] +Description=Nextcloud cron.php job + +[Service] +User=www-data +# Only run if Nextcloud is running +ExecCondition=/usr/local/bin/nc-occ status -e +ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php +KillMode=process diff --git a/nextcloud/assets/systemd/nextcloud-cron.timer b/nextcloud/assets/systemd/nextcloud-cron.timer new file mode 100644 index 0000000..fe21e6b --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-cron.timer @@ -0,0 +1,9 @@ +[Unit] +Description=Run Nextcloud cron.php every 5 minutes + +[Timer] +OnStartupSec=5min +OnUnitActiveSec=5min + +[Install] +WantedBy=timers.target diff --git a/nextcloud/assets/systemd/nextcloud-db-dump.service b/nextcloud/assets/systemd/nextcloud-db-dump.service new file mode 100644 index 0000000..b2e6733 --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-db-dump.service @@ -0,0 +1,12 @@ +[Unit] +Description=Dump database for backup +After=postgresql.service +Requires=postgresql.service + +[Service] +# Only run if Nextcloud is running +ExecCondition=/usr/local/bin/nc-occ status -e +ExecStart=/usr/local/bin/maint +StandardOutput=journal +StandardError=journal +Type=oneshot diff --git a/nextcloud/assets/systemd/nextcloud-db-dump.timer b/nextcloud/assets/systemd/nextcloud-db-dump.timer new file mode 100644 index 0000000..6d6a3f0 --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-db-dump.timer @@ -0,0 +1,8 @@ +[Unit] +Description=Backup database every hour + +[Timer] +OnCalendar=0/1:00:00 + +[Install] +WantedBy=timers.target diff --git a/nextcloud/assets/systemd/nextcloud-db-reload.service b/nextcloud/assets/systemd/nextcloud-db-reload.service new file mode 100644 index 0000000..626b047 --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-db-reload.service @@ -0,0 +1,16 @@ +[Unit] +Description=Load/Dump database on start/stop +After=postgresql.service +Requires=postgresql.service + +[Service] +Type=oneshot +StandardOutput=journal +StandardError=journal +RemainAfterExit=yes +EnvironmentFile=/etc/environment +ExecStart=/bin/bash -c "if [[ $(ls -t /vol/data/sql/ | head -1) == $DBNAME-on-shutdown.sql ]]; then db-load /vol/data/sql/$DBNAM-on-shutdown.sql; else echo \"$DBNAME-on-shutdown.sql is not most recent file in database dir, skipping db-load\"; fi" +ExecStop=/bin/bash -c "db-dump /vol/data/sql/$DBNAME-on-shutdown.sql" + +[Install] +WantedBy=multi-user.target diff --git a/nextcloud/assets/systemd/nextcloud-scan.service b/nextcloud/assets/systemd/nextcloud-scan.service new file mode 100644 index 0000000..5028255 --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-scan.service @@ -0,0 +1,12 @@ +[Unit] +Description=Scan for new files +After=postgresql.service +Requires=postgresql.service + +[Service] +# Only run if Nextcloud is running +ExecCondition=/usr/local/bin/nc-occ status -e +ExecStart=/usr/local/bin/nc-occ files:scan --all --home-only +StandardOutput=journal +StandardError=journal +Type=oneshot diff --git a/nextcloud/assets/systemd/nextcloud-scan.timer b/nextcloud/assets/systemd/nextcloud-scan.timer new file mode 100644 index 0000000..3c7466f --- /dev/null +++ b/nextcloud/assets/systemd/nextcloud-scan.timer @@ -0,0 +1,10 @@ +[Unit] +Description=Periodically scan for new files + +[Timer] +OnStartupSec=15min +OnUnitActiveSec=15min +RandomizedDelaySec=60 + +[Install] +WantedBy=timers.target