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

シェルスクリプトはJavaプログラムjarを実行するメソッドを実装します

Oct 19, 2017 am 09:30 AM
java shell 走る

この記事では、主に 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 までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

See all articles