
Bash を使用してコマンドラインから呼び出すと正常に実行されるスクリプトがあります。しかし、cron がそれを実行しようとすると、「mysql: コマンドが見つかりません」というエラーで失敗します。
これは、cron がシェルとして bash を使用していないためだと思いますが、cron で bash を使用する方法がわかりません。
スクリプトの先頭にこれを追加してみました:
#!/bin/bash
しかし、うまくいきませんでした。cron に bash をシェルとして使用するように強制するにはどうすればよいでしょうか。私は bash と cron についてあまり詳しくないので、何か簡単なことを見逃しているかもしれません。serverfault の投稿をいくつか読み (すべてにリンクしたいのですが、新規ユーザーなのでできません)、できる限り情報を理解して適用しようとし、また、グーグルでたくさん検索しましたが、行き詰まっています。
答え1
Pulegium さんの言う通り、問題はシェルの種類ではなく PATH です。cron を実行する場合、検索パスは非常に限られているため、mysql
コマンドを入力する代わりに/path/to/mysql
、実行可能ファイルへの実際のパスを入力する必要があります。通常は のようになります/usr/local/bin/mysql
。正確なパスを見つけるには、検索する必要があります。また、シェルの問題である場合は、cron ファイルで bash を実行してからスクリプト を実行できます。/bin/bash /path/to/script.sh
これにより、bash がファイルを処理していることが保証されます。
答え2
cron スクリプト内のコマンドには絶対パスを使用するのが最適です。これにより、カスタマイズした PATH 設定に依存しなくなります。