ブログだった何か

ジーナちゃん専門ブログ

Raspberry Pi 3:botを回す crontab編

Raspberry Pi3でbotを回してみます。
今回は1時間毎にランダムにSlackで「んあー」するbotを入れてみます。

f:id:djtaimi:20170131001845p:plain

実行ファイルである「tweet.py」を定期的に起動するため、crontabを使います。


Raspberry Pi3のターミナルを使用。
crontab -e でcrontabの編集画面に映ります。

$sudo crontab -e


「crontab -eは使うな」というエントリをいくつか見ました。
間違えて「crontab -r」と打つとリセットされてしまうからだそうです。
とりあえず「crontabe」と打てばできるように、エイリアスを作ります。

$alias crontabe='sudo crontab -e'


これで「crontabe」と打てば編集画面に入れます。
ゴチャゴチャ出てきますが、一番下に追記していくだけです。
フォーマットは以下のとおりです。

分 時間 日 月 曜日 実行コマンド


上記に数字を入れていきます。
「曜日」は0と7を日曜日として、月〜土が1〜6にあたります。
例えば平日の1時間毎に「python3 /home/pi/nnabot/tweet.py」を実行する場合ですと

0 * * * 1-5 python3 /home/pi/slackbot/tweet.py

になります。
指定方法はシンプルで、30分毎で刻む場合は*/30、10分から20分まで2分毎の場合は10-20/3など。時間や月日、曜日でも同じです。
(上の例では曜日が1-5→月曜日〜金曜日までが指定されています)


今回は毎時30分ごとに投稿させたいので、このようになります。

*/30 * * * * python3 /home/pi/slackbot/tweet.py


ところが実行されません。
python3の場所(/usr/bin/)を書いてもう一度…

*/30 * * * * /usr/bin/python3 /home/pi/nnabot/tweet.py


が…ダメっ…


どうやらプログラム内で指定しているファイルの相対パスも書き直さなければならないようです。
cronを絶対パスで書くのは全然構いませんが、中身まで絶対パスで書き直すのは嫌です。


そこで色々試してみて…cdでプログラムのフォルダまで移動してから、実行する方法に落ち着きました。

*/30 * * * * cd /home/pi/nnabot/tweet.py;python3 tweet.py

f:id:djtaimi:20170131001916p:plain

とりあえずこれで動かすことにします。