Crontab无法循环

时间:2015-06-14 20:29:03

标签: shell cron

当我在终端./DHT 11 4中输入以下内容时,它可以正常工作并将所有数据保存到mysql。

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

当我将它添加到crontab时,它无法正常工作。

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

sh script:

#!/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

和crontab:

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

有什么不对?

2 个答案:

答案 0 :(得分:3)

很久以前,它发生在一些cron没有启动shell脚本但只启动二进制文件的系统上。所以你必须指明明确在crontab行中使用哪个解释器

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

我从未检查过,而且我不知道你正在使用什么系统。在debian / jessie上,在crontab 5联机帮助页中告诉该命令由/bin/sh执行,或由SHELL文件中的crontab变量指定的shell。

请参阅https://superuser.com/questions/81262/how-to-execute-shell-script-via-crontab

答案 1 :(得分:0)

可能您遇到了不同环境设置的问题。对于调试,一种简单的方法是在脚本开头包含如下所示的行:

set >/tmp/envlog.txt

然后比较直接运行脚本时创建的内容和使用crontab创建的内容。

调试的另一种方法是:

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