タイトルの現象について一応は解決しました。解決したのですが、うまく行かなかった原因も、うまく行った理由もよく分かっていません。
確認したことを簡単にまとめておきます。
スクリプトの内容
- テキストデータを処理するスクリプト
- 中間ファイル、実行の様子を確認できるログファイルを書き出す
動かない状況
- 他のスクリプト(同じものを3個登録)の実行実績がある環境
- コマンドラインから「./script.sh」だと動く
- コマンドラインから「/path/to/script.sh」だと動く
- cronだと動かない
- 登録当初は「chmod 744」だったのを「755」に変更。
- コマンドラインでbashのパス補完で確認した「/path/to/script.sh」のコピペもダメ
確認したこと
- croneventsでは実行した様子がログとして出力されない
- /var/log/cron.logで見ると「/path/to/script.sh」があることは認識している
- 起動時に「-x ext,sch,proc,pars,load,misc」を指定しています
解決した方法
- 最終行にあった「/path/to/script.sh」を先頭行に移動したら動いた
備考
なんで、この方法で動いたのか不明。途中で「chmod 755」に変更したのがポイントで、この変更状況がcronに認識されていなかったのかもしれない。しばらく様子見。
後日談
再現してみようとしたけどうまくいきません。
1.簡単なスクリプトを作成
# !/usr/bin/bash
LOG_FILE=/home/USERNAME/logs/debug_cron.log
date '+%Y/%m/%d %H:%M:%S' 2>&1 >> $LOG_FILE
権限は「chmod 700」にしました。
2. CRONに登録
-
crontab -e
でcronに登録 - croneventsを実行し「RELOAD」の表示を確認
3. そして再現せず…
-
/home/USERNAME/logs/debug_cron.log
への書き込みを確認… - croneventsで
RELOAD
を確認できれば実行は確実かもしれない。