今天老板说要把虚机上的一个 Java 服务输出到控制台的日志关掉,是一个物联网的 TCP 服务,量太大太占系统资源了,下面分享下。
1. 手动启动,正常会输出不少日志
java -jar xxx.jar
这样是可以通过 journalctl -f -u xxx.service 查看终端日志输出的。
# /usr/lib/systemd/system/xxx.service
[Unit]
Description=xxx
After=emqx.target
Wants=emqx.target
[Service]
Type=simple
WorkingDirectory=/opt/xxx
ExecStart=/opt/jdk1.8.0_172-amd64/bin/java -jar /opt/xxx/xxx.jar
PrivateTmp=true
Restart=always
LimitNOFILE=65535
LimitNPROC=4096
LimitAS=infinity
LimitFSIZE=infinity
SuccessExitStatus=143
TimeoutStopSec=0
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target
3. 想要禁用的话,需要加上下面几个配置,以及启动参数需要稍作调整
在 [Service] 段加上:
StandardOutput=null
StandardError=null
SyslogLevel=emerg
然后将 ExecStart 调整为:
ExecStart=/opt/jdk1.8.0_172-amd64/bin/java -Dlogging.level.root=OFF -Dlogback.configurationFile=/dev/null -jar /opt/lpm/xxx.jar > /dev/null 2>&1
最终完整版:
# /usr/lib/systemd/system/xxx.service
[Unit]
Description=xxx
# After 和 Wants 配合使用,保证服务在 emqx 之后启动。
After=emqx.target
Wants=emqx.target
[Service]
# 服务类型:简单进程型,systemd 认为 ExecStart 启动的进程就是服务主进程。
Type=simple
# 工作目录
WorkingDirectory=/opt/xxx
# 服务启动命令
# -Dlogging.level.root=OFF ---关闭 Spring Boot 根日志级别
# -Dlogback.configurationFile=/dev/null ---让 Logback 日志框架读取空配置文件
# > /dev/null 2>&1 --把标准输出、错误输出丢到空设备
ExecStart=/opt/jdk1.8.0_172-amd64/bin/java -Dlogging.level.root=OFF -Dlogback.configurationFile=/dev/null -jar /opt/lpm/xxx.jar > /dev/null 2>&1
# 给服务分配独立的临时目录,安全隔离,避免和其他程序冲突
PrivateTmp=true
# 服务崩溃、退出、服务器重启后,自动无限重启
Restart=always
# 彻底关闭服务的标准输出、错误输出,禁止日志写入系统日志
StandardOutput=null
StandardError=null
SyslogLevel=emerg
# 系统资源限制:
#最大打开文件数 65535
#最大进程数 4096
LimitNOFILE=65535
LimitNPROC=4096
#无限制内存、文件大小
LimitAS=infinity
LimitFSIZE=infinity
# 退出码 143 视为正常退出
SuccessExitStatus=143
# 关闭服务时立即终止,不等待
TimeoutStopSec=0
KillSignal=SIGTERM
# 启用开机自启的目标:多用户图形模式(服务器默认启动级)
[Install]
WantedBy=multi-user.target
4. 重载配置,并查看输出
systemctl daemon-reload
systemctl restart xxx.service
systemctl status xxx.service
journalctl -f -u xxx.service
这样,该 Java 服务的控制台日志就被彻底静默了,系统日志里也不再出现大量无用输出。
|