Чтобы warpinator не "молотил" когда все остальные компьютеры выключены каждые 30 минут проверяется доступность других компьютеров. Если имеется хотя бы один ответ, то warpinator продолжает работать. Если нет ответа ни от одного из остальных компьютеров, то подаётся команда на выключение warpinator
*/30 * * * * /home/minter/Dropbox/scripts/modules/warp-cron.sh
warp-cron.sh
Проверка состояния warpinator: включен/выключен. Если включен, то переход к проверке доступности сетевых узлов.
#!/bin/bash
do=/home/minter/Dropbox/scripts
info=$do/temp/warpinator.txt
if [ $(pgrep warpinator)>'0' ];
then
echo "1" > $info
else
echo "0" > $info
fi
value=`cat $info`
if [ $value -eq 0 ];
then
:
else
$do/modules/warp-check-net.sh
fi
exit
do=/home/minter/Dropbox/scripts
info=$do/temp/warpinator.txt
if [ $(pgrep warpinator)>'0' ];
then
echo "1" > $info
else
echo "0" > $info
fi
value=`cat $info`
if [ $value -eq 0 ];
then
:
else
$do/modules/warp-check-net.sh
fi
exit
warp-check-net.sh проверяет сетевые узлы через ответ ping по именам хостов (компьютеров). Имена хостов сопоставлены IP через DNS. При положительном ответе записывается значение 1, при отрицательном - 0. Далее производится суммирование ответов, которое потом считывается. Если сумма равна 0 (нет ответов от хостов), то warpinator выключается.
#!/bin/bash
day=`date '+%d'`
do=/home/minter/Dropbox/scripts
log=/home/minter/Reports/system/$day.txt
if ping -c 1 H-3.vot &> /dev/null;
then
echo "1" > $do/temp/h-3.txt
else
echo "0" > $do/temp/h-3.txt
fi
if ping -c 1 H-2.vot &> /dev/null;
then
echo "1" > $do/temp/h-2.txt
else
echo "0" > $do/temp/h-2.txt
fi
if ping -c 1 H-8.vot &> /dev/null;
then
echo "1" > $do/temp/h-8.txt
else
echo "0" > $do/temp/h-8.txt
fi
h2=`cat $do/temp/h-2.txt`
h3=`cat $do/temp/h-3.txt`
h8=`cat $do/temp/h-8.txt`
echo "$(( $h2 + $h3 + $h8 ))" > $do/temp/all.txt
net=`cat $do/temp/all.txt`
if [ $net -eq 0 ];
then
$do/modules/warp-stop.sh
else
time=`date '+%H.%M.%S'`
echo "$time -- warpinator is active" >> $log
fi
exit
day=`date '+%d'`
do=/home/minter/Dropbox/scripts
log=/home/minter/Reports/system/$day.txt
if ping -c 1 H-3.vot &> /dev/null;
then
echo "1" > $do/temp/h-3.txt
else
echo "0" > $do/temp/h-3.txt
fi
if ping -c 1 H-2.vot &> /dev/null;
then
echo "1" > $do/temp/h-2.txt
else
echo "0" > $do/temp/h-2.txt
fi
if ping -c 1 H-8.vot &> /dev/null;
then
echo "1" > $do/temp/h-8.txt
else
echo "0" > $do/temp/h-8.txt
fi
h2=`cat $do/temp/h-2.txt`
h3=`cat $do/temp/h-3.txt`
h8=`cat $do/temp/h-8.txt`
echo "$(( $h2 + $h3 + $h8 ))" > $do/temp/all.txt
net=`cat $do/temp/all.txt`
if [ $net -eq 0 ];
then
$do/modules/warp-stop.sh
else
time=`date '+%H.%M.%S'`
echo "$time -- warpinator is active" >> $log
fi
exit
Выключение warpinator warp-stop.sh
#!/bin/bash
day=`date '+%d'`
log=/home/minter/Reports/system/$day.txt
warp="$(pidof warpinator)"
kill -15 ${warp}
time=`date '+%H.%M.%S'`
echo "$time -- warpinator stoped" >> $log
export DISLPAY=:0 && notify-send --icon=/home/minter/.local/share/icons/gnome/48x48/emblems/emblem-info3-violet.png "Остановка Warpinator"
exit
day=`date '+%d'`
log=/home/minter/Reports/system/$day.txt
warp="$(pidof warpinator)"
kill -15 ${warp}
time=`date '+%H.%M.%S'`
echo "$time -- warpinator stoped" >> $log
export DISLPAY=:0 && notify-send --icon=/home/minter/.local/share/icons/gnome/48x48/emblems/emblem-info3-violet.png "Остановка Warpinator"
exit
Всё работает как задумано. Но при срабатывании скрипта в корневом каталоге образуется файл с именем 0 размером 0 При этом если скрипт запустить не через cron, а просто выполнить, то никакого файла с именем 0 размером 0 не создаётся. Самостоятельно не удаётся найти причину генерации файла 0