crontab 无法循环

Crontab can't loop

当我在终端 ./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 脚本:

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

有什么问题吗?

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

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

很久以前,在某些系统上发生 cron 没有启动 shell 脚本,只有二进制文件。因此,您必须 明确地 在 crontab 行

中指明要使用哪个解释器
 */1 * * * * /bin/bash /var/www/ErnestynoFailai/scripts/write_DHT11_to_db.sh

从那以后我就没查过了,也不知道你用的是什么系统。在 debian/jessie 上,crontab 5 联机帮助页中告知该命令由 /bin/shcrontab 中的 SHELL 变量指定的 shell 执行文件。

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