RaspberryPi 1 の調子が悪かったので Raspbian を再インストールした。各種設定ファイルをバックアップから復帰したものの、cronだけがなぜか実行されない。
このへんを参照して対応する。
うまくいっている RaspberryPi 3 と設定を比較しながら進める。
Pi1 … cron が効かない。今回直したいやつ
Pi3 … cron が効いている。正常なやつ。
まずはサービスの起動を確認。通常権限(ユーザ:pi)で ps aux を叩く。
$ ps aux | grep cron
Pi1もPi3も同様にサービスが起動していた。サービス自体は問題なさそう。
Pi1
Pi3
次に、/etc/crontab のパーミッション・権限が正しいかを見てみる。
Pi1
Pi3
Pi1のほうの /etc/crontab のパーミッションが 744( -rwxr-xr-x )になってしまっている!原因はこれか。正しくは 644( -rw-r--r-- )になってなきゃいけない。管理者権限に(sudo -sして)直す。
$ sudo -s
# chmod 644 /etc/crontab
ーーー
まだ改善しない。なぜだ?と思って pi3 と比較してみると、/etc/crontab の所有者が管理者 root であるべきところ、通常ユーザー pi になってしまっていた。これも直す。
# chown root:root /etc/crontab
無事に動いた。まとめ。
cronが動かない時に試すコマンド3つ。
sudo ps aux | grep cron
chmod 644 /etc/crontab
chown root:root /etc/crontab
これでもうまく動かない時は、時刻設定(ntp)を見直す。
さらに注意点。
cron内でdateコマンドを使うときは%をエスケープする必要あり。