Raspberry Pi | cronを使って定期的に写真撮影&メール送信
こんにちは、tapunです。
Raspberry Piで写真撮影とメール送信ができるようになりました。
また、スクリプトを書くことで上記の2つの作業をまとめて実施できるようにもなりました。
ただ、毎回Raspberry Pi にログオンしてコマンドをたたいたり、スクリプトを実行するのは面倒ですよね?
今日はcronを使って写真撮影とメール送信を自動化するための設定についてご紹介したいと思います。
cronって何?
cronとは、UNIX系システムの常駐プログラム(デーモン)の一種で、ユーザの設定したスケジュールに基づいて指定したコマンドやシェルスクリプトなどを自動実行してくれるプログラム。
実行スケジュールは毎時、毎日、毎週、毎月をはじめ細かく指定でき、「crontab」というファイルに記述・保存しておく。crond(cron daemon)というプロセスがcrontabの内容に従って、決められた日時にコマンドなどを実行してくれる。
引用:http://e-words.jp/w/cron.html
タスクスケジューラのようなものですね!
cronの設定の仕方
cronはデフォルトで動いていると思いますが、下記のコマンドで起動することができます!
$ sudo /etc/init.d/cron start [ ok ] Starting periodic command scheduler: cron.
- cronの設定をします
$ crontab -e
※ログインしているユーザ用のcrontabを設定します。
設定した内容は、そのユーザ権限で動きます。※エディタはnanoで開きます。
- crontabの書き方
設定項目は左から「分」「時」「日」「月」「曜日」「実行内容」です。
設定項目 数値 分 0 – 59 時 0 – 23 日 1 – 31 月 1 – 12 曜日 0 – 7 (0または7は日曜日)
0=日、1=月、2=火、3=水、4=木、5=金、6=土、7=日それぞれの項目はリスト表示「1,3」にしたり、範囲指定「1-5」にしたり、どっちも合わせ技「1,3,5-10」にしたり、間隔「*/10(10分間隔)」にしたり割と自由度が高いです。
例)平日は毎日、朝7時~9時、19時~1時に、30分置きに写真を撮るスクリプト(*スクリプトについてはこちらの記事参照)を実行する場合のサンプル
0,30 0-1,6-9,19-23 * * 1-5 sudo sh /home/example/camera.sh
[Ctrl + X] [y] [Return]
でcrontabを保存するだけで設定は完了です。
設定した時間にスクリプトが実行されるはずです。
参考:cronの動作確認をしたい場合は?
自分が設定した内容が正しく動作するかの確認は、現在時刻の2分後に設定して結果を見てみるのが手っ取り早いです。
※1分後では、crondがジョブを実行しようとしたときとのタイミングの問題で処理できないことがあるようです。
参考:cronの動作結果をメールで送る場合の手順
crontabに下記のように記載すれば実行結果が送られてきます。
※MTAの設定が必要です。(こちらの記事の手順を済ませていればOK)
MAILTO="メールアドレス" 00 00 * * 1 "実行させたいコマンド"
まとめ
cronとシェルスクリプトを組み合わせることで、自分の好きなタイミングで写真撮影+メール送信を実行できるようになりました!
私は、平日と休日でスクリプトを実行するタイミングを変えています。
crontabの記載例)
0,30 0-1,6-9,19-23 * * 1-5 sudo sh /home/example/camera.sh 0,30 0-1,8-23 * * 6,7 sudo sh /home/example/camera.sh
平日は6時~9時、19時~1時に30分おきに撮影してます。
休日は8時~1時まで30分おきに撮影しています。
※camera.shの記載内容はこちらの記事を参考にしてください。
このスクリプトを実行してると、写真がローカルに貯まりっぱなしになるので、次回は写真をクラウドストレージに送付する方法をご紹介しようと思います。
こんにちは。
夏休みの旅行中の子供の朝顔観察のためにラズパイ で写真撮影&メール送信をしようと参考にさせていただいています。
プログラムもしたことがなく、ラズパイ自体はじめて触ったのですが、tapunさんのサイトが分かりやすくて、けっこう良い線まで来れたと思っています。
muttでgmailに写真付きメールの送信はできたのですが、cronだとアドレス不明となって[ドメイン raspberrypi が見つからなかったため、メールは pi@raspberrypi に配信されませんでした。入力ミスや不要なスペースがないことを確認してから、もう一度送信してみてください。]とエラーが吐き出されてしまいまして…。
camera.shの中身も確認しているのですが、muttで送信しているときと同じ内容を打ち込んであるのですが、なにかお気づきの点ありましたら、教えてください。
とってもわかりやすい情報ありがとうございます。
初めてプログラミング・ラズパイを触って、あまりに素人すぎて途中つまづいたりもしましたが、
無事ラズパイで指定したタイミングで写真をとってメールで送ることができました!
まるさん、確認が遅くなってしまって申し訳ございませんでした!
無事に写真を送れるようになったとのこと、良かったです!
私もプログラミング未経験者なので、これからちょっとずつ勉強していきたいと考えています!
それにしても朝顔の写真撮影なんでめちゃくちゃ有効な活用方法で感激しました。
もしよろしければ先日頂いたご相談についてどのように解決されたかも共有していただけると、ほかの皆さんの参考になるかと思いますので助かります。