Shell脚本运行Java Jar服务

时间:2015-04-21 08:40:08

标签: java shell

我想创建一个shell脚本来运行java服务。实际命令是

java -Dorg.vertx.logger-delegate-factory-class-name=org.vertx.java.core.logging.impl.SLF4JLogDelegateFactory -Dlogback.configurationFile=conf/web/logback.xml -jar vertx-web-0.1-fat.jar -conf conf/web/conf.json -cluster -cp conf/web:conf/web/lib/slf4j-api-1.7.12.jar:conf/web/lib/logback-classic-1.1.2.jar:conf/web/lib/logback-core-1.1.2.jar 

如果我像那样执行它就可以了。但它会变得无效且凌乱。我决定创建一个shell脚本:

#!/bin/sh

app_name=vertx-web-0.1-fat.jar

#::=== logger
logger_name=logback

#::=== config
config_base=conf/web
config_app=conf.json
config_log=logback.xml

#::=== arguments
args_factory_logger=org.vertx.logger-delegate-factory-class-name=org.vertx.java.core.logging.impl.SLF4JLogDelegateFactory
args_classpath=conf/web:conf/web/lib/slf4j-api-1.7.12.jar:conf/web/lib/logback-classic-1.1.2.jar:conf/web/lib/logback-core-1.1.2.jar

args_other=-cluster

#::=== execute
java -D$args_factory_logger -D$logger_name.configurationFile=$config_base/$config_log -jar $app_name -conf $config_base/$config_app $args_other -cp $args_classpath

但它不起作用和响应

: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
Error: Unable to access jarfile vertx-web-0.1-fat.jar
: command not found

你能给我任何线索或解决方案吗? 谢谢

此致 Stefio

3 个答案:

答案 0 :(得分:1)

要将Java应用程序作为服务启动,我建议您查看JSVC project。这很容易实现,并且可以为您处理很多事情。

答案 1 :(得分:0)

我认为您需要以安全的方式进行delcare var。对于最佳实践,我总是这样定义var:

myVar="My.contet"

因此,经过一些重构后,我认为该脚本可能是:

#!/bin/sh

app_name="vertx-web-0.1-fat.jar"

#::=== logger
logger_name="logback"

#::=== config
config_base="conf/web"
config_app="conf.json"
config_log="logback.xml"

#::=== arguments
args_factory_logger="org.vertx.logger-delegate-factory-class-name=org.vertx.java.core.logging.impl.SLF4JLogDelegateFactory"
args_classpath="conf/web:conf/web/lib/slf4j-api-1.7.12.jar:conf/web/lib/logback-classic-1.1.2.jar:conf/web/lib/logback-core-1.1.2.jar"

args_other="-cluster"

#::=== execute
java -D${args_factory_logger} -D$logger_name.configurationFile=$config_base/$config_log -jar $app_name -conf $config_base/$config_app ${args_other} -cp ${args_classpath}

如果要查看执行的命令,请使用echo命令:

echo "java -D${args_factory_logger} -D$logger_name.configurationFile=$config_base/$config_log -jar $app_name -conf $config_base/$config_app ${args_other} -cp ${args_classpath}"

答案 2 :(得分:0)

当您为变量赋值时,shell将特殊字符视为关键字符(而不是值)。因此试图执行特殊字符“:”。

根据您的需要,您需要使用引号,强引号或周报价。

在你的情况下,我建议强烈引用。

所以你的命令应该是:

 args_classpath='conf/web:conf/web/lib/slf4j-api-1.7.12.jar:conf/web/lib/logback-classic-1.1.2.jar:conf/web/lib/logback-core-1.1.2.jar'