【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 ]
thenecho 'eureka app is running!'
elseecho '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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 的基本概念和常用命令,应用程序开发中的实际应用。

Docker 是一种开源的容器化平台,能够帮助开发人员更加轻松地打包、部署和运行应用程序。以下是 Docker 的基本概念和优势: 基本概念: 镜像(image):类似于虚拟机镜像,包含了应用程序运行所需的所…

CityEngine2023安装与快速入门

目录 0 引言1 安装2 CityEngine官方示例2.1 官方地址2.2 导入示例工程 3 结尾 🙋‍♂️ 作者:海码007📜 专栏:CityEngine专栏💥 标题:CityEngine2023安装与快速入门❣️ 寄语:书到用时方恨少&am…

Linux基础命令之网络配置管理常用命令

在Linux中,有许多命令可以用于网络管理。以下是一些常用的Linux网络管理相关的命令 # 1、ifconfig 这是一个常用的网络配置工具,可以用来查看和配置网络接口。这个命令在大多数Linux发行版中都可以使用,包括Ubuntu、Debian、CentOS、Fedora…

解读拼多多Q3财报:Temu崭露头角,跨境故事刚刚开场

11月28日,拼多多发布了2023年第三季度的业绩报告,季度营收688.4亿元,较去年同期大涨94%,比市场预期高出100多亿元。 截止到11月28日美股收盘,拼多多股价上涨18.8%,总市值达到1834.23亿美元。11月29日美股开…

P1025 [NOIP2001 提高组] 数的划分

暴搜 剪枝 枚举固定的位置 #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e310; int n,k; int res; void dfs(int last,int sum,int cur){if(curk){if(sumn)res;return;}for(int ilast;isum<n;i)dfs(i,sumi,cur1); } int main() {c…

倒计时(JS计时器)

<script>function countDown() {document.body.innerHTML ;//清空页面内容var nowTimer new Date(); //现在时间的毫秒数var valueTimer new Date("2024-1-1 12:00"); //用户输入年份倒计时时间毫秒数var timer (valueTimer - nowTimer) / 1000; //倒计时秒…

有什么值得推荐的node. js练手项目吗?

前言 可以参考一下下面的nodejs相关的项目&#xff0c;希望对你的学习有所帮助&#xff0c;废话少说&#xff0c;让我们直接进入正题 1、 NodeBB Star: 13.3k 一个基于Node.js的现代化社区论坛软件&#xff0c;具有快速、可扩展、易于使用和灵活的特点。它支持多种数据库&…

解决:ValueError: the first two maketrans arguments must have equal length

解决&#xff1a;ValueError: the first two maketrans arguments must have equal length 文章目录 解决&#xff1a;ValueError: the first two maketrans arguments must have equal length背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在…

大数据-之LibrA数据库系统告警处理(ALM-37018 数据库用户连接数超限)

告警解释 当集群中单个CN实例上某个用户的连接数超过限制时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37018 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机名…

如何在Ubuntu系统上安装Git

简单介绍 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具CVS&#xff0c;Subversion 等不同&#xff0c;它采用了分布式版…

四、shell - 字符串

目录 1、单引号 2、双引号 3、拼接字符串 3.1 使用双引号拼接 3.2 使用单引号拼接 4、获取字符串长度 ​​​​​​​5、提取子字符串 ​​​​​​​6、查找子字符串 ​​​​​​​字符串是shell编程中最常用最有用的数据类型&#xff08;除了数字和字符串&#xff0…

Flutter应用程序加固的问题及解决方案

​&#x1f680;Flutter应用程序加固的问题及解决方案引言在移动应用开发中&#xff0c;为了保护应用程序的安全性&#xff0c;开发者需要对应用进行加固。在使用Flutter技术进行应用程序开发时&#xff0c;也需要注意应用程序的安全问题和加固方案。本文将介绍在Flutter应用程…

科普:什么是合同生命周期管理?

在当前&#xff0c;企业面临自身转型升级与行业数字建设的挑战&#xff0c;急需一种系统化的解决方案&#xff0c;帮助企业在自身运作方面实现降本增效&#xff0c;为拓展业务获得发展提供助力&#xff0c;而合同生命周期管理在其中就扮演着十分重要的角色。 一、合同生命周期…

[安洵杯 2019]easy_web

打开环境 img传参还有cmd img应该是base&#xff0c;先解码看看 3535352e706e67 这个好像是十六进制的&#xff0c;再解 访问一下看看&#xff0c;得到一张图片 尝试base解码&#xff0c;但是没有什么发现 再看看地址栏出现index.php,应该是要下载源码&#xff0c;但是还没有…

python音频处理wavfile VS. librosa

数据读取 ## 音频载入 import librosa from scipy.io import wavfile# wavfile wav_file demo.wav wf_sr, wf_audio wavfile.read(wav_file) # R1. wf_audio为未经归一化的原始音频采样点&#xff0c; 一般采用int16编码&#xff0c;即[-32768, 32767]# librosa # R1. 若sr不…

【紫光同创PCIE教程】——使用官方驱动在Windows下进行DMA读写操作/PIO读写操作

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 紫光同创官方主推的是在linux系统下开发驱动和上层软件&#xff0c;相应地&#xff0c;官方提供了在linux一个基于GTK2…

zustand状态管理器使用汇总

1. 初步使用介绍 // 1. 安装zustand npm install zustand// 2. 创建store使用 import { create } from "zustand"; export const useBearStore create((set) > ({bears: 0, increasePopulation: () > set((state) > ({ bears: state.bears 1 })), remove…

hadoop安装

简介 Hadoop是一个开源的分布式存储和计算框架&#xff0c;最初由Apache软件基金会开发。它的发展背景可以追溯到Google的MapReduce和Google File System&#xff08;GFS&#xff09;的论文&#xff0c;这两篇论文启发了Hadoop的设计。Hadoop的主要应用场景包括大数据存…

行业追踪,2023-11-30

自动复盘 2023-11-30 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

MySQL数据库的备份与恢复

在管理MySQL数据库时&#xff0c;备份和恢复是保证数据安全和完整性的关键环节。本文将指导您如何有效地备份MySQL数据库&#xff0c;并在需要时进行数据恢复。 请注意&#xff0c;如果没有 mysql> 的标志&#xff0c;说明我们是在外面终端进行的操作 创建备份文件路径 在…