systemd控制 JAVA 服务

这篇博客介绍了如何在systemd服务配置中屏蔽日志输出到messages,并使用自定义日志和日志轮转。配置包括设置StandardOutput和StandardError为null,以及通过rsyslog将日志重定向到特定文件。此外,还展示了服务依赖管理和启动脚本检查依赖进程的端口监听情况。
摘要由CSDN通过智能技术生成

实现屏蔽输出到 messages 中日志信息

[Unit]
Description=center service
After=network.target
After=syslog.target
Wants=network-online.target

[Service]
Type=simple

User=cig
Group=cig
# 屏蔽日志输出到 messages 中
StandardOutput=null
StandardError=null

EnvironmentFile=-/path/to/spms-share

# 这里 = 号右边写上自己程序的执行文件的绝对路径和参数
ExecStart=/usr/local/java/bin/java $JAVA_OPTS -jar ${SPMS_HOME}/center.jar

ExecStartPost=

# 重启模式是无论怎样都会重启这个程序,无法用 kill -9 杀死
Restart=always

# 这个表示重启的信号,也反过来映射的只有使用 systemctl stop  程序名,才能停止此程序
RestartPreventExitStatus=1 6 SIGABRT

KillMode=process

LimitNOFILE=104857
LimitNPROC=1048576

[Install]
WantedBy=multi-user.target

环境变量文件 /path/to/env 内容

JAVA_OPTS='-Xms512m -Xmx512m'
SPMS_HOME=/jar

处理服务之间的依赖关系

如果服务之间有依赖关系,可以使用 一个脚本循环检查依赖的进程或者检查依赖进程的监听端口。

下面是一个检查依赖进程监听端口是否存在的示例:

#!/bin/bash
while true;do if /usr/sbin/ss -ntal|/usr/bin/grep ":${1} ";then break;fi; /usr/bin/sleep 1.5;done

在 systemd 的配置文件中使用

config.service

[Unit]
Description=config service
After=network.target syslog.target
Wants=network-online.target

# center 服务启动后再启动此服务
After=center.service
# 等待 center服务启动后再启动此服务
Wants=center.service

[Service]
Type=simple

User=cig
Group=cig

StandardOutput=null
StandardError=null

EnvironmentFile=-/apps/cig/systemd-conf/spms-share
# 这里使用了
ExecStartPre=/apps/cig/systemd-conf/bin/check.sh 8761 8888

ExecStart=/usr/local/java/bin/java $JAVA_OPTS -jar ${SPMS_HOME}/spms-config.jar  --spring.cloud.config.server.native.searchLocations=/apps/cig/config

ExecStartPost=

Restart=always
RestartPreventExitStatus=1 6 SIGABRT

KillMode=process

LimitNOFILE=104857
LimitNPROC=1048576

[Install]
WantedBy=multi-user.target

通用服务配置:

[Unit]
Description=SPMS-Center service
After=network.target syslog.target
After=spms-device.service

Wants=network-online.target
Wants=spms-device.service

[Service]
Type=simple

User=cig
Group=cig

EnvironmentFile=-/etc/default/spms-share

ExecStartPre=

ExecStart=/usr/local/java/bin/java $JAVA_OPTS -jar ${SPMS_HOME}/spms-%i.jar

ExecStartPost=

Restart=always
RestartPreventExitStatus=1 6 SIGABRT

KillMode=process

LimitNOFILE=104857
LimitNPROC=1048576

[Install]
WantedBy=multi-user.target

使用自定义日志

[Unit]
Description=center service
After=network.target
After=syslog.target
Wants=network-online.target

[Service]
Type=simple

User=cig
Group=cig
# 关键配置部分,注意这里的 spms-wvp ,后面需要用
SyslogIdentifier=center
StandardOutput=syslog
StandardError=syslog

EnvironmentFile=-/path/to/spms-share

ExecStart=/usr/local/java/bin/java $JAVA_OPTS -jar ${SPMS_HOME}/center.jar

ExecStartPost=

Restart=always
RestartPreventExitStatus=1 6 SIGABRT

KillMode=process

LimitNOFILE=104857
LimitNPROC=1048576

[Install]
WantedBy=multi-user.target

配置 rsyslog

[root@node1 ~]# cat /etc/rsyslog.d/spms-wvp.conf
if ($programname == 'center') then {
   action(type="omfile" file="/logs/center.log")
   stop
}

$programname == 'center' 中的 center 需要和 systemd 文件中 SyslogIdentifier 的值一致
/logs/center.log 是具体的日志路径

配置日志轮转

[root@node1 ~]# cat /etc/logrotate.d/spms-wvp
/logs/center.log {
        copytruncate
        dateext
        dateformat  -%Y%m%d%H
        size 1M
        rotate 5
        compress
        delaycompress
        createolddir
        notifempty
        missingok
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark_西瓜甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值