cronの使い方(応用編)

cronの基本的な使い方は、前回の記事で紹介しています。

今回は、実際にcronでありがちなトラップを紹介します。

Command not found というエラー

例えば、cronでpythonのプログラムを実行しようと思います。

「crontab -e」 で編集します。

*/30 * * * * python sample.py

例では、sample.pyを30分ごとに実行するようにcronに設定しています。

うまく実行されているか確認します。/var/spool/mail/ユーザ名に実行結果が記録されていきます。

また記録されていなかったらリダイレクトしてもよいです。

リダイレクトについては、下記の記事で取り上げてます。

さて、これで、完了かと思いきや、「python: Command not found」と吐かれています。

原因

あれ、コマンドラインでpythonは実行できるのになぜcronではできないのか。

それは、cronでは、cron用のPATHがあるからです。/etc/crontabの中身を見てください。

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

最後の行が、cron用のPATHです。因みに今のユーザのPATHは、

$ echo $PATH

で確認できます。

明らかにcron用のPATHより多いと思います。

というようにPATHが通っていないので実行出来ないのです。

したがって、PATHを追加しましょう。返されるPATHは、環境によって異なります。

解決方法その1

コマンドラインと同じように実行できるようにするため、今のユーザのPATHを「echo $PATH」で標準出力し、コピーしましょう。

次に、crontab -e で編集ファイルを開きます。

一番上にコピーしたPATHをペーストしてください。

PATH=/usr/bin:/usr/local/bin:..............
*/30 * * * * python sample.py

これで、うまくいくはずです。

解決方法その2

また、コマンドを絶対パスで直接記述することでも実行できます。今回は、例として、pythonのコマンドのPATHを調べます。

$ which python 

上記のコマンドを実行すると、PATHが表示されると思います。返されるPATHは、環境によって異なります。

そのPATHをcrontab -e で編集ファイルに記述します。今回は、/usr/local/binと返されたと仮定すると下記のように記述します。

*/30 * * * * /usr/local/bin/python sample.py

まとめ

cronでCommand not found が表示されたら、PATHが通っていない。

PATHを「crontab -e」 で編集ファイルに記述しましょう。

この記事を読んだ方は、こちらの記事をおススメします。

おススメ書籍

Linuxを学ぶ上で、おススメの書籍を紹介します。

Linux教科書 LPICレベル1 Version5.0対応

この書籍は、LPICというLinuxのプロフェッショナルとして認定される資格の教科書になります。

資格の教科書ですが、Linuxを学ぶ上でもってこいの書籍です。自分は、この書籍でLPICを取得しました。


Linux教科書 LPICレベル1 Version5.0対応
新しいLinuxの教科書

初めてLinuxを触る人でも分かりやすく表現されており、読みやすいです。


新しいLinuxの教科書