#!/bin/bash cd $(dirname ${0}) >/dev/null source inc/main-inc.sh # Test mode, only run specified sensor script once if [[ "${1}" == *".sh" ]]; then log -t "TEST" "Test mode, only running sensor script '${1}'" source "sensors.d/${1}" log -t "TEST" "Sensor script quit with exit code $?" exit 0 fi 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 log -t "SCHD" "Launching $(basename ${SCRIPT})" source "sensors.d/${SCRIPT}" & 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