acme.sh icon indicating copy to clipboard operation
acme.sh copied to clipboard

Fix "static" cronjob timing with the Docker image

Open Hossy opened this issue 1 year ago • 1 comments

Item 1 (Problem): When the docker image is built (by GitHub), --install creates the cronjob and the random minute/hour selection becomes static for every instance of the image (worldwide) unless manually changed by the user.

Item 2 (Improvement): The two commits for #992 add a tool (cronie) which, at least currently with BusyBox 1.35.0 in Alpine 3.17, is unneeded and can be removed to make the image smaller while still keeping the intent and functionality of #992 (logging acme.sh cron output to the docker log by default).

I created PR #4969 with the following solutions:

Solution 1: Use @reboot cronjob to create the cronjob on first run of the container. In the case where the user has already run --install-cronjob before running the container with 'daemon,' --install-cronjob already doesn't duplicate/recreate the cronjob, so there is no loss of config.

Solution 2: Using BusyBox's crond (remove cronie), pass the -f parameter to run in the foreground which will cause stdout/stderr from cronjobs to print to docker log. crond remains PID 1. Redirecting output specifically to PID 1's stdout and stderr is no longer necessary using crond -f. This could later enable the option with --install-cronjob to create the cronjob without >/dev/null for use cases where the user wanted crond to mail output.

Hossy avatar Jan 26 '24 20:01 Hossy

Using BusyBox's crond (remove cronie), pass the -f parameter

The default crond doesn't handle signals like ctrl+c. If you run the container in forground, and press ctrl+c to terminate the container, you will have to wait to timeout. This also affects docker stop and docker restart commands etc.

That's why the cronjob here is a little complex than normal. See the git history for the file.

Neilpang avatar Jan 28 '24 02:01 Neilpang