fc2ブログ
製作・改造なんでもやっちゃう広くて浅い活動日誌

2023/02123456789101112131415161718192021222324252627282930312023/04

crontabが上手く動かなくて躓いてしまったので、問題解決用のメモを残しておきます。

症状としては、プロンプトでコマンドを入力すると普通に実行出来るのに、crontabで実行させようとしたらなぜか動かない、といった場合。以下は自分の環境に合わせて、ubuntu server 8.4.3 でのやり方です。まあ、どのLinuxでもだいたい同じだと思いますが。
1、crontabの記述が合っているか確かめる
# m h dom mon dow command
0 12 * * * /home/myhome/myscript.py >/dev/null 2>&1
時間設定のパラメータが足りているか一応確認しておきましょう

2、cronbが動いていることを確かめる、再起動してみる
$ less /var/log/syslog | grep CRON
crontabが動作しているようなら、動作された時刻やコマンド等が表示されるはずです。
表示されないようなら、crondを起動(再起動)しましょう。
$ sudo /etc/init.d/cron restart

3、crontabのシェルを変更し、エラーをファイルに出力する
SHELL=/bin/zsh

# m h dom mon dow command
0 12 * * * /home/myhome/myscript.py >/home/myhome/log.txt 2>&1
デフォルトのbourne shell(?)の出すエラーは少しわかりにくいので、zshのように親切なものを使い、実行時のエラーを記録します。
一応補足すると、 「>」 はリダイレクトで、標準出力先を変更します。
「2」は標準エラーで「1」は標準出力なので、「2>&1」により標準エラーの出力先を標準出力と同じにします。

4、エラーを1つずつ潰していく、(実行させたいものが自作のスクリプトなら)文字コード(改行コード)を疑う
残りは3で出力させたエラーを見て1つずつ解決していくだけですが、そもそも普通にコマンドで入力したら動いていたものであれば、原因は限られていると思います。
ひっかかりやすいものとして、Windowsで作ったスクリプトをLinuxに持っていった場合等で、文字コードがLinuxの環境のものと違う、改行コードがLFではなくてCR+LFを使っている等です。
これらに関しては、Windowsの時点でサクラエディタ等を使うことで、文字コードや改行コードを指定することが出来ます。
また、スクリプト中でファイルを読み込む時は、絶対パスじゃないといけないような感じです。

どうでしょうか。


新Linux/UNIX入門新Linux/UNIX入門
林 晴比古

ソフトバンククリエイティブ
売り上げランキング : 5352

Amazonで詳しく見る
関連記事
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://creatornote.blog87.fc2.com/tb.php/24-fcdfc299
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック