You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.3 KiB
Bash

#!/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