Автор Тема: [Решено] Crontab не выполняет некоторые скрипты  (Прочитано 5863 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Boris888

Crontab не выполняет некоторые скрипты
Подскажите в чем дело, крон выборочно делает только часть заданий

Например, такой скрип выполняет (пинг роутера и запись ответа в файл)

echo "909"
LOCKFILE=/home/800/999.txt
data555=$(date +"%Y_%m_%d_%H%M%S")
a=`ping -c1 -I wlan0 192.168.1.1`

echo $data555 $a >> ${LOCKFILE}
echo "  " >> ${LOCKFILE}

а вот такой не хочет выполнять (скрипт просто читает файл, ищет переменную AAA= и добавляет счетчик на +1, т.е. было AAA=5 стало AAA=6)
#echo "930"
#create TEST FILE
PLUSFILE=/home/800/000.txt
data777=$(date +"%Y-%m-%d %H:%M:%S")

#file - not found = Alarm8=0
#file - exist = Alarm8 is file + 1
Alarm8=0

#find file
if [ -e ${PLUSFILE} ] ; then
  echo "read  file: " $PLUSFILE

#read string-1
{
read S1
read S2
} < $PLUSFILE
echo "S1: " $S1

#find AAA=
ab1="AAA="

for ((i=0; i < ${#S1} ; i++)) do
  ab2=${S1:i:4}
  #echo $ab2
 
  if [[ $ab1 = $ab2 ]] ; then
      #echo "+ + + + + + + =" $i
      Alarm8=${S1:i+4:4}
      echo $Alarm8
  fi
done   
       
else
  echo "file not found - create file: " $PLUSFILE
  #create file
  echo $data777 10.20.30.40 time=50 "AAA="$Alarm8 " " >  ${PLUSFILE}

fi


Alarm8=$(($Alarm8+1))

#change file
echo $data777 10.20.30.40 time=50 "AAA="$Alarm8 " " >  ${PLUSFILE}
#echo "  " >> ${PLUSFILE}


Вот что написано после невыполненного скрипта
/var/log/syslog
Sep 29 14:08:01 raspberrypi /usr/sbin/cron[2265]: (*system*) RELOAD (/etc/crontab)
Sep 29 14:08:01 raspberrypi /USR/SBIN/CRON[2710]: (root) CMD (   /bin/930)
Sep 29 14:08:01 raspberrypi /USR/SBIN/CRON[2709]: (CRON) info (No MTA installed, discarding output)

В консоли при ручном запуске все скрипты выполняются !
Скрипты лежат в папке /bin
При выполнении в консоли просто пишу 909 или 930

Права на папку /home/800 выставлены 0777
Вот файл
/etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command

08 *    * * *   root    /bin/930 #не работает
09 *    * * *   root    /bin/909 #работает

используй теги code
alsoijw
« Последнее редактирование: 30 Сентябрь 2016, 11:52:03 от Boris888 »
 

Оффлайн alsoijw

Re: Crontab не выполняет некоторые скрипты
« Ответ #1 : 29 Сентябрь 2016, 15:59:06 »
Boris888, а что скрипт должен делать? Я не нашёл там ни одного намёка на ping.
Зы выровняй код, у тебя там в некоторых местах нет отступов.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?
 

Оффлайн ogost

Re: Crontab не выполняет некоторые скрипты
« Ответ #2 : 29 Сентябрь 2016, 18:21:10 »
echo выводит сообщение на stdout, то бишь на консоль, а при запуске крона куда уйдут сообщения?

Оффлайн Boris888

Re: Crontab не выполняет некоторые скрипты
« Ответ #3 : 29 Сентябрь 2016, 20:53:12 »
я выложил два скрипта 909 это пинг с записью в файл - скрипт работает
а 930 это чтение файла и запись этого же файла с изменением (пингов там нет, просто пример того что у меня не получилось) - не работает

я удалил все "echo в консоль" проверил: при запуске ничего не сообщает - крон все равно не выполняет этот скрипт.

вот сообщение в /var/log/syslog
Sep 29 20:57:02 raspberrypi /usr/sbin/cron[2265]: (*system*) RELOAD (/etc/crontab)
Sep 29 20:57:02 raspberrypi /USR/SBIN/CRON[3763]: (root) CMD (   /bin/930)
Sep 29 20:57:02 raspberrypi /USR/SBIN/CRON[3762]: (CRON) info (No MTA installed, discarding output)
« Последнее редактирование: 29 Сентябрь 2016, 21:00:18 от Boris888 »
 

Оффлайн ogost

Re: Crontab не выполняет некоторые скрипты
« Ответ #4 : 30 Сентябрь 2016, 03:58:41 »
На первый взгляд криминала в скрипте не видно. Крон обычно при ошибке выполнения команды шлет мыло руту (ну или определенному юзеру) с описанием проблемы, что-то вроде локальной почтовой системы. А MTA у вас не установлен (судя по выводу у вас raspbian, видимо у них это не предустановлено), поэтому почта не приходит, поэтому в syslog такие сообщения. Проверьте установлен ли exim4, если не ошибаюсь, то exim-daemon-light (exim-daemon-heavy, если опять же не ошибаюсь, используется на полноценных почтовых серверах).

Оффлайн endru

Re: Crontab не выполняет некоторые скрипты
« Ответ #5 : 30 Сентябрь 2016, 06:55:02 »
Зы выровняй код, у тебя там в некоторых местах нет отступов.
Это не питон.
Boris888, что за непонятные циклы? если все лишние строки отбросить получится:
Код: (bash) [Выделить]
#!/bin/bash
PLUSFILE=/home/800/000.txt
data777=$(date +"%Y-%m-%d %H:%M:%S")
Alarm8=0
if [ -e ${PLUSFILE} ] ; then
        Alarm8=`awk '{print $5}' $PLUSFILE | sed 's/AAA=//g'`
fi
Alarm8=$(($Alarm8+1))
echo $data777 10.20.30.40 time=50 "AAA="$Alarm8 " " >  ${PLUSFILE}
« Последнее редактирование: 30 Сентябрь 2016, 06:56:44 от endru »
 
Пользователи, которые поблагодарили этот пост: Boris888

Оффлайн Boris888

Re: Crontab не выполняет некоторые скрипты
« Ответ #6 : 30 Сентябрь 2016, 11:49:13 »
Большое спасибо ! Теперь всё работает, и код короче моего в 5 раз !
и в Кроне тоже работает.

я на Линуксе (Raspberry) всего пол года сижу (да и то по выходным), все что я написал взял на основе
http://www.opennet.ru/docs/RUS/bash_scripting_guide/c4875.html#LOOPS1
там подробно про циклы и ветвления написано, по русски более подробно я нигде не нашел.

я только строку не понял которую Вы мне написали
Alarm8=`awk '{print $5}' $PLUSFILE | sed 's/AAA=//g'`

а у меня проблема была отсутствии отступов ? в консоли почему то мой (нерациональный) код выполнялся правильно.
 

Оффлайн endru

Re: [Решено] Crontab не выполняет некоторые скрипты
« Ответ #7 : 30 Сентябрь 2016, 12:21:54 »
Boris888, проблема возможно в интерпретаторе, я не знаю какой используются в "малинке" по умолчанию. Поэтому рекомендую жестко прописывать интерпретатор!
Пишешь скрипт на баше? - Указывай это в первой строке скрипта #!/bin/bash
В каждом интерпретаторе есть свои небольшие тонкости...

Проверить какой интерпретатор используется в консоли а какой в кроне можно командой:
echo $SHELLсделай перенаправление вывода в файл, например, и посмотри что ответит cron

Cообщение объединено 30 Сентябрь 2016, 12:31:32
я только строку не понял которую Вы мне написали
Alarm8=`awk '{print $5}' $PLUSFILE | sed 's/AAA=//g'`
AWK мощный инстумент, рекомендую прочитать про него и про SED.
конкретно в этом примере awk '{print $5}' $PLUSFILE считывает файл и берет из него только 5 колонку, разделителем данных в данном случае будет "пробел", можно указывать любой друго разделитель с помощью ключа -F.
Дальше sed 's/AAA=//g' - удаляет не нужные AAA= из переменной
Spoiler: ShowHide
разбираем исходные данные: имеем файл с содержанием: 2016-09-30 10:54:16 10.20.30.40 time=50 AAA=30, после применения:
awk '{print $5}' $PLUSFILE
получим результат:
AAA=30
Дальше нам нужно оставить только цифры, с помощью конвеера и sed удаляем лишнии символы:
awk '{print $5}' $PLUSFILE | sed 's/AAA=//g'
30
« Последнее редактирование: 30 Сентябрь 2016, 12:31:32 от endru »
 

Оффлайн alsoijw

Re: [Решено] Crontab не выполняет некоторые скрипты
« Ответ #8 : 01 Октябрь 2016, 15:29:45 »
Это не питон.
Я проверял скрипт на остутствии некоторых ошибок. Я не умею читать не отформатированный код.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?
 

Оффлайн ogost

Re: [Решено] Crontab не выполняет некоторые скрипты
« Ответ #9 : 01 Октябрь 2016, 17:07:30 »
alsoijw, кстати да, за мной тоже такое наблюдается.

Оффлайн Boris888

Re: [Решено] Crontab не выполняет некоторые скрипты
« Ответ #10 : 01 Октябрь 2016, 22:06:03 »
а подскажите как перенаправить вывод в файл,
у меня около 20 скриптов для автоматизации сети, L2TP, и фотографий в заданное время.
в Кроне работает примерно 2 из 20
в консоли при ручном наборе все великолепно работает...

а мне до моей "Малины" ехать 7 километров при отключении VPN-L2TP
чтобы просто набрать там команду (почему то несколько раз... в этом и причина писания скриптов)
/etc/init.d/networking restart

root@raspberrypi:/# echo $SHELL
/bin/bash
« Последнее редактирование: 01 Октябрь 2016, 22:19:26 от Boris888 »
 

Оффлайн alsoijw

Re: [Решено] Crontab не выполняет некоторые скрипты
« Ответ #11 : 01 Октябрь 2016, 22:17:55 »
Boris888, имя-команды > путь\ к\ файлу
Cообщение объединено 01 Октябрь 2016, 22:18:35
"\ " это я пробелы экранировал
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?
 

Оффлайн Boris888

Re: [Решено] Crontab не выполняет некоторые скрипты
« Ответ #12 : 01 Октябрь 2016, 23:36:24 »
скопировал с действующего скрипта, и поставил в начало нерабочего скрипта (хотя там и стояло, но кажется с пробелом в начале)
#!/bin/bash
теперь у меня работает даже мой первый скрипт, который был слишком длинно и нерационально написан.
Ура - все получилось !
« Последнее редактирование: 01 Октябрь 2016, 23:40:33 от Boris888 »
 

Теги:
 

[Решено] Как задать права на доступ к разделу диска?

Автор Demetrum24579

Ответов: 9
Просмотров: 365
Последний ответ 12 Август 2020, 16:58:34
от ecc83
[Решено] Обновление debian 6 (squeeze) до 7 (wheezy). Вопросы.

Автор Vic

Ответов: 30
Просмотров: 7548
Последний ответ 06 Февраль 2014, 10:04:39
от Malaheenee
[решено]Подкастинг в linux

Автор redVi

Ответов: 5
Просмотров: 1806
Последний ответ 14 Октябрь 2012, 14:37:07
от redVi
[Решено] Помогите с установкой драйвера на видеокарту.

Автор wolfram

Ответов: 45
Просмотров: 8820
Последний ответ 10 Сентябрь 2015, 16:39:30
от wolfram
[Решено] ошибка при установке linux-image-3.2.0-4-amd64_3.2.35-2_amd64.deb

Автор Yakumo

Ответов: 1
Просмотров: 4283
Последний ответ 09 Май 2013, 16:38:40
от Tammy