systemctl后台服务与journalctl日志与系统日志

服务器开发系列


前言

服务器开发中,为了保证应用进程可靠性与稳定,防止机器宕机、进程crash导致进程不能故障后,不能恢复,因此监控进程状态尤为重要,CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon,原来管理系统启动和管理系统服务的相关命令全部由systemctl命令来代替。systemd还包含了一个叫做journalctl的辅助组件,其主要作用是管理系统的事件日志记录。journalctl可以查看所有的系统日志文件,由于日志信息量很大,journalctl还提供了各种参数帮助用户更快速的定位到日志信息。


一、如何配置systemd?

Centos 上配置开机自启动的 3 种方式
方式一:直接在 / etc/rc.d/rc.local 中添加服务启动命令
方式二:通过 chkconfig 配置服务自启动
方式三:Centos7 通过 systemctl enble 配置服务开机自启动(中文讲解systemctl)

当我们提到systemctl就一定需要知道systemd,因为Linux 服务管理有两种方式service和systemctl。而systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动,systemd对应的进程管理命令就是systemctl。值得一提的是,systemctl命令兼容了service。

每一个 Unit都有一个配置文件,告诉 Systemd 怎么启动这个 Unit,Systemd 默认从目录/etc/systemd/system/读取配置文件,但是里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,其是真正的配置文件存放在那个目录。systemctl enable 命令用于在上面两个目录之间,建立符号链接关系。systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动

命令格式:
systemctl [command] [–type=TYPE] [–all]
配置如下,参考nginx.service配置

    ln -s /opt/app/nginx/nginx.service /usr/lib/systemd/system/nginx.service;
    systemctl enable nginx;     #建立符号链接关系        
    systemctl start nginx;      #启动服务
    
	最终会生成两个链接地址:分别如下
	/etc/systemd/system/nginx.service
	/usr/lib/systemd/system/nginx.service
systemctl start nginx.service   #启动网络服务
systemctl stop nginx.service    #停止网络服务
systemctl restart nginx.service #重启网络服务
systemctl status nginx.serivce  #查看网络服务状态
systemctl mask nginx.serivce    #注销网络服务
systemctl unmask nginx.serivce  #取消注销网络服务
systemctl is-active network.service #查看服务是否启动
systemctl poweroff #系统关机
systemctl reboot   #重新启动

systemctl daemon-reload #因配置改动重新加载
systemctl list-dependencies module #查看模块依赖

nginx.service具体配置如下,具体可以网上找下参数含义,start_nginx.sh 为启动进程的脚本

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
Restart=always
RestartSec=1
PIDFile=/opt/vplatform/nginx/logs/nginx.pid
ExecStartPre=/usr/bin/rm -f /opt/vplatform/nginx/logs/nginx.pid
ExecStartPre=/opt/vplatform/nginx/sbin/nginx -t
ExecStart=/opt/vplatform/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target

通过 tail /var/log/messages可以查看系统操作日志。
remote-fs.target 是一个特殊的目标单元,它表示所有的远程文件系统(例如通过 NFS、SMB 或 SSHFS 挂载的文件系统)都已经挂载完成。

nss-lookup.target 是 systemd 中的一个特殊目标单元,代表了基本的网络名称解析可以使用。这通常意味着 /etc/nsswitch.conf 中配置的所有服务都已经启动并可以使用。

network.target是一个systemd单元,代表系统网络服务的启动和停止。当该单元启动时,系统会启动所有的网络服务,包括网络接口、DNS解析器、网络安全等。当该单元停止时,所有网络服务都会被关闭。该单元通常在系统启动时自动启动,以确保网络服务可用。

local-fs.target 是 systemd 中的一个特殊 target,用于表示本地文件系统的挂载状态。它是一个虚拟的 target,不对应任何具体的服务或单元,但可以用来控制一组相关的服务或单元的启动顺序和依赖关系。local-fs.target 的作用是等待本地文件系统全部挂载完毕,然后再启动依赖于本地文件系统的服务。在启动过程中,systemd 会按照一定的顺序挂载本地文件系统,并在挂载完成后触发 local-fs.target。

二、journalctl的用法

CentOS系统中有两个日志服务,分别是传统的 rsyslog 和 systemd-journal
在这里插入图片描述

查看日志占用的磁盘空间;

journalctl --disk-usage

临时的清理日志,设置日志空间大小

journalctl --vacuum-size=500M     
journalctl --vacuum-time=1month

查看日志

journalctl -u talk -f
journalctl -u talk -n 20 --no-pager
journalctl -u talk -n 20 --no-pager --since today
journalctl -u talk -n 20 --no-pager --since "2020-08-26 05:25" --until "2020-08-26 05:30"
journalctl -u talk -n 20 --no-pager --since "5 minutes ago"
journalctl -u talk -n 20 --no-pager --since "2 hours ago"
journalctl -u talk -f -n 20 |grep -C50 over    //over 是待查字段

