この記事では、主に Java プログラム jar をシェル スクリプトで実行する方法を紹介します。編集者がそれを参考にさせていただきます。エディターをフォローして見てみましょう
Ubuntu にプロジェクトをデプロイするとき、シェルを通じてプログラムを開始したり、crontab のスケジュールされたタスクを通じて Java プログラムを定期的に呼び出したりすることがよくありますが、非常に奇妙な問題が発生します。次のようにシェル スクリプトを作成しました:
#!/bin/sh export mypath=/root/project/wishnomal java -Xmx3000m -Xms3000m -server -d64 -Dfile.encoding=UTF-8 -Dfetch.threads=300 -classpath $mypath/:$mypath/wish2-assembly-1.0.0.jar newstandard.CrawlerNewStandard $* echo "END"
コマンド ラインからスクリプトを手動で実行すると、Java プログラムは正常に実行できますが、crontab スケジュールされたタスクを使用しても効果がないようです
考えられる理由の分析:
1 ) 現在のユーザーがこのシェル スクリプトの実行権限を持っていないか、ls -lrt /apps/service/mtk/checking/run.sh を通じてスクリプトが実行可能であるが、実行権限 -rwxr-xr-x があるかどうかを確認します
2) スクリプトを単独で実行するのは問題ないので、タイミングの問題でしょうか?そこで、簡単な出力シェルスクリプトを作成しましたが、タイミング的には問題ありませんでした。問題は依然としてスクリプトにあります。
後でオンラインで確認したところ、スクリプト内の環境変数が原因ではないかと思いました。crontab を介してスクリプトを実行すると、現在のユーザーの代わりに root ユーザーが使用されるため、/etc/profile を実行して cat /etc/profile を確認しました。
考えられる理由の分析:
1) 現在のユーザーがこのシェル スクリプトの実行権限を持っていないかどうか ls -lrt /apps/service/mtk/checking/run を使用します。 .sh スクリプトが実行可能であるかどうかを確認しますが、実行権限がある - rwxr-xr-x
2) スクリプトを単独で実行するのは問題ないので、タイミングの問題ですか?そこで、簡単な出力シェルスクリプトを作成しましたが、タイミング的には問題ありませんでした。問題は依然としてスクリプトにあります。
後でインターネットで調べたところ、スクリプト内の環境変数かもしれないと思いました。crontab を介してスクリプトを実行すると、現在のユーザーの代わりに root ユーザーが使用されるため、環境を確認するために /etc/profile を実行しました。
#!/bin/sh export mypath=/root/project/wishnomal export JAVA_HOME=/root/lib/jdk1.7.0_72 PATH=$PATH:$JAVA_HOME/bin java -Xmx3000m -Xms3000m -server -d64 -Dfile.encoding=UTF-8 -Dfetch.threads=300 -classpath $mypath/:$mypath/wish2-assembly-1.0.0.jar newstandard.CrawlerNewStandard $* echo "END"
export は、ユーザー環境変数としてエクスポートされた環境変数を表示します
このようにして、crontab のスケジュールされたタスクは正常になります。
修正参考:
#!/bin/sh # ----------------------------------------------------------------------------- # Start script for the CMGP BOSSCONTROL # # $Id: run_bosscontrol.sh,v 1.0 2007/11/06 Exp $ # ----------------------------------------------------------------------------- #指定字符集 LANG=zh_CN.GBK export LANG RUN_HOME=. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/checking.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/ojdbc14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/commons-dbutils-1.1.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/log4j-1.2.14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/dom4j-1.6.jar export CLASSPATH java com.**.checking.Checking_Start >> log.out &
コマンドラインからスクリプトを手動で実行すると、Javaプログラムは正常に実行できますが、crontabのスケジュールされたタスクを使用しても効果がないようです。理由を確認して分析してください。理由:
1) 現在のユーザーがこのシェル スクリプトの実行権限を持っていないかどうか、ls -lrt /apps/service/mtk/checking/run.sh を使用して、スクリプトが実行可能であるかどうかを確認しますが、実行権限があるかどうかを確認します。 -rwxr-xr -x
2) スクリプト単体で実行しても問題ないので、タイミングの問題でしょうか?そこで、簡単な出力シェルスクリプトを作成しましたが、タイミング的には問題ありませんでした。問題は依然としてスクリプトにあります。
後でインターネットで調べたところ、スクリプト内の環境変数かもしれないと思いました。crontab を介してスクリプトを実行すると、現在のユーザーの代わりに root ユーザーが使用されるため、環境を確認するために /etc/profile を実行しました。
#!/bin/sh # ----------------------------------------------------------------------------- # Start script for the CMGP BOSSCONTROL # # $Id: run_bosscontrol.sh,v 1.0 2007/11/06 Exp $ # ----------------------------------------------------------------------------- export PATH=/apps/usr/java/jdk1.5/bin:$PATH export JAVA_HOME=/apps/usr/java/jdk1.5 export JRE_HOME=/apps/usr/java/jdk1.5/jre export CLASSPATH=/apps/usr/java/jdk1.5/lib:/apps/usr/java/jdk1.5/jre/lib:$CLASSPATH RUN_HOME=/apps/service/checking CLASSPATH=$CLASSPATH$RUN_HOME/lib/checking.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/ojdbc14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/commons-dbutils-1.1.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/log4j-1.2.14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/dom4j-1.6.jar export CLASSPATH=$CLASSPATH java com.**.checking.Checking_Start >> log.out &
export は、ユーザー環境変数としてエクスポートされた環境変数を表示します
上記の jar パッケージは、Eclipse ツールのエクスポートを通じてエクスポートされ、MANIFEST.MF ファイルは含まれません。パッケージ化ツール Ant を使用すると、デフォルトのビルドをパッケージ化できます。.xml ファイルにクラスパスを設定します
サードパーティの jar パッケージを manifest.mf ファイルに追加し、メイン プログラム クラスを指定します
追加build.xml に次の内容を追加します:
<!-- create a property containing all .jar files, prefix lib/, and seperated with a space --> <pathconvert property="libs.project" pathsep=" "> <mapper> <chainedmapper> <!-- remove absolute path --> <flattenmapper /> <!-- add lib/ prefix --> <globmapper from="*" to="lib/*" /> </chainedmapper> </mapper> <path> <!-- lib.home contains all jar files, in several subdirectories --> <fileset dir="${lib.dir}"> <include name="**/*.jar" /> </fileset> </path> </pathconvert>
さらに、マニフェスト ファイルの作成で、次を追加します:
<!-- 这样就可以将第三方jar包加入 --> <attribute name="Class-Path" value="${libs.project}" /> <!-- 程序运行的主类 --> <attribute name="Main-Class" value="com.**.checking.Checking_Start " />
この方法で ant を実行すると、結果として得られる jar パッケージの MANIFEST.MF の内容は次のようになります。 :
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0 Created-By: 1.5.0_09-b01 (Sun Microsystems Inc.) Implementation-Title: fee task Implementation-Version: 1.0 Implementation-Vendor: Aspire Main-Class: com.aspire.cmgp.flowcontrol.server.FlowControlServer Class-Path: lib/cmgp-util-1.0.1.jar lib/commons-codec-1.3.jar lib/comm ons-collections.jar lib/commons-dbcp-1.2.1.jar lib/commons-httpclient .jar lib/commons-logging.jar lib/commons-pool-1.2.jar lib/dom4j.jar l ib/log4j.jar lib/ojdbc14.jar
このように、プログラムが必要とするjarをシェルスクリプト内で指定する必要がなく、これが入っていれば環境変数の設定という煩わしい問題も発生しません。これが、より正式なものの動作方法です。
jar パッケージをシェルで直接実行するだけです: java -jar main project.jar -Xmx1024m -Xms1024m -Xmn512m,
#!/bin/bash を
source /etc/profile
source ~/ .bash_profile の後に追加します
テストしてください。 。
#! /bin/sh export JAVA_HOME=/usr/java/jdk1.6.0_18 export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar for i in lib/*.jar; do CLASSPATH=$i:${CLASSPATH} done export CLASSPATH=.:${CLASSPATH}
java -cp ${CLASSPATH} main メソッドが配置されているパッケージ名
以上がシェルスクリプトはJavaプログラムjarを実行するメソッドを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
