cron実行時に『/bin/sh: 〜〜: command not found』と出てcronが実行されない場合

[参考記事] シェルスクリプトを実行すると『そのようなファイルやディレクトリはありません』や『コマンドが見つかりません』と出る場合

cronを実行した時に

/bin/sh: hogehoge: command not found

のようにエラーメールが送信され、cronが実行されない場合があります。
SSHやtelnetなどのコマンドプロンプトでは実行されるコマンドが、cronでは実行されないというときは実行されるコマンドにPATHが通っていないことが考えられます。

コマンドプロンプトでログインした時とcron実行時の環境変数は異なります。
これはコマンドプロンプトでログインした時は『.bash_profile』などによって環境変数が上書き設定されるためです。
[参考記事] cron実行時のPATHなどの環境変数を確認する方法

PATHが通っていない場合にはコマンドを絶対パスで記述すると実行されます。

* * * * * sh /hoge/hoge.sh
   ↓
* * * * * /bin/sh /hoge/hoge.sh

コマンドはwhichコマンドによって実体ファイルの場所を確認できます。

$ which sh
/bin/sh

またPATHが通っていない場合にはshファイル内に記述されているコマンドも絶対パスで記述する必要があります。

『crontab -e』などでcron設定ファイルにPATHを指定することもできます。

PATH=/usr/bin:/bin:/hoge

この場合、現在設定されているPATHに追記するようにPATHの指定を記述しないと、それまで正常に実行されていた他のcronが動かなくなります。

スポンサーリンク

PATHとは
shなどのコマンドは実際には/bin/shという場所にあり、OS環境によって変わるのでショートカットのようにコマンドを指定することができます。

PATHが

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin

となっていた場合には
/usr/local/bin
 ↓
/bin
 ↓
/usr/bin
 ↓
/usr/local/sbin
のディレクトリの順にコマンドを探し、最初に見つかったものが実行されます。

関連記事

スポンサーリンク

CakePHP

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る