0

関連すると思われる他の多くの 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
4

2 に答える 2

2

perl スクリプト内で i2c へのフル パスが必要です。

$temp = `/full/path/to/i2cget -y 1 0x48 0x0`;
于 2013-04-28T03:06:30.560 に答える
1

cron 環境とコマンド ラインを比較してみてください。

コマンドラインから:

set > command.lis

これを一時的に crontab に追加し、結果が得られたら削除します。

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

( /home/techplex がディレクトリであり、存在すると仮定します。ホームディレクトリは、必要に応じて変更してください。)

これで 2 つのファイルができました。

diff crontab.lis command.lis

あなたの環境で何が違うのかを示します。

于 2013-04-28T03:04:59.260 に答える