Heim  >  Artikel  >  Java  >  Das Shell-Skript implementiert die Methode zum Ausführen des Java-Programms jar

Das Shell-Skript implementiert die Methode zum Ausführen des Java-Programms jar

黄舟
黄舟Original
2017-10-19 09:30:052571Durchsuche

In diesem Artikel wird hauptsächlich die Methode zum Ausführen von Java-Programm-JAR über ein Shell-Skript vorgestellt. Jetzt werde ich es mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor und werfen wir einen Blick darauf

Bei der Bereitstellung von Projekten auf UBuntu starten wir das Programm häufig über eine Shell oder rufen das Java-Programm sogar regelmäßig über die geplante Crontab-Aufgabe auf, aber es gibt ein sehr seltsames Problem Ich habe zum Beispiel das folgende Shell-Skript geschrieben:


#!/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"

Wenn Sie das Skript manuell über die Befehlszeile ausführen, können Sie das Java-Programm normal ausführen, aber Verwenden Sie die geplante Crontab-Aufgabe, sie scheint keine Wirkung zu haben

Analyse möglicher Gründe:

1) Ob der aktuelle Benutzer keine ausführbaren Berechtigungen für dieses Shell-Skript hat, übergeben Sie ls -lrt / apps/service/mtk/checking/ Run.sh prüft, ob das Skript ausführbar ist, verfügt jedoch über die Ausführungsberechtigung – rwxr-xr-x

2) Da die alleinige Ausführung des Skripts kein Problem darstellt, ist es ein Timing Ausgabe? Also habe ich ein einfaches Ausgabe-Shell-Skript geschrieben und es gab zeitlich keine Probleme. Das Problem liegt immer noch am Skript.

Später habe ich online nachgeschaut und dachte, es könnten die Umgebungsvariablen im Skript sein, denn wenn das Skript über crontab ausgeführt wird, wird der Root-Benutzer anstelle des aktuellen Benutzers verwendet, also habe ich zur Überprüfung die Datei /etc/profile verwendet Die Umgebungsvariablen und dann ändern Sie sie wie folgt:

Analyse möglicher Gründe:

1) Überprüfen Sie über ls, ob der aktuelle Benutzer keine ausführbaren Berechtigungen für dieses Shell-Skript hat -lrt /apps/service/mtk/checking/run.sh Das Skript ist ausführbar, verfügt aber über die Ausführungsberechtigung -rwxr-xr-x

2) Da es kein Problem darstellt, das Skript alleine auszuführen, oder? ein Timing-Problem? Also habe ich ein einfaches Ausgabe-Shell-Skript geschrieben und es gab zeitlich keine Probleme. Das Problem liegt immer noch am Skript.

Später habe ich online nachgeschaut und dachte, es könnten die Umgebungsvariablen im Skript sein, denn wenn das Skript über crontab ausgeführt wird, wird der Root-Benutzer anstelle des aktuellen Benutzers verwendet, also habe ich zur Überprüfung die Datei /etc/profile verwendet Die Umgebungsvariablen und dann ändern Sie sie wie folgt:


#!/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 zeigt die als Benutzerumgebungsvariablen exportierten

an Auf diese Weise sind die von Crontab geplanten Aufgaben normal.

Änderungsreferenz:


#!/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 &

Wenn Sie das Skript manuell über die Befehlszeile ausführen, können Sie das Java-Programm normal ausführen, jedoch mit crontab geplant Aufgaben, es scheint, dass es nicht mehr funktioniert. Ich bin sehr deprimiert. Überprüfen Sie den Grund und analysieren Sie die möglichen Gründe:

1) Ob der aktuelle Benutzer keine ausführbaren Berechtigungen für dieses Shell-Skript hat, verwenden Sie ls -lrt /apps/service/mtk/checking /run.sh zeigt an, dass das Skript ausführbar ist, aber über die Ausführungsberechtigung verfügt -rwxr-xr-x

2) Da es kein Problem gibt, das Skript alleine auszuführen , ist es ein Timing-Problem? Also habe ich ein einfaches Ausgabe-Shell-Skript geschrieben und es gab zeitlich keine Probleme. Das Problem liegt immer noch am Skript.

Später habe ich online nachgeschaut und dachte, es könnten die Umgebungsvariablen im Skript sein, denn wenn das Skript über crontab ausgeführt wird, wird der Root-Benutzer anstelle des aktuellen Benutzers verwendet, also habe ich zur Überprüfung die Datei /etc/profile verwendet die Umgebungsvariablen und ändern Sie sie dann wie folgt:


#!/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 zeigt die als Benutzerumgebungsvariablen exportierten Umgebungsvariablen an

Das obige JAR-Paket wird über das Eclipse-Tool exportiert. Der Export enthält nicht die MANIFEST.MF-Datei. Wenn Sie das Verpackungstool Ant verwenden, können wir Class-Path

in der Standard-Build.xml festlegen Datei und fügen Sie das Drittanbieter-JAR-Paket zur Datei manifest.mf hinzu, geben Sie die Programmhauptklasse

an und fügen Sie den folgenden Inhalt in build.xml hinzu:


<!-- 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>

Fügen Sie außerdem beim Erstellen der Manifestdatei Folgendes hinzu:


<!-- 这样就可以将第三方jar包加入 -->  
<attribute name="Class-Path" value="${libs.project}" /> 
<!-- 程序运行的主类 --> 
<attribute name="Main-Class" value="com.**.checking.Checking_Start " />

Führen Sie den Inhalt von MANIFEST.MF wie folgt aus Das resultierende JAR-Paket lautet wie folgt:


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

Auf diese Weise ist es nicht erforderlich, das vom Programm benötigte JAR-Paket im Shell-Skript anzugeben, und Es gibt kein lästiges Problem beim Festlegen von Umgebungsvariablen. So funktionieren die formelleren.

Führen Sie einfach das JAR-Paket direkt in der Shell aus: java -jar main program.jar -Xmx1024m -Xms1024m -Xmn512m,

Append

source /etc/profile

source ~/.bash_profile

Test. .


#! /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} Der Paketname, in dem sich die Hauptmethode befindet. Der Klassenname, in dem sich die Hauptmethode befindet.

Das obige ist der detaillierte Inhalt vonDas Shell-Skript implementiert die Methode zum Ausführen des Java-Programms jar. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn