通过服务启动JavaJAR(linux),参数作为单个变量
我想启动一个jar文件(SpringBoot应用程序),并附带其他参数 当我通过shell命令启动时,它会正常启动:通过服务启动JavaJAR(linux),参数作为单个变量,java,bash,shell,Java,Bash,Shell,我想启动一个jar文件(SpringBoot应用程序),并附带其他参数 当我通过shell命令启动时,它会正常启动: java -jar spring.boot.jar --parameter01="My Parameter Value 01" --parameter02="My Parameter Value 02" 现在,我想将所有参数传递到bashshell(在/etc/init.d中作为服务启动它) ($1等于上面的值>>--parameter01=“我的参数值01”--paramet
java -jar spring.boot.jar --parameter01="My Parameter Value 01" --parameter02="My Parameter Value 02"
现在,我想将所有参数传递到bashshell(在/etc/init.d中作为服务启动它)
($1等于上面的值>>--parameter01=“我的参数值01”--parameter02=“我的参数值02”)
然后Spring应用程序不识别值“My Parameter value 01”,而只识别“My”。
我该怎么办?我试图避开空格字符和引号字符,但没有任何效果 一个用单个参数调用
java-jar-spring.boot.jar
的简单脚本,让我们调用它/etc/init.d/run-spring-boot,在执行它之前确保chmod+x/etc/init.d/run-spring-boot
:
#!/bin/bash
echo java -jar spring.boot.jar $1
java -jar spring.boot.jar $1
使用引用的整个字符串的单个输入参数和转义的内部引号调用脚本:
/etc/init.d/run-spring-boot "--parameter01=\"My Parameter Value 01\" --parameter02=\"My Parameter Value 02\""
如果您的系统支持systemd,我想您可以尝试:
创建一个服务文件,您认为在/ETC/StReD/St/目录中的名称为:
sudo vi /etc/systemd/system/spring-boot.service
[Unit]
Description=Spring Boot Service
StartLimitIntervalSec=0
After=syslog.target
[Service]
Type=simple
Restart=always
RestartSec=4
User=root
ExecStart=/bin/bash -c "/usr/bin/java -jar spring.boot.jar --parameter01='My Parameter Value 01' --parameter02='My Parameter Value 02'"
[Install]
WantedBy=multi-user.target
接下来,您必须重新加载systemd:
sudo systemctl daemon-reload
接下来,您可以启动它:
sudo systemctl start spring-boot
获取状态:
systemctl status spring-boot
停下来:
sudo systemctl stop spring-boot
或者通过系统引导将其添加到autostart:
sudo systemctl enable spring-boot
要解决问题,您可以运行下一个并行终端窗口以查看实时更改:
sudo tail -f /var/log/syslog
我建议将变量分解为几个部分(
SENDER\u NAME
和PORT
),但您发布的示例应该可以工作。您使用的是什么操作系统和shebang行?@RuaTre请重新表述您的问题,现在几乎无法理解。
sudo tail -f /var/log/syslog