cronが起動しないときの確認ポイントまとめ

cronが起動しないときの確認ポイントまとめ

Posted at October 30,2012 1:55 AM
Tag:[cron, Linux]

cronが動かないときの確認ポイントについてまとめました。

日付や時間といった基本的な内容は別エントリーしたいと思います(どこまでが基本かという話もありますが)。

1.原因を調べる

確認ポイントの説明の前に、cronに設定したコマンドやスクリプトが起動しない原因を調べるには、標準エラー出力を確認することが先決です。

もし標準エラー出力に何か残っていれば、そこから対処案を導き出すことができます。

標準エラー出力の設定方法については5項をご覧ください。

2.ファイルを実行する場合は実行権のパーミッションをつける

cronでシェルやPerlなどのファイルを実行する場合、ファイルに実行権のパーミッションの付与を忘れないようにしましょう。

3.ファイルはフルパスで指定する

よくやってしまう失敗ですが、ファイルの指定はフルパスで行います。

/home/foo/public_html/foo.shを実行する場合、cronに設定する内容は次のようになります。

00 * * * * /home/foo/public_html/foo.sh

または、実行ファイルがあるディレクトリまでcdコマンドで移動し、相対パス「./」でそのディレクトリを指定します。

00 * * * * cd /home/foo/public_html; ./foo.sh

cdコマンドで移動した場合、実行ファイルの中に記述したファイルにもディレクトリが反映されるようですが、フルパス指定で実行した場合、実行ファイルの中に記述したファイルはフルパス(またはcdコマンドとペア)で記述する必要があります。

4.シェルで起動する

環境によってはcronからPerlスクリプトなどを直接実行できない場合があります。

そういう場合はcronからshスクリプトを実行し、そのshスクリプトからPerlスクリプトを起動するとよいでしょう。

5.標準出力や標準エラー出力をファイルに書き込む

cronの実行結果は/var/log/cronに保存されるようですが、レンタルサーバによっては閲覧できない場合があります。

そういう場合(でなくても)、cron実行による標準出力や標準エラー出力をファイルに書き込み、そのファイルを参照することでcronが正しく動作しているのか、あるいは動作していないかを判断できます。

書き方の詳細は別エントリーに譲りますが、コマンド実行の後方にリダイレクトで任意のファイル(result.txt)に出力させ、その後方にさらに「2>&1」を記述すれば、標準出力と標準エラー出力をリダイレクト先のファイルに出力してくれます。

/home/foo/public_html/foo.sh > /home/foo/public_html/result.txt 2>&1

または、

cd /home/foo/public_html; ./foo.sh > ./result.txt 2>&1

標準出力と標準エラー出力を異なるファイルに出力するには

/home/foo/public_html/foo.sh 1>/home/foo/public_html/result1.txt 2>/home/foo/public_html/result2.txt

とします。

bashやzshではお作法が若干違うかもしれないのでご注意ください。

6.Windowsでアップロードする際は改行コードに注意する

Windowsで作成したファイルの文字コードはデフォルトでCR+LFですが、Linuxの改行コードはLFなので、そのままサーバにアップロードすると、次のようなエラーになります(エラーの確認方法は4項)。

/bin/sh^M: bad interpreter: No such file or directory

上記のエラーの原因は、次のシェルファイルの1行目の末尾の改行コードがCR+LFになっているためです。

#!/bin/sh
 
(略)

ということで、Windowsでファイルを作成する際やFFFTPなどで転送する際、正しい改行コードでアップロードされることを確認しましょう(最近のMacはLFみたいです)。

2012.08.08
確認ポイントを追記しました。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)