我将jar运行到我的日志中:
java -jar /opt/ftpcounter/sakura.jar>>/opt/ftpcounter/ftpcounter.log
然后我的日志有jar结果:
2017-11-23 02:09:50,904 [GetSql.java:166][ERROR]:数据库连接异常,请检查地址/账号/密码是否正确
这是我的嘘,想要它提醒我当我使用crontab运行它时jar怎么样:
#!/bin/bash
#导入JAVA环境变量(根据当前服务器调整)
export LANG="en_US.UTF-8"
JAVA_HOME=/usr/local/jdk8/
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
#指定Jar所在目录
FTP_HOME=/opt/ftpcounter
CONFIG=$FTP_HOME/configer.properties
#开始运行
echo "【`date +%Y-%m-%d_%H:%M:%S`】开始执行数据库导入程序......"
sed -i "/OVER/ s/=.*/=0/g" $CONFIG
cd $FTP_HOME && echo "进入目录:$FTP_HOME"
#执行结果输出到日志
java -jar $FTP_HOME/sakura.jar>>$FTP_HOME/ftpcounter.log
java -jar $FTP_HOME/sakura.jar && echo "执行sakura.jar完成!" || echo "执行sakura.jar失败!"
echo "【`date +%Y-%m-%d_%H:%M:%S`】数据库导入程序运行完毕,等待下次执行."
然后我的日志跳过了我的jar结果,只是提醒我susess并且失败,那不是我想要的:
【2017-11-23_02:16:01】开始执行数据库导入程序......
进入目录:
执行sakura.jar失败!
【2017-11-23_02:16:01】数据库导入程序运行完毕,等待下次执行.
答案 0 :(得分:0)
jar可能没有Manifest.txt
以下内容来自Oracle Setting an Application's Entry Point
设置应用程序的入口点
如果你有一个捆绑在JAR文件中的应用程序,你需要一些方法来指示JAR文件中哪个类是你的应用程序的入口点。您可以使用清单中的Main-Class标头提供此信息,该标头具有以下一般形式:
Main-Class: classname
值classname是作为应用程序入口点的类的名称。
回想一下,入口点是一个具有签名public static void main(String [] args)的方法的类。
在清单中设置Main-Class标头后,使用以下形式的java命令运行JAR文件:
java -jar JAR-name
执行Main-Class标头中指定的类的主要方法。
示例
我们想在运行JAR文件时在MyPackage包中的MyClass类中执行main方法。
我们首先创建一个名为Manifest.txt的文本文件,其中包含以下内容:
Main-Class: MyPackage.MyClass
警告:文本文件必须以新行或回车结束。如果最后一行没有以新行或回车结束,则不会正确解析。
然后我们通过输入以下命令创建一个名为MyJar.jar的JAR文件:
jar cfm MyJar.jar Manifest.txt MyPackage/*.class
这将创建一个带有以下内容的清单的JAR文件:
Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
Main-Class: MyPackage.MyClass
使用以下命令运行JAR文件时,MyClass的main方法执行:
java -jar MyJar.jar
使用JAR工具设置入口点
'' flag(对于' entrypoint')创建或覆盖清单的Main-Class属性。它可以在创建或更新JAR文件时使用。使用它指定应用程序入口点,而无需编辑或创建清单文件。 例如,此命令创建app.jar,其中清单中的Main-Class属性值设置为MyApp:
jar cfe app.jar MyApp MyApp.class
您可以通过运行以下命令直接调用此应用程序:
java -jar app.jar
如果入口点类名称在包中,则可以使用'。' (点)字符作为分隔符。例如,如果Main.class位于名为foo的包中,则可以通过以下方式指定入口点:
jar cfe Main.jar foo.Main foo/Main.class