おはようございます。じぇいかわさきです。
昨日までに実験してきて、一定時間でプログラムを実行させてDHT11からデータを取得する方法。
cronを設定したのは良いが、Active表示は問題ないが実際には動いていない件。
いろいろと調査をしていった、と言うか記述内容をもう一度チェックしてみたら、やっぱり間違っていた。
プログラムってやっぱり正しいね。

cronが思うように動かない3つの理由
crontabで、一定時間でプログラムを動作させるためには、重要な事が3つある
- crontabの記述方法が間違っていないか?
- 実行させるプログラムのパスは正しいか?
- 実行させるプログラムの権限は正しいか?
いずれも、Linuxをよく知っている人であれば、特に問題が無いと思うのだが、Windowsを使っている人やMacの人だと意味が分からない部分もあると思う。
しかし、基本的にはどんなOSでも同じことなんだよね。
[ads]
1.crontabの記述方法
もう一度自分で記述したcrontabの記述内容を確認してみた。
《設定抜粋》
/10 * * * * ‘/home/pi/rasptemp/rasptemp.py’
前回記述した内容は上記なのだが、もう一度crontabの記述方法を確認してみた。
crontabの各*の意味は以下のようになっている
分 時 日 月 曜日 <実行コマンド>
よく見ると、自分は大きな過ちを2つ犯していた。
1つ目
分 時 日 月 曜日に対して、自分は10分毎にプログラムを動かすようにしたかった。
従って、自分としては”/10 * * * *“書いたのだが、これでは間違っているようだ。
正しくは、”*/10 * * * *“と書かなければいけなかったみたい。
2つ目
こいつもかなりトンチンカンな記述をしたようだ。
実行コマンドとして、’/home/pi/rasptemp/rasptemp.py’に記述したのだが、確かに動かすプログラムと、それが格納されているDIRへのパスは正しく記述されている。
しかし、肝心のこのプログラムを実行するプログラムコマンドの記述を忘れたのだ。
正確に書くなら以下のようになる。
python3 /home/pi/rasptemp/rasptemp.py
これが正しい記述内容だ。
従って、crontabの正しい記述は以下の通りとなる。
《設定抜粋》
*/10 * * * * python3 /home/pi/rasptemp/rasptemp.py
2.実行させるプログラムのパスは正しいか?
プログラムのパスは正しく、実行プログラム名が記述されていなかっただけだった。
3.実行させるプログラムの権限は正しいか?
こちらも、既に実行権は与えられていたので、こちらも問題なし。
結果的に、実際に問題となったのがcrontabの書き方だった。
修正後に実行してみて
crontabの記述を修正して、今度は問題なさそうなので、半日くらい放置してみた。

今度は間違っていなかったようで、10分毎に前回のデータに追記した形でデータが保存されている。
[ads]
同時に、新たに蓄積されたCSVファイルをMariaDBにインポートして問題ない事を確認してみた。

Queryの結果を見ると、データは全部で75個存在しており、そのうち11個は前回にインポート済みのデータだったので、64個のデータが取り込まれて、11個のデータはスキップされた。
この結果を見る限り、データ自体に重複は発生していないので、指定した通りにPythonのプログラムは動いているようですね。
MariaDBにインポートされたデータを、SQL文で呼び出し内容が間違っていないのかを確認してみた。

間違いなくテーブルにデータは格納されているようです。
これで、自動で温湿度データを採取する仕組みは出来上がりました。
まとめ
cronを用いて、DHT11からデータを自動的に取得する仕組みは完成しました。
今回もまた、自分の思い込みから、設定ファイルの記述内容に間違いが有ったと言う結果になりました。
自分はプログラマーではないので、どうしてもちょっとかじった情報から、思い込みで勝手に記述してしまう癖があるようです。
前回と言い、今回もこの勝手に思い込んだ事が原因で、プログラムが動かなかったと言う事ですね。
これまでに、PythonプログラムでDHT11センサーから温湿度を取得するプログラムを作りました。
そのプログラムを10分毎に起動させるcron設定も出来ました。
Pythonプログラムで作ったCSVファイルをMariaDBにインポートすることもできました。
いよいよ次は、PythonでMariaDBを操作する方法の取得です。
PHPとかでMySQLに接続する方法は、以前にちょっとだけやったことがありますが、PythonでDBに接続する方法は初めてになります。
またこれから一歩一歩、PythonでDBを操作するコマンドを学んでいかなければなりませんね。
とりあえず、初期のStepはクリアできたので、次のStepに進んでいきたいと思います。
やっとここまで来ました。
[twt]
