实现输出到 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
}