シェルスクリプトはcrontab経由では実行されず、手動で正常に実行されます
質問
パスと変数をエクスポートしようとしましたが、crontab は依然としてスクリプトを実行できません。きっと何か間違ったことをしていると思います。
jarファイルを実行するシェルスクリプトがあります。これは正しく動作していません。
いろいろ読んだ後、これは通常、独自のシェルインスタンスを介して実行されている cron による間違ったパスが原因であるため、私のプロファイルと同じ環境設定が設定されていないことがわかりました。
いくつかの変更を加えた現在のスクリプトは次のようになります。
#!/bin/bash --
. /root/.bash_profile
/usr/bin/java -jar Pharmagistics_auto.jar -o
...
これらはスクリプトの最も重要な部分であり、残りは単純なシェルベースです。
誰かが私が間違っていることを教えてもらえますか?
解決
jarファイルへのフルパスを指定してみます:
/usr/bin/java -jar /path/to/Pharmagistics_auto.jar -o
他のヒント
私はちょうどあなたがすでに除外している何を言うだろう:あなたのパスと環境を確認してください。
あなたはalredyこれを行っているので、、デバッグを開始します。 (でもすべてで開始された場合)、スクリプトが取得する方法をはるかに参照するログファイルへの書き込みのチェックポイントと同様に、あなたのメールをチェックし、エラーのcronジョブのログファイルを確認します(cronのエラーでメールを送信します)のように...
非常に固有のものではありません、申し訳ありません。
「私のパスと変数をエクスポートする」は動作しません。
また、これはあなたが質問に入ったかのタイプミスがあるが、私が見るかどうかわからない。
usr/bin/java
...と私は助けるが、あなたは完全修飾パスを指定していないに気づくことができません。これは、現在の作業ディレクトリに「USR」という名前のディレクトリを探しています。 crontabのためにしばしば回、CWDは、したがって、あなたの参照はどこにも行かない、未定義です。
これと同様に、ルートからのフルパスを指定してみます:
/usr/bin/java
それとも、あなたがアクションで相対パス機能の例を見たい場合は、あなたも試みることができる:
cd /
usr/bin/java
いくつかの考え。
- を削除します。
--
後に#!/bin/bash
- cron によって表示されるスクリプト出力は、必ずメールまたは他の場所 (例: 表示できる場所) に送信してください。MAILTO=希望するユーザー)
- スクリプトが実行中であり、別の長時間実行スクリプトによってブロックされていないことを確認します (例:2行目に追加します
touch /tmp/MY_SCRIPT_RAN && exit
) - 次を使用してスクリプトをデバッグします
set -x
そしてset -v
実際に動いていることがわかれば
あなたが必要なパスを定義およびenvは、個人の.profile(または他のスクリプト)でvarsのですか?あなたは、その特定のファイルを調達しようとした(あるいはあなたが/root/.bash_profileですでに何をやっているということです?)している。
これを求めて別の方法は次のとおりです。?あなたは何でも必要なパスおよびenvはあなたが実際に利用可能な
期待varsのことを確信しています 何もない場合は、、あなたは個々の値をecho'ingまたはちょうどあなたのスクリプトで「ENV」コマンドを使用して、その後、標準出力を見直してみましたがありますか?
あなたのjarファイルへの完全なパスを提供し、あなたはでのcrontabをどのユーザーが実行していますか?あなたは、通常のユーザーのためにそれを設定する場合は、ユーザーがrootのプロファイルを調達する権限を持っていると思いますか?