在使用 supervisor 管理 Java 进程中,command 命令比较长,所以想拆分这一部分,supervisor 好像并不支持这样的写法,还是我的调用变量的写法不对。
; 项目的基本配置
[setting:variables]
; Java 启动时占用的端口
server_port=
; Java 包运行的服务器地址,当启用 JMX 监控时取消注释
; server_host=
; 当前部署的环境为测试环境:test ,还是生产环境:prod
server_prod=test
; Java 包启用的用户,默认为 nginx ,可选为 root
server_user=nginx
; Java 包所在的目录
dir=
job_name=
module_name=
; Java 包启动的基本命令
[usage:java]
java_home=/usr/local/jdk8/bin/java -jar
java_memory=-Xms256m -Xmx256m -XX:MaxMetaspaceSize=256M
springboot_options=-Dspring.profiles.active=%(server_prod)s
java_path=%(setting:variables:dir)s/content/%(setting:variables:job_name)s/%(setting:variables:module_name)s.jar
; JMX 监控配置
[monitor:jmx]
jmx_start=-Dcom.sun.management.jmxremote
jmx_host=-Djava.rmi.server.hostname=%(server_host)s
jmx_port=-Dcom.sun.management.jmxremote.port=1%(server_port)s
jmx_rmi_port=-Dcom.sun.management.jmxremote.rmi.port=1%(server_port)s
jmx_ssl=-Dcom.sun.management.jmxremote.ssl=false
jmx_auth=-Dcom.sun.management.jmxremote.authenticate=false
; Supervisor 项目运行配置
[program:%(setting:variables:job_name)s-%(setting:variables:module_name)s]
command=%(usage:java:java_home)s \
%(usage:java:java_memory)s \
%(usage:java:springboot_options)s \
%(usage:java:java_path)s \
; 需要 JMX 监控时取消注释
; %(monitor:jmx:jmx_start)s \
; %(monitor:jmx:jmx_host)s \
; %(monitor:jmx:jmx_port)s \
; %(monitor:jmx:jmx_rmi_port)s \
; %(monitor:jmx:jmx_ssl)s \
; %(monitor:jmx:jmx_auth)s \
autostart=true
autorestart=true
startsecs=10
startretries=3
user=%(setting:variables:server_user)s
priority=999
redirect_stderr=true
stopasgroup=false
killasgroup=false
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=20
stdout_logfile=%(setting:variables:dir)s/logs/%(setting:variables:job_name)s/%(setting:variables:module_name)s.log
1
idontnowhat2say 236 天前
command 比较长建议直接用脚本,但脚本最后的启用使用 exec 命令。exec 是 用新的进程替换旧的,而不是 fork
|
2
KInG2 OP @idontnowhat2say 感谢,不过现在的目标对于我来说是纠结为什么这个不行,想知道是因为 supervisor 不支持还是什么的,以及如果支持的话怎么定义进去。
|
3
idontnowhat2say 236 天前
@KInG2 这个我以前也想弄过,记得应该是支持不了的。想要用自定义变量得声明环境变量,然后用 %(ENV_)s 前缀
|