【Linux】 服务器优化之定时任务:自动清理日志,重启服务

⭐️背景

部署在客户服务器项目无法访问,最后发现服务器上的eurekazuul 挂啦,服务报错。宕机原因为日志文件占用大量磁盘,服务器重启。

在服务器运维中,定时任务是一项非常重要的工作,可以帮助我们清理不必要的日志文件,定期重启服务以确保系统的稳定性和性能。本文将介绍如何使用 Linux 的定时任务功能来清理日志文件并自动重启服务。

🏆处理流程

查看进程

在开始设置定时任务之前,我们首先需要查看运行中的进程,确保我们定时任务的操作不会影响到正在运行的服务。使用以下命令查看特定进程,比如这里以查看名为 eureka 的进程为例:

ps aux | grep eureka

具体参数说明

  • ps aux: 显示当前系统中所有用户的所有进程的详细信息。
  • grep eureka: 过滤包含 “eureka” 字符串的行。

清理日志文件

应用程序的日志文件可能会变得非常庞大,影响磁盘空间。为了解决这个问题,我们可以定期清空日志文件。下面的命令将清空指定的日志文件(这里以 nohup.out 为例):

echo "" > nohup.out

具体参数说明

  • echo “”: 输出一个空字符串。
  • >: 重定向运算符,将左边的输出覆盖写入到右边指定的文件中。
  • nohup.out: 文件名,这里是将输出写入到 nohup.out 文件。

重启服务

nohup java -jar -Xms512m -Xmx512m cloud-eureka.jar /opt/app/eureka/logs/ 2>&1 &

具体参数说明

  • nohup: 用于让命令在后台运行,并且即使终端关闭也不会被挂起。这对于长时间运行的进程(如Java应用程序)很有用。
  • java -jar -Xms512m -Xmx512m cloud-eureka.jar: 启动Java应用程序 cloud-eureka.jar,设置初始堆大小为512MB(-Xms512m)和最大堆大小为512MB(-Xmx512m)。
  • /opt/app/eureka/logs/: 指定日志文件的目录,这是Java应用程序的日志输出路径。
    2>&1: 将标准错误输出(stderr)重定向到标准输出(stdout)。这样,所有输出都会被追加到日志文件中。
  • &: 在命令末尾添加 & 表示将该命令放到后台运行。

💖问题总结

  • 服务本地日志没有定时清理,造成机器重启
  • 机器重启之后,服务没有自动重启

👍完整处理方案

清理日志脚本

创建shell脚本

# 新建一个可执行文件
touch /opt/java/auto-del-7-days-ago-log.sh
# 分配可运行权限
chmod +x /opt/java/auto-del-7-days-ago-log.sh
# 执行之后的文件
-rwxr-xr-x 1 root root 215 11月 30 16:57 auto-del-7-days-ago-log.sh
-rwxr-xr-x 1 root root 619 11月 30 17:09 auto-start-common-server.sh

-rwxr-xr-x 表示这是一个普通文件,root用户具有读、写和执行权限,root组中的其他用户和其他用户具有读和执行权限,但没有写权限

  • 第一个字符 - 表示这是一个普通文件。如果是目录,该字符将是 d。
  • 后续的九个字符 rwxr-xr-x 表示文件的权限。每组三个字符分别表示读(r)、写(w)和执行(x)权限。
    rwx 表示文件所有者(root用户)具有读、写和执行权限。
    r-x 表示文件组成员(root组中的其他用户)具有读和执行权限,但没有写权限。
    r-x 表示其他用户(不属于root组的用户)具有读和执行权限,但没有写权限。

auto-del-7-days-ago-log.sh 脚本内容

find /opt/java/zuul/logs/ -mtime +30 -name "*.log" -exec rm -rf {} \;
find /opt/java/eureka/logs/ -mtime +30 -name "*.log" -exec rm -rf {} \;

echo > /opt/app/zuul/nohup.out
echo > /opt/app/eureka/nohup.out

脚本具体说明

  • find /opt/java/eureka/logs/: 在指定目录下查找文件。
  • -mtime +30: 匹配修改时间在30天之前的文件。
  • -name “*.log”: 匹配文件名以 .log 结尾的文件。
  • -exec rm -rf {} ;: 对于每个匹配到的文件,使用 rm -rf 命令进行删除。-rf 参数表示强制删除,即使文件是只读的,也不会提示确认删除。
  • echo > /opt/app/eureka/nohup.out: 使用 echo 命令将一个空字符串输出到 /opt/app/eureka/nohup.out 文件中。

自动重启服务

同样创建脚本auth-start-common-server.sh

#!/bin/bash
count=`ps -ef |grep 'eureka'|grep -v "grep" | wc -l`;
echo 'count ==== '$count''$flag
if [ $count -gt 0 ]
then
 echo 'eureka app is running!'
else
 echo 'eureka app is stop'
 cd /opt/app
nohup java -jar -Xms512m -Xmx512m cloud-eureka.jar /opt/app/eureka/logs/ 2>&1 &
 echo 'eureka app start'
fi

脚本具体说明

  • count=$(ps -ef | grep ‘eureka’ | grep -v “grep” | wc -l): 这一行使用ps命令列出所有进程,然后使用grep来过滤包含字符串 ‘eureka’ 的行,接着使用grep -v "grep"来排除 grep 进程本身,最后通过 wc -l 统计匹配行的数量,并将结果保存在变量 count 中。
  • echo 'count ==== ' c o u n t ′ ′ count'' count′′flag: 这一行将匹配到的进程数量输出到标准输出,包括一个额外的 $flag 变量,这里看起来没有定义 $flag,可能是脚本其他部分的变量。
  • if [ $count -gt 0 ] then … else … fi: 这是一个条件语句,根据 $count 的值来判断是否有进程正在运行。如果 $count 大于 0,则输出 “eureka app is running!”,否则进入 else 分支。
  • cd /opt/app: 进入 /opt/app 目录,这可能是应用程序的工作目录。
  • nohup java -jar -Xms512m -Xmx512m cloud-eureka.jar /opt/app/eureka/logs/ 2>&1 &: 启动 Java 应用程序 cloud-eureka.jar,使用 nohup 命令让应用程序在后台运行,并将输出重定向到 /opt/app/eureka/logs/ 目录中的文件。
  • echo ‘eureka app start’: 输出一条信息表明 eureka 应用程序已经启动。

计划任务

在Linux系统中,crond 是一个后台进程,负责执行用户预定的任务,这些任务可以是定期执行的脚本、命令或其他可执行文件。crond 是基于时间的任务调度程序,通常被称为cron守护进程。
crontab -l:列表显示计划任务

定时清理日志文件

使用以下步骤设置定时任务,每天凌晨执行清理日志文件的操作:

# 打开定时任务配置文件
crontab -e
# 在文件末尾添加以下行
0 0 * * 0 /opt/java/auto-del-7-days-ago-log.sh

定时重启服务

为了确保服务的稳定性。以下是设置每分钟监测的定时任务的步骤

# 打开定时任务配置文件
crontab -e

# 在文件末尾添加以下行
* * * * * /opt/app/auth-start-common-server.sh

开机启动定时任务

为了确保定时任务在系统启动时自动生效,需要启用 crond 服务。使用以下命令启用 crond 服务:

systemctl enable crond.service

最后,可以使用以下命令查看 crond 服务的状态,确保定时任务已经生效:

systemctl status crond.service

通过以上步骤,成功地设置了定时任务,实现了日志文件的定期清理和服务的自动重启,有助于维护系统的稳定性和性能。

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Abner G

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

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

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

打赏作者

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

抵扣说明:

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

余额充值