我想创建一个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
答案 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'