#!/bin/bash cd $(dirname ${0}) >/dev/null source inc/main-inc.sh START_TIME=$(date +%s) # Load all sensor scripts and their intervals declare -A SCRIPTS for SCRIPT in $(ls sensors.d/*.sh); do BASENAME="$(basename ${SCRIPT})" eval $(cat "${SCRIPT}" | head -n1) log "Loaded sensor '$(basename ${SCRIPT})', runs every ${INTERVAL} seconds" SCRIPTS["${BASENAME}"]=${INTERVAL} done log "Starting Scheduler routine" if [[ "$@" == *"-qs"* ]]; then log "Will suppress sensor script outputs" export SCRIPTS_QUIET=yes fi while true; do NOW=$(date +%s) DIFF=$(expr ${START_TIME} - ${NOW}) for SCRIPT in "${!SCRIPTS[@]}"; do SCRIPT_EVERY=${SCRIPTS[${SCRIPT}]} if [ $( expr ${DIFF} % ${SCRIPT_EVERY} ) -eq 0 ]; then logAdv "SCHD" "Launching $(basename ${SCRIPT})" source "sensors.d/${SCRIPT}" ${QUIET_SCRIPT_PARAM} & fi done # Wait one second to make sure the if statements don't fire repeatedly # during any specific unix time second, not elegant but works sleep 1 done