Hi, thanks … sorry, only saw it today. Will have a look into it and probably create a new version soon. I also plan to improve it further.
1 Like
This version I shared in this thread days ago is far better, it let you control hours of send
#!/bin/bash
set -euo pipefail
########################################
USER CONFIG – EDIT THIS SECTION
########################################
Paths
PHP_BIN=“/usr/bin/php”
MAUTIC_BIN=“/mautic_installation_dir/marketautomation/bin/console”
LOCKFILE=“/mautic_installation_dir/var/lock/consume_mautic.lock”
Lock timeout (seconds)
LOCKFILE_TIMEOUT=50
Working days (ISO: 1=Mon … 7=Sun)
Default: Monday–Friday
WORKING_DAYS=(“1” “2” “3” “4” “5”)
Time window (24h format, server time)
START_HOUR inclusive, END_HOUR exclusive.
Example: 8–18 = from 08:00 up to 17:59
START_HOUR=8
END_HOUR=18
Burst & run limits
INTERVAL=2 # seconds between bursts
PER_BURST=6 # messages per burst
HARD_LIMIT=50 # max seconds this worker is allowed to run per execution
Messenger limits
TIME_LIMIT=1 # seconds for messenger:consume
MEMORY_LIMIT=“1096M”
########################################
DO NOT EDIT BELOW THIS LINE
########################################
Day & time restriction
DOW=$(date +%u) # 1=Mon … 7=Sun
HOUR=$(date +%H) # 00..23
Check working day
IS_WORKING_DAY=false
for d in “${WORKING_DAYS[@]}”; do
if [ “$d” = “$DOW” ]; then
IS_WORKING_DAY=true
break
fi
done
if [ “$IS_WORKING_DAY” = false ]; then
echo “Not a working day. Allowed days: ${WORKING_DAYS[*]}. Exiting…”
exit 0
fi
Check time window
if [ “$HOUR” -lt “$START_HOUR” ] || [ “$HOUR” -ge “$END_HOUR” ]; then
echo “Outside allowed time window (${START_HOUR}:00–${END_HOUR}:00). Exiting…”
exit 0
fi
Lock handling
if [ -e “$LOCKFILE” ]; then
LOCKFILE_AGE=$(( $(date +%s) - $(stat -c %Y “$LOCKFILE”) ))
if [ “$LOCKFILE_AGE” -ge “$LOCKFILE_TIMEOUT” ]; then
echo “Lock older than ${LOCKFILE_TIMEOUT}s. Removing stale lock…”
rm -f “$LOCKFILE”
else
echo “Process already running (lock younger than ${LOCKFILE_TIMEOUT}s). Exiting…”
exit 1
fi
fi
touch “$LOCKFILE”
trap ‘rm -f “$LOCKFILE”’ EXIT INT TERM
Burst sending loop
SENT=0
START_TS=$(date +%s)
while (( $(date +%s) - START_TS < HARD_LIMIT )); do
“$PHP_BIN” “$MAUTIC_BIN” messenger:consume email
–limit=“$PER_BURST”
–time-limit=“$TIME_LIMIT”
–memory-limit=“$MEMORY_LIMIT”
SENT=$((SENT + PER_BURST))
NOW=$(date +%s)
If sleeping would push us past HARD_LIMIT, break without sleeping
if (( NOW - START_TS + INTERVAL >= HARD_LIMIT )); then
break
fi
sleep “$INTERVAL”
done
echo “Total planned in ~${HARD_LIMIT}s (bursts of $PER_BURST every ${INTERVAL}s): $SENT”
exit 0