JavaプログラムをLinuxボックスで1日1回実行する必要があります。そこで、1行だけの単純なファイルを作成しました。
java -jar /opt/location/my_jar.jar
1日に1回実行されると仮定して、etc/cron.dailyに配置します。しかし、それはまったく実行されません。両方に.sh拡張子を付けるか、単に拡張子のないファイル名を付けてみました。それでも、運はありません。
私はそれをグーグルで検索しました、そして私はかなりの矛盾する情報を得ています。誰か助けてもらえますか?
編集:
SatishとMithrandirの回答に基づいて、現在の場所を要約しています。
1.viを使用してrun_conversionsスクリプトを作成し、Windowsの行末文字の問題を解決しました。これで、スクリプトは
#!/bin/sh
/usr/bin/java -jar /opt/location/my_jar.jar
2./etc/cron.hourlyに入れます。
3. / var / log / cronでログを確認すると、run_conversionsが開始され、run_conversionsが1時間ごとに終了していることがわかります。ここまでは順調ですね。
4.しかし、jarファイルが実行されていないようです。これは、正しく実行されている場合はデータベースを更新する必要があり、データベースが更新されていないためです。
5.奇妙なことがあります:cron.hourlyを手動で実行しているが、
run-parts /etc/cron.hourly
jarファイルが適切にヒットし、データベースが更新されています。
要約すると、run-partsを実行すると、機能します。単独で1時間ごとに実行するためにそれを残すとき、それはしません。
何か案は?
編集2:
Satish、Mithrandir、vahidからのアドバイスに従い、run_conversions_locを次のように変更しました。
#!/bin/bash
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bexport SHELL=/bin/bash
/usr/bin/java -jar /opt/tf/conversions/aff_networks2.jar > /opt/tf/conversions/runconversions.txt
cron.hourlyからスクリプトを削除し、次の行をcrontabに追加しました。
*/10 * * * * /opt/tf/conversions/run_conversions_loc
スクリプトは10分ごとに実行され、次のようにcronログに登録されます。
Feb 24 09:30:01 backsome CROND[7933]: (root) CMD (/opt/tf/conversions/run_conversions_loc)
これまでのところ、それはよさそうだ。ただし、データベース(更新する必要がある)は更新されません。
さらに詳しく調べると、jarファイルaff_networks2.jarはftr.properties
、ローカルディレクトリ(同じディレクトリ)でファイルを探しています。ファイルはこのディレクトリにあります。しかし、それは正しく読まれていません。出力ファイルrunconversions.txtで、プロパティファイルから読み取る必要のある値がnullであるため、これを知っています。
全体像を完成させるための2つのこと:
変換ディレクトリ内のすべてに777の権限があります。このような拡張アクセス許可を与えることは推奨されないことは知っていますが、それが問題ではないことを確認したかったのです(少なくとも試してみてください)。
シェルからスクリプトを実行して実行すると、実行
./run_conversions_loc
、プロパティファイルが検索され、データベースが更新されます。rootとしてシェルにログインし、関連するすべてのファイルをrootとして作成し、crontabでスクリプトを呼び出すための行をrootとしてインストールしました。
cronがプロパティファイルを読み取らない理由はありますか?