🦊

crontab作成時に気を付けること

2022/06/25に公開

cronが実行できない時に

cronで定期実行をしたい、crontabを書いては見たものの動かない、、、そんな時の経験をまとめました

cronのログ確認

Linuxであれば以下のファイルにlogが出力されている

/var/log/cron

もしそこに実行の形跡があればcrontabの内容は正しいので、2の解決策を
実行できていなければ1の中の解決策を確認

1.crontabの確認

PATHが通っていない

cronでは普段使っている環境変数が使えないことがあるので、事前に記載したり絶対PATHを指定したりする必要がある
https://rcmdnk.com/blog/2020/01/12/computer-linux-mac/

crontabで一番下の行だけ実行できない

最終行に改行がないと実行できなくなる。普通に編集していれば起きないが、Localで変更したものをコピペしたりファイル転送したりすると起こる可能性があるので要注意
https://www.sota-kaneko.jp/2021-03-07-cron/

2.crontab以外の確認

呼び出すファイル権限の確認

以下のような形でshファイルを呼び出している場合、shファイルの実行権限がない場合がある

crontab
05 */4 * * * /usr/local/test.sh

ファイルの実行権限があるかないかを要確認
https://zenn.dev/mayamashita/articles/ac98bfa0161a65

dockerコマンドを実行しようとしている

あまりないケースかもしれないが、docker commandをcronで実行しようとして詰まったことがあるので記載

the input device is not a TTY

というエラーでdocker coomandが動かないことがある
これはdocker commandに-itが入っていることが原因。これは不要なので削除するべし
https://hodalog.com/how-to-resolve-the-error-that-the-input-device-is-not-a-tty/

それでも解決できない場合は、、

0 5 * * * /usr/local/test.sh >> /var/log/cron.log 2>&1

のように標準出力及び標準エラー出力をファイルに出力するようにconrtab -eで変更する

cronではなく、shellファイルの中身や他の原因の可能性も探る

Discussion