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
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 |