Browse Source

use systemd timers instead of crontab

master
Mar Alegre 2 weeks ago
parent
commit
86e5463342
  1. 24
      nextcloud/Containerfile
  2. 2
      nextcloud/assets/bugfix/cronfix
  3. 1
      nextcloud/assets/config/misc.config.php
  4. 11
      nextcloud/assets/crontab
  5. 14
      nextcloud/assets/db-updown.service
  6. 9
      nextcloud/assets/systemd/nextcloud-cron.service
  7. 9
      nextcloud/assets/systemd/nextcloud-cron.timer
  8. 12
      nextcloud/assets/systemd/nextcloud-db-dump.service
  9. 8
      nextcloud/assets/systemd/nextcloud-db-dump.timer
  10. 16
      nextcloud/assets/systemd/nextcloud-db-reload.service
  11. 12
      nextcloud/assets/systemd/nextcloud-scan.service
  12. 10
      nextcloud/assets/systemd/nextcloud-scan.timer

24
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

2
nextcloud/assets/bugfix/cronfix

@ -1,2 +0,0 @@
#!/bin/sh
sed -i '/session required pam_loginuid.so/c\#session required pam_loginuid.so' /etc/pam.d/cron

1
nextcloud/assets/config/misc.config.php

@ -1,4 +1,5 @@
<?php
$CONFIG = array(
'htaccess.RewriteBase' => '/',
'maintenance_window_start' => 1,
);

11
nextcloud/assets/crontab

@ -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

14
nextcloud/assets/db-updown.service

@ -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

9
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

9
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

12
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

8
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

16
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

12
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

10
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
Loading…
Cancel
Save