Drastically simplifies setting up cron within ytdl-sub. Below is the documentation which is available in readthedocs, and a section on how to migrate from the old way to this.
## New Cron Documentation
Cron is preconfigured in every ytdl-sub docker container. Enable by adding the following ENV variables to your docker setup.
```
services:
ytdl-sub:
environment:
- CRON_SCHEDULE="0 */6 * * *"
- CRON_RUN_ON_START=false
```
- CRON_SCHEDULE follows the standard [cron scheduling syntax](https://crontab.guru/#0_*/6_*_*_*). The above value will run the script once every 6 hours.
- CRON_RUN_ON_START toggles whether to run your cron script on container start.
The cron script will reside in the main directory with the file name `cron`. Cron logs should show when viewing the Docker logs.
## Migrating Existing Cron Setup
Containers' cron files will remain intact until you add the `CRON_SCHEDULE` variable. Once you add that with your preferred schedule, it will write that value to /config/crontabs/abc and create a new file `cron` within your working directory. Simply copy everything from your existing `run_cron` script into `cron`.
If you have the ENV variable `DOCKER_MODS` in your docker-compose, remove it. It is now included by default. Not removing this will prevent cron logs from showing in your docker container logs.
69 lines
2.3 KiB
Text
69 lines
2.3 KiB
Text
#!/usr/bin/with-contenv bash
|
|
|
|
echo "Starting ytdl-sub..."
|
|
|
|
# copy config
|
|
[[ ! -e "$DEFAULT_WORKSPACE/config.yaml" ]] && \
|
|
mkdir -p "$DEFAULT_WORKSPACE" && \
|
|
cp /defaults/config.yaml "$DEFAULT_WORKSPACE/config.yaml"
|
|
[[ ! -e "$DEFAULT_WORKSPACE/subscriptions.yaml" ]] && \
|
|
mkdir -p "$DEFAULT_WORKSPACE" && \
|
|
cp /defaults/subscriptions.yaml "$DEFAULT_WORKSPACE/subscriptions.yaml"
|
|
[[ ! -d "$DEFAULT_WORKSPACE/examples" ]] && \
|
|
mkdir -p "$DEFAULT_WORKSPACE/examples" && \
|
|
cp -r /defaults/examples/* "$DEFAULT_WORKSPACE/examples"
|
|
|
|
[[ ! -e "/config/.bashrc" ]] && \
|
|
echo "alias ls='ls --color=auto'" > /config/.bashrc && \
|
|
echo "cd ." >> /config/.bashrc
|
|
|
|
# permissions
|
|
chown -R ${PUID:-abc}:${PGID:-abc} \
|
|
/config
|
|
|
|
# set up cron
|
|
if [ "$CRON_SCHEDULE" != "" ] ; then
|
|
[[ ! -e "$CRON_SCRIPT" ]] && \
|
|
cp /defaults/cron "$CRON_SCRIPT"
|
|
|
|
# create cron script wrapper
|
|
echo '#!/bin/bash' > "$CRON_WRAPPER_SCRIPT"
|
|
echo "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" >> "$CRON_WRAPPER_SCRIPT"
|
|
echo "cd \"$DEFAULT_WORKSPACE\"" >> "$CRON_WRAPPER_SCRIPT"
|
|
echo ". \"$CRON_SCRIPT\" | tee -a \"$LOGS_TO_STDOUT\"" >> "$CRON_WRAPPER_SCRIPT"
|
|
chmod +x "$CRON_WRAPPER_SCRIPT"
|
|
chown abc:abc "$CRON_WRAPPER_SCRIPT"
|
|
|
|
# Set the crontab file to the schedule, cleanly
|
|
CRON_SCHEDULE_CLEAN="${CRON_SCHEDULE//\"/}"
|
|
CRON_SCHEDULE_CLEAN="${CRON_SCHEDULE_CLEAN//\'/}"
|
|
|
|
echo "# min hour day month weekday command" > /config/crontabs/abc
|
|
echo "$CRON_SCHEDULE_CLEAN $DEFAULT_WORKSPACE/.cron_wrapper" >> /config/crontabs/abc
|
|
|
|
chmod +x "$CRON_SCRIPT"
|
|
chown abc:abc "$CRON_SCRIPT"
|
|
|
|
crontab -u abc /config/crontabs/abc
|
|
|
|
CRON_SUCCESS=$?
|
|
if [ $CRON_SUCCESS -eq 0 ] ; then
|
|
echo "Cron enabled with schedule $CRON_SCHEDULE_CLEAN"
|
|
|
|
if [ "$CRON_RUN_ON_START" = true ] ; then
|
|
echo "Running cron script on start"
|
|
. "$CRON_WRAPPER_SCRIPT"
|
|
fi
|
|
else
|
|
echo "Error in CRON_SCHEDULE definition, disabling cron."
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "CRON_SCHEDULE not specified, disabling cron."
|
|
echo "# min hour day month weekday command" > /config/crontabs/abc
|
|
echo "" >> /config/crontabs/abc
|
|
fi
|
|
|
|
# always create cron log file, after cron runs
|
|
# on start to not tail it again
|
|
echo "" > "$LOGS_TO_STDOUT"
|