Initial implementation of the nextcloud cronjob docker image
This commit is contained in:
parent
632211b91e
commit
04a4297164
5 changed files with 66 additions and 0 deletions
14
Dockerfile
Normal file
14
Dockerfile
Normal file
|
@ -0,0 +1,14 @@
|
|||
FROM alpine
|
||||
|
||||
RUN apk add --no-cache docker bash
|
||||
|
||||
ENV NEXTCLOUD_CONTAINER_NAME=
|
||||
ENV NEXTCLOUD_PROJECT_NAME=
|
||||
ENV NEXTCLOUD_CRON_MINUTE_INTERVAL=15
|
||||
|
||||
COPY scripts/*.sh /
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
HEALTHCHECK --timeout=5s \
|
||||
CMD ["/healthcheck.sh"]
|
5
scripts/cron-tasks.sh
Executable file
5
scripts/cron-tasks.sh
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
|
||||
containerName="$1"
|
||||
docker exec "$containerName" php -f /var/www/html/cron.php
|
30
scripts/entrypoint.sh
Executable file
30
scripts/entrypoint.sh
Executable file
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
|
||||
if [[ -z "$NEXTCLOUD_CONTAINER_NAME" ]]; then
|
||||
echo "NEXTCLOUD_CONTAINER_NAME is a required variable"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -z "$NEXTCLOUD_PROJECT_NAME" ]]; then
|
||||
containerName="${NEXTCLOUD_PROJECT_NAME}_"
|
||||
else
|
||||
matchEnd=","
|
||||
fi
|
||||
|
||||
containerName="${containerName}${NEXTCLOUD_CONTAINER_NAME}"
|
||||
|
||||
# Get the ID of the container so we can exec something in it later
|
||||
export containerId=$(/find-container.sh "$containerName" "$matchEnd")
|
||||
|
||||
if [[ -z "$containerId" ]]; then
|
||||
echo "ERROR: Unable to find the Nextcloud container"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$containerId" > /tmp/containerId
|
||||
|
||||
echo "*/$NEXTCLOUD_CRON_MINUTE_INTERVAL * * * * /cron-tasks.sh $containerId" \
|
||||
> /var/spool/cron/crontabs/root
|
||||
|
||||
exec crond -f -l 0 -L /dev/stdout
|
9
scripts/find-container.sh
Executable file
9
scripts/find-container.sh
Executable file
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
containerName="$1"
|
||||
matchEnd="$2"
|
||||
|
||||
docker ps --format '{{.Names}},{{.ID}}' | \
|
||||
egrep "^${containerName}${matchEnd}" | \
|
||||
awk '{split($0,a,","); print a[2]}'
|
8
scripts/healthcheck.sh
Executable file
8
scripts/healthcheck.sh
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env bash
|
||||
set -x
|
||||
|
||||
# Make sure cron daemon is still running
|
||||
ps -o comm | grep crond || exit 1
|
||||
|
||||
# Make sure the target container is still running/available
|
||||
docker inspect -f '{{.State.Running}}' "$(cat /tmp/containerId)" | grep true || exit 1
|
Loading…
Reference in a new issue