From 2b5bd3cd888021beba630f256d965e361d15f1ce Mon Sep 17 00:00:00 2001 From: tituspijean Date: Wed, 4 Jan 2023 12:04:46 +0100 Subject: [PATCH] Implement random cron schedule --- conf/aeneria.cron | 2 +- scripts/_common.sh | 11 +++++++++++ scripts/install | 3 +++ scripts/upgrade | 8 ++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/conf/aeneria.cron b/conf/aeneria.cron index 6da777c..0c8ba2e 100644 --- a/conf/aeneria.cron +++ b/conf/aeneria.cron @@ -1 +1 @@ -*/20 * * * * __APP__ /usr/bin/php__PHPVERSION__ __FINALPATH__/bin/console aeneria:fetch-data +__MINUTES__ __HOUR__-23/3 * * * __APP__ /usr/bin/php__PHPVERSION__ __FINALPATH__/bin/console aeneria:fetch-data diff --git a/scripts/_common.sh b/scripts/_common.sh index 8da29ca..9395a7d 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -12,6 +12,17 @@ pkg_dependencies="apt-transport-https postgresql postgresql-contrib php${YNH_PHP # PERSONAL HELPERS #================================================= +# Assign two variables: +# minutes: random value between 00 and 59 (MM) +# hour: random value between 0 and 2 +# It is used for the cronjob, so that it runs every 3 hours starting at 00:MM, 01:MM, or 02:MM. +generate_random_minutes_hour () { + minutes="$(ynh_string_random --length=1 --filter=0-5)$(ynh_string_random --length=1 --filter=0-9)" + hour="$(ynh_string_random --length=1 --filter=0-2)" + ynh_app_setting_set --app=$app --key=minutes --value=$minutes + ynh_app_setting_set --app=$app --key=hour --value=$hour +} + #================================================= # EXPERIMENTAL HELPERS #================================================= diff --git a/scripts/install b/scripts/install index fb28664..09b226d 100644 --- a/scripts/install +++ b/scripts/install @@ -149,6 +149,9 @@ popd #================================================= ynh_script_progression --message="Setuping a cron..." --weight=1 +# Generate random running schedule, and save $hour and $minutes as app parameters +generate_random_minutes_hour + ynh_add_config --template="../conf/aeneria.cron" --destination="/etc/cron.d/$app" chown root: "/etc/cron.d/$app" chmod 644 "/etc/cron.d/$app" diff --git a/scripts/upgrade b/scripts/upgrade index a9be555..c857551 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -25,6 +25,8 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) deskey=$(ynh_app_setting_get --app=$app --key=deskey) db_user="$db_name" +hour=$(ynh_app_setting_get --app=$app --key=hour) +minutes=$(ynh_app_setting_get --app=$app --key=minutes) #================================================= # CHECK VERSION @@ -66,6 +68,12 @@ if [ -z "$final_path" ]; then ynh_app_setting_set --app=$app --key=final_path --value=$final_path fi +# If minutes or hour do not exist, create them +if [ -z "$minutes" ] || [ -z "$hour" ]; then + # Generate random running schedule, and save $hour and $minutes as app parameters + generate_random_minutes_hour +fi + # Cleaning legacy permissions if ynh_legacy_permissions_exists; then ynh_legacy_permissions_delete_all