从crontab运行的perl程序产生错误的值i2cget raspberry pi

时间:2013-04-28 02:55:19

标签: perl cron crontab raspberry-pi i2c

我已经阅读了其他许多与Q& A相似的内容,但是我们无法在这里找到问题。

我在Raspberry Pi上使用了以下perl脚本。我希望将温度数据从I2C传感器记录到sqlite3数据库。从命令行运行时,下面的程序工作,但从cron运行时则不行。

我假设从cron运行时i2cget的值不正确,但我不知道如何弄清楚我的环境i2cget需要哪些部分才能正常工作。

#!/usr/bin/perl

#printf '%d\n' `i2cget -y 1 0x48 0x0`
$temp = `i2cget -y 1 0x48 0x0`;
#$temp = sprintf("%d\n", $temp);
$temp = hex($temp);
#print $temp, "\n";

use DBI;

#/home/techplex/ece331/project2_temp_data_grapher/
$dbh = DBI->connect( "dbi:SQLite:tempdata.db" ) or die "Cannot connect: $DBI::errstr";

$dbh->do( "CREATE TABLE IF NOT EXISTS temperature (timestamp datetime, temperature float);" );
$dbh->do( "INSERT INTO temperature (timestamp, temperature) VALUES (datetime('now', 'localtime'), $temp);" );

$dbh->disconnect;

我已将此行添加到我的crontab:

*/1 * * * * cd /home/techplex/temp_data_grapher; ./datalogger.pl

2 个答案:

答案 0 :(得分:2)

您需要在perl脚本中使用i2c的完整路径:

$temp = `/full/path/to/i2cget -y 1 0x48 0x0`;

答案 1 :(得分:1)

尝试分析cron环境与命令行:

从命令行:

set > command.lis

暂时将其添加到您的crontab中,在获得结果后将其删除:

* * * * * set > /home/techplex/crontab.lis

(假设/ home / techplex是一个目录并且存在。并且是您的主目录,根据需要进行更改。)

现在你有两个文件。

diff crontab.lis command.lis

将向您显示您环境中的不同之处。