Страница 1 из 1

Образование файла 0 размера 0 при запуске скрипта через cron

Добавлено: 13 мар 2021, 14:39
madesta
Имеется 4 компьютера с идентичной ОС LM20.1 xfce При старте каждой из их запускается warpinator
Чтобы 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

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

Выключение 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

Всё работает как задумано. Но при срабатывании скрипта в корневом каталоге образуется файл с именем 0 размером 0 При этом если скрипт запустить не через cron, а просто выполнить, то никакого файла с именем 0 размером 0 не создаётся. Самостоятельно не удаётся найти причину генерации файла 0

Образование файла 0 размера 0 при запуске скрипта через cron

Добавлено: 13 мар 2021, 14:56
symon2014
Не по теме
Так и хочется ляпнуть - &> /dev/null; :-D

Образование файла 0 размера 0 при запуске скрипта через cron

Добавлено: 13 мар 2021, 15:54
slant
Глядя на код - плакал кровавыми слезами.
madesta писал(а):
13 мар 2021, 14:39
warp-cron.sh
Это... я даже не знаю как сказать, чтобы самого себя не банить потом.

Слушай, почитай man pidof
Вместо всего этого кошмара:

Код: Выделить всё

#!/bin/bash
do=/home/minter/Dropbox/scripts
pidof warpinator && $do/modules/warp-check-net.sh
Последняя строка: "если первая команда успешна - выполнить вторую". У pidof "успех" - найденный по имени процесс, один или более. Это т.н. exitcode, а не вывод на экран. exitcode присутствует почти у всех команд и позволяет проверить удачно ли закончился их вызов.

Остальные скрипты тоже с кучей избыточного.
В частности есть команда killall которая принимает не pid процесса а имя команды/программы.

Для warp-check-net.sh, кусок для проверки:

Код: Выделить всё

....
CH=""
ping -c 1 H-1.vot && CH="1"
ping -c 1 H-2.vot && CH="$CH 2"
ping -c 1 H-3.vot && CH="$CH 3"
ping -c 1 H-4.vot && CH="$CH 4"
if [ -n $CH ];
then 
$do/modules/warp-stop.sh
....  
Для ping - успех - наличие хоста.
Конструкция CH="$CH 2" - добавит двойку через пробел к текущей переменной (текст).
if [ -n $CH ] - истинно, если переменная содержит какой-то текст (длинна строки более 0). А это случится если хоть один хост откликнется. В принципе пофиг какие символы добавлять в переменную - цифры для наглядности.

Образование файла 0 размера 0 при запуске скрипта через cron

Добавлено: 14 мар 2021, 01:08
madesta
slant писал(а):
13 мар 2021, 15:54
Глядя на код - плакал кровавыми слезами.
Право, не стоит воспринимать так близко к сердцу самопал для личного внутреннего потребления. Признаю, что когда Всевышний одаривал подарками, мне ума не досталось. Но всё равно пытаюсь каким-то образом "барахтаться", чтобы окончательно мои пенсионные мозги не атрофировались. Хотя какие там мозги: одна извилина и то, знаете, от чего след ... :-D

А вообще, slant, как всегда, на высоте :thumbs: - по делу, доходчиво, с указанием ляпов и ошибок.
Проблема решена, тему можно закрыть.

Образование файла 0 размера 0 при запуске скрипта через cron

Добавлено: 14 мар 2021, 07:59
rogoznik
madesta писал(а):
14 мар 2021, 01:08
тему можно закрыть.
Давно пора самому научиться закрывать свои темы