検索
ホームページJava&#&チュートリアルシェルスクリプトはJavaプログラムjarを実行するメソッドを実装します

この記事では、主に 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 サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

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

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

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

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

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

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

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

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

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

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター