2015-06-14 4 views
0

Когда я набираю следующее в терминале ./DHT 11 4, он работает и сохраняет все данные в mysql правильно.Crontab не может зацикливаться

id (1), temp (29), hum (37), date (2015...) 

Когда я добавляю его в кронтаб, он работает неправильно.

id (1), temp (0 or empty), hum (0 or empty), date (2015...) 

ш Сценарий:

#!/bin/bash 
#DHT11 
SCRIPT="/var/www/ErnestynoFailai/scripts/DHT 11 4" 
#DHT22 
#SCRIPT="/root/to/folder/DHT 22 4" 
#AM2302 
#SCRIPT="/root/to/folder/DHT 2302 4" 
TEMP_AND_HUM="" 
while [[ $TEMP_AND_HUM == "" ]] 
do 
    TEMP_AND_HUM=`$SCRIPT | grep "Temp"` 
done 
TEMP=`echo "$TEMP_AND_HUM" | cut -c8-9` 
HUM=`echo "$TEMP_AND_HUM" | cut -c21-22` 
myqsl_user="root" 
myqsl_pw="pw" 
myqsl_database="DHT" 
today=`date +"%Y-%m-%d %T"` 
query="INSERT INTO DHT11 (temp, hum, date) VALUES ('$TEMP', '$HUM', '$today');" 
mysql --user=$myqsl_user --password=$myqsl_pw $myqsl_database << EOF 
$query 
EOF 

И кронтаб:

*/1 * * * * /var/www/ErnestynoFailai/scripts/write_DHT11_to_db.sh 

Что может быть не так?

+1

Вы пробовали отладить его? Установите debug ('set -x') и перенаправьте стандартную ошибку в файл журнала. – rghome

ответ

3

Долгое время назад, это произошло на некоторых системах, cron не начинаются скрипты, только исполняемые файлы. Таким образом, вы должны были указать явно который интерпретатор использовать в кронтаб линии

*/1 * * * * /bin/bash /var/www/ErnestynoFailai/scripts/write_DHT11_to_db.sh 

Я не проверял, так как, и я не знаю, какую систему вы используете. В debian/jessie в man-файле crontab 5 сказано, что команда выполняется /bin/sh или оболочкой, указанной переменной SHELL в файле crontab.

См. https://superuser.com/questions/81262/how-to-execute-shell-script-via-crontab

+0

Это вряд ли будет проблемой. Сценарий в вопросе имеет правильную строку '#!/Bin/bash' вверху, а crontab выполняет ее напрямую. Команда '.../write_DHT11_to_db.sh' подается в'/bin/sh' для выполнения, но sh (или, скорее, ядро) будет соблюдать '#!/Bin/bash' и использовать'/bin/bash 'для выполнения скрипта. Вся суть механизма '#!' Заключается в том, что скрипты могут быть взаимозаменяемы с бинарными исполняемыми файлами. –

+0

О, спасибо. Он работает с: */1 * * * */bin/bash/var/www/ErnestynoFailai/scripts/write_DHT11_to_db.sh Я использую RASPBIAN Debian Wheezy. – Ernestyno

0

Возможно, у вас есть проблема с различными настройками среды. Для отладки, легкий способ включить строку следующего в начало вашего скрипта:

set >/tmp/envlog.txt 

Затем сравните его содержимое однажды созданное при запуске сценария непосредственно и один раз кронтаба.

Другим способом для отладки:

exec >/tmp/scriptoutput.txt 2>&1 
set -x 

С этой командой, полный вывод вашего скрипта будет перенаправлен на указанный файл.

Чаще всего переменная PATH неверна. Вместо

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 

Вы часто только есть уменьшает ее вариант:

/usr/sbin:/usr/bin:/sbin:/bin 

Это означает, что некоторые команды не могут быть найдены. Если вы нашли команду, которая не работает, попробуйте выяснить, где он находится с помощью:

$ which mysql 
/usr/bin/mysql 
Смежные вопросы