当我在终端./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
有什么不对?
答案 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