配置持久性容量500m,且重启日志不被清理
以System开头的选项用于限制磁盘使用量, 也就是 /var/log/journal 的使用量。 以Runtime开头的选项用于限制内存使用量, 也就是 /run/log/journal 的使用量

journalctl --vacuum-size=5000M 
mkdir /var/log/journal && chgrp systemd-journal /var/log/journal && chown 2775 /var/log/journal                
echo "SystemMaxUse=5000M" >> /etc/systemd/journald.conf && echo "ForwardToSyslog=no" >> /etc/systemd/journald.conf
systemctl restart systemd-journald.service

三、系统日志

Linux系统日志是记录了系统运行状态、程序运行情况以及系统事件的文件。它包含了各种级别的信息,从调试信息和错误报告到警告和系统事件等。Linux系统日志主要分为四个部分:内核日志、系统日志、安全日志和应用程序日志。

内核日志:记录了系统内核的运行状态和事件,例如系统启动和关机时间、硬件错误等。
系统日志:记录了系统服务和进程的运行情况,例如登录信息、网络连接等。
安全日志:记录了系统的安全事件,例如认证失败、攻击尝试等。
应用程序日志:记录了应用程序的运行状态和事件,例如数据库服务器的连接信息、Web服务器的请求信息等。
通过查看系统日志,管理员可以了解系统的状态和运行情况,诊断问题并进行故障排除。

/var/log/dmesg 内核引导信息日志
/var/log/message 标准系统错误信息日志
/var/log/maillog 邮件系统信息日志
/var/log/cron 计划任务日志
/var/log/secure 安全信息日志

查看标准系统日志
cat /var/log/messages |grep “Out of memory”
cat /var/log/messages |grep “Nov 15 14:18”
dmesg |grep “Out”

四、系统日志限制

经常发现内部日志频繁打印时,journalctl日志输出不完整,只有一部分,怀疑是journalctl最大缓存限制导致。
当系统中出现大量的日志消息时,为了避免日志过度占用系统资源,systemd-journald 会对日志消息的发送速率进行限制。RateLimitBurst 选项指定了在一个时间周期内最多可以发送的日志消息数量,单位是条/秒。例如,如果将 RateLimitBurst 设置为 1000,表示在一个时间周期内最多可以发送 1000 条日志消息。
当达到 RateLimitBurst 的限制时,systemd-journald 会暂时停止接收新的日志消息,直到时间周期结束。时间周期的长度由 RateLimitInterval 选项指定,默认为 30秒。
因此,如果您需要在短时间内发送大量的日志消息,可以将 RateLimitBurst 的值增加,以提高日志消息的发送速率。但是,需要注意的是,增加 RateLimitBurst 的值可能会导致系统资源被过度占用,因此需要根据实际情况进行调整。

在 /etc/systemd/journald.conf 文件中,RateLimitBurst 是一个控制日志消息发送速率的选项。因此可以修改此参数
在这里插入图片描述
方式1:不限制
RateLimitInterval=0
RateLimitBurst=0

方式2:增大条目
RateLimitBurst=30000

并重启解决
sudo systemctl restart systemd-journald

总结

通过上面的讲解大家应该清楚了systemctl与journalctl基本用法,更加高深的用法查找其他的资料!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Systemctljournalctl是Linux操作系统中的两个命令。 Systemctl是一个系统管理命令,用于管理系统服务。它可以启动、停止、重启、重载或查询系统中的服务。使用systemctl命令,可以方便地管理和控制系统的各个服务,如网络服务、文件服务、数据库服务等。 Journalctl是一个日志查询命令,用于查看和分析系统日志。它可以查看系统中的各种日志信息,包括内核日志和应用程序日志。通过journalctl命令,可以根据时间范围、服务名称、关键字等条件来查询和过滤日志信息。 使用journalctl命令,可以查看指定时间范围内的日志,如过去某个时间点、过去几分钟、过去一天等。同时,也可以根据服务名称、关键字等进行日志的过滤和搜索。journalctl命令的配置文件是/etc/systemd/journald.conf,可以对其进行相应的配置修改。 综上所述,Systemctl是用于管理系统服务的命令,而journalctl是用于查询和分析系统日志的命令。它们都是Linux系统中非常常用的命令,可以帮助管理员更好地管理和维护系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Linux基础:systemctljournalctl常用命令](https://blog.csdn.net/fly910905/article/details/103223030)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [systemctl/journalctl Ubuntu](https://blog.csdn.net/hushui/article/details/107560505)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

c+猿辅导

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

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

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

打赏作者

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

抵扣说明:

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

余额充值