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

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
madesta
Сообщения: 1988
Зарегистрирован: 11 июн 2017, 21:47
Решено: 28
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 425 раз
Контактная информация:

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

#1

13 мар 2021, 14:39

Имеется 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

Решение slant » 13 мар 2021, 15:54
Глядя на код - плакал кровавыми слезами.
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). А это случится если хоть один хост откликнется. В принципе пофиг какие символы добавлять в переменную - цифры для наглядности.

Перейти к ответу ➙

Аватара пользователя

symon2014
Сообщения: 5924
Зарегистрирован: 16 дек 2017, 21:59
Решено: 36
Откуда: Феодосия
Благодарил (а): 32 раза
Поблагодарили: 747 раз
Контактная информация:

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

#2

13 мар 2021, 14:56

Не по теме
Так и хочется ляпнуть - &> /dev/null; :-D

Аватара пользователя

slant
Сообщения: 4469
Зарегистрирован: 21 июн 2017, 18:09
Решено: 95
Благодарил (а): 51 раз
Поблагодарили: 1966 раз
Контактная информация:

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

#3

13 мар 2021, 15:54

Глядя на код - плакал кровавыми слезами.
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). А это случится если хоть один хост откликнется. В принципе пофиг какие символы добавлять в переменную - цифры для наглядности.

Аватара пользователя

Автор темы
madesta
Сообщения: 1988
Зарегистрирован: 11 июн 2017, 21:47
Решено: 28
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 425 раз
Контактная информация:

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

#4

14 мар 2021, 01:08

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

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

Аватара пользователя

rogoznik
Сообщения: 10015
Зарегистрирован: 27 июн 2017, 13:36
Решено: 128
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1950 раз
Контактная информация:

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

#5

14 мар 2021, 07:59

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

Закрыто

Вернуться в «Программирование, скриптинг, виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей