コンテンツ
cron周りは動かない時のデバッグが大変なのでメモ。OSはraspbianです
気温のグラフ生成を1時間に1回bashスクリプト+cronで実行していますが、デバッグがものすごくめんどくさかったのでメモ。
cron周りの基本操作
cronの追加と編集
ラズベリーパイにログインした後
crontab -e
とするとcrontabが編集できるようになります。エディタはnanoが起動するようで、キーボードを打つとそのまま入力、[Ctrl]-xで終了します。
cronの表示
cronになに登録してたっけ?という時に
crontab -l
crontabのバックアップ
書いたcronをテキストで保存しておきたい時に
crontab -l > cronbackup.txt
crontab -lで表示したcronをテキストに放り込む感じ
-rはちょっと危険
crontab -r
とすると、cronの内容が全部消えます。
キーボードのeの横はrというお隣さん同士なので、打ち間違えると全部消えるというorz
なのでときどき↑の方法でテキストにバックアップを取っておくと安心です
時間と分じゃなくて分 時間で指定
例えばお昼12時00分という時に普通は12:00と書きますがcrontabの場合はこれが逆です。
毎日昼12時になにかを実行する場合
00 12 * * * hogehoge.sh
と書かないと昼12時に実行してくれません。普通の時計感覚で
12 00 * * * hogehoge.sh
とかくと00時12分、つまり真夜中の夜0時12分に実行されるので時間が全く違うものになります^^;
crontabで10分に1回とか、1時間に1回実行する
こんな感じで
*/10 * * * * hogehoge.sh # 10分に1回実行 00 * * * * hogehoge.sh # 1時間に1回、毎時00分に実行 45 23 * * * hogehoge.sh # 1日1回、毎日23時45分に実行
たぶん1時間に1回と1日1回を知っておけばだいたいのcronは出来ると思います。週1回、毎週水曜日に実行、とかもできますがあんまり使うことはないと思うのでそのときは検索するといいかと思います。
以下、細々としたTips
動かない時やcronを詳しく知りたい時にどうぞ
cronで動かすシェルスクリプトの行頭で/bin/bashを指定しておく
cronのデフォルトシェルは/bin/sh(Bシェル)らしいです。
Bシェルにはsourceや.という、他のファイルのシェルスクリプトを読むコマンドがないのでエラーになります。
sourceコマンドのようなbashの用コマンドを使う場合は、作ったシェルスクリプトの行頭に
#!/bin/bash
をつけておいたほうがいいです。というかつけてないと動かない^^;
上のを行頭に置いておくとcronから呼んだ時でもbashで実行されるので、sourceコマンドも動きます
phpなどを実行するときも
#!/usr/bin/php
というふうに1行目でphpのパスを指定しておいたほうが良さそう。1行目の指定のことをシバンとかシェバンというらしいです。
ユーザpiで実行した時は動くのに、cronで実行した時は動かない
cronで実行した時、実行ユーザはcrontabを作ったユーザになりますがホームディレクトリはどこになるかよくわからないです。
なので、シェルスクリプトの中で相対パスを使って
source ~/hogehoge/hoge.sh
などとしてもうまく動かない時があります。この場合はcron実行時に
00 * * * * cd /home/pi/hogehoge;./hoge.sh
と、シェルスクリプトがあるディレクトリ(=/home/pi/hogehoge)にcdしてから実行するとうまく動きます。
相対パスでも多分動くと思いますが、確実に動かしたい場合はフルパスのほうがいい気がします、経験上。
実行時のログは/var/log/syslogにでる
CentOSだと/var/log/cronあたりにログがでると思いますが、ラズベリーパイ(raspbian)だと/var/log/syslogです。
cronがなんかしらんけど動かない、ってときはログを見るといいかも。/var/log/syslogにcronで実行された時間とプログラムが書いてます。
シェルスクリプトに実行権を与えておく
chmod 755 hoge.sh
という感じで.
テスト時はとりあえず777でもOK
cronで動いていないのか、アクセス権絡みで動いていないかの切り分けがしやすくなるので
cronで1度安定して動くと放っておいても動いてくれるようになるのでとても楽です。
うまくつかって楽しいcronライフを(∩´∀`)∩
コメント
[…] link […]