systemd启动java服务踩坑---systemd无法加载到profile配置文件

问题描述

在配置systemd启动java服务时,发现服务怎么都注册不到注册中心去,各方查找资料没有找到原因,然后去查看了java服务的日志。
发现里面有几个配置在服务器上的profile中的参数没有别正常加载,然后就怀疑是不是启动systemd程序时还没有加载profile配置文件呢然后就照着这个方向去尝试了下果然是因为这个。

问题解决

在systemd程序中增加配置项,将profile中的配置项移动进来就解决了
第一步:service中新增EnvironmentFile项,指定配置文件,指定以后启动systemd程序,会加载这个配置文件

[Unit]
Description=systemd service for mdm-case-server
After=network.target

[Service]
Type=simple
EnvironmentFile=/etc/systemd/serverconfig # 增加这个!!!!!!!!!!!!!
WorkingDirectory=/apps/server-admin/mdm-servers/mdm-case-server/
StandardOutput=null
StandardError=null
SyslogIdentifier=mdm-case-server
ExecStartPre=/usr/sbin/logrotate --state /var/log/logrotate.tmp --force /etc/logrotate.d/mdm-case-server
LimitNOFILE = 65535
ExecStart= /usr/java/bin/java -Xss1m -server -Xms512m -Xmx1024m -Xmn128m -XX:MetaspaceSize=128M -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/apps/server-admin/mdm-servers/mdm-case-server/jvm_dump/mdm-case-server-biz.heapdump -XX:-OmitStackTraceInFastThrow -javaagent:/apps/server-admin/mdm-servers/mdm-case-server/skywalking-agent.jar -Dskywalking.trace.ignore_path=/actuator/**  -Dskywalking.agent.sample_n_per_3_secs=1200 -Dskywalking.agent.service_name=mdm-case-server -Dskywalking.agent.env_sign=G3 -Dskywalking_config=/apps/server-admin/mdm-servers/mdm-case-server/config/agent.config -Dskywalking.plugin.kafka.bootstrap_servers=10.3.8.218:30002,10.3.8.219:30001,10.3.8.220:30003 -jar /apps/server-admin/mdm-servers/mdm-case-server/mdm-case-server-biz.jar --spring.profiles.active=master
ExecStop=/bin/kill -SIGTERM $MAINPID

[Install]
WantedBy=multi-user.target

第二步:新建一个配置文件将profile的配置信息放进去

vim /etc/systemd/serverconfig
# 新增以下内容
ENV_ACTIVE=master
ELK_URL=172.17.44.80:19092,172.17.44.79:19092,172.17.44.78:19092

第三步:重新加载systemd配置文件重启服务ok了

systemctl daemon-reload
systemctl restart mdm-case-server.service

到此问题就解决了。

总结

这个问题有点像java里面的过滤器和拦截器,他们在程序启动时加载顺序不一样,所以将参数放到较后启动的程序里面自然会加载不到。理解了原理其实就很好解决了。

猜你喜欢

转载自blog.csdn.net/m0_46897923/article/details/128191796