日別アーカイブ: 2022年2月26日

Raspberry Piで部屋の温度を長期間記録する(自動実行編)

部屋の温度を測定してデータベースに記録するところまではできたので、今度はこのプログラムを定期的に実行してデータをためていきます。

Linux系OSの場合”cron”というデーモンでプログラムの自動実行が可能です。Windowsでいうところのタスクスケジューラ的な使い方ができるものです。

cronの設定ファイルを開く

cronは設定ファイルに各プログラムをどういうスケジュールで実行するかを書き込むことで設定を行います。

設定ファイルはcrontabという名前で、ターミナルから以下の通りにコマンドを入力すると中身を編集することができます。

<ターミナル>
crontab -u [ユーザ名] -e

Raspberry Piの場合デフォルトのユーザ名はpiに設定することが多いと思うので、その場合は crontab -u pi -e と入力すればOKです。

cronのスケジュールの書き方

crontabを開くとエディタが起動するので、スケジュールを書いていきます。

基本的な記法は以下の通りです。

<crontab>
* * * * * [実行する内容]

最初のアスタリスクは前方から”分・時・日・月・曜日”を意味しています。

<crontab>
#毎日8時59分に実行
59 8 * * * [実行する内容]

#毎時29分に実行
29 * * * * [実行する内容]

実行する内容はプログラムの名前をフルパスで記述します。プログラムの名前だけで動作しない場合、そのプログラムを実行するファイルの環境変数が設定されていない可能性があります。この場合、プログラムの名前の手前部分に実行するファイルの名前を明示的に指定すると動きます。

今回の場合はPythonなので以下の通りになります。私が今回作った環境ではPythonの実行パスがあわせて必要で、最初これにしばらく気づかず解決にずいぶん時間がかかりました。

<crontab>
#ファイル名のみ設定
#毎時29分に実行
29 * * * * /home/Document/roomtemp.py

#Pythonの実行パスも含めて設定
#毎時29分に実行
29 * * * * /usr/bin/python3 /home/Document/roomtemp.py

crontabを保存して終了して設定は完了です。

cronの実行と設定確認

crontabで設定ができたら、念のためcronを再起動しておくと確実です。

<ターミナル>
sudo systemctl restart cron

これでうまく動いてくれれば大丈夫です。動作を確認したい場合は以下のコマンドで実行ログが出るので、cronでプログラムが実行されたかどうかをチェックできます。

<ターミナル>
sudo /etc/init.d/cron status -l

-lのオプションをつけておかないと結果が省略されて見づらくなってしまうので、-lを付けておいた方が良いと思います。

まとめ

これでプログラムを定期的に実行し、データを蓄積することができるようになりました。次回ではためたデータをグラフ化して見る方法をまとめてみたいと思います。