服务器日志文件一般是每天一个或多个文件,如果日志文件不清理,时间久了就会将磁盘空间占满,从而影响系统的正常运行。

1、分析磁盘空间占用情况

1.1、df 命令

        df 命令磁盘分区为单位查看文件系统中磁盘空间的使用情况。

语法:df [选项] [文件|目录]

选项:

  • -h 或 --human-readable   :将信息以人类可读的形式打印。
  • -i 或 --inode                        :查看分区inode使用情况。

示例:

 

1.2、du命令

        查看指定目录的磁盘空间使用情况。

        du 命令会递归地计算指定目录下所有文件和子目录的磁盘使用量,并将结果显示出来。

语法:du [选项] [文件|目录]

选项:

  • -a或--all   : 列出所有的文件和目录容量大小而不仅仅列出目录容量大小。
  • -s或--summarize    : 仅显示总计,只列出最后加总的值。
  • -h或--human-readable  : 以K,M,G为单位,提高信息的可读性。
  • -c或--total      :  除了列出文件和目录的容量大小外,最后在列出总容量。
  • --max-depth=N : 递归显示(仅仅是显示)时的递归深度小于等于N。--max-depth=0相当于-s参数。
  • -d 数字    :递归深度设置,效果与--max-depth=N相同。

示例:显示指定目录下每个子目录的磁盘使用量,以人类可读的格式呈现。

2、shell脚本文件

vim clearlog.sh   添加脚本文件

方式一:保留当天删除的日志文件记录

#!/bin/bash
 
# 日志文件目录
log_dir="/logs"
 
# 日志文件保留天数
max_days=7
         
# 查找所有超过期限的日志文件列表,并保存到clear_log_file.txt
find "${log_dir}" -name "*.log" -type f -mtime +"${max_days}" > ${log_dir}/clear_log_file.txt
# 遍历需要清除的日志文件列表
cat ${log_dir}/clear_log_file.txt|while read fileName
do
	# 删除日志文件
	rm -f $fileName
	echo "Deleted file: ${fileName}"
done

# 删除日志目录中的所有空目录
find "${log_dir}" -type d -empty -delete

echo "$(date): 删除了所有超过 $max_days天的旧日志文件" > $log_dir/clearmsg.log

方式二:直接删除超期日志文件

#!/bin/sh

# 日志文件目录
log_dir="/logs"
 
# 日志文件保留天数
max_days=7
         
echo "清理超期日志文件"
find "${log_dir}" -name "*.log" -type f -mtime +"${max_days}"  -exec rm -rf {} \;

脚本文件授权(可执行权限)

chmod +x clearlog.sh

3、crontab添加定时任务

        crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。

Linux下的任务调度分为两类,系统任务调度和用户任务调度。

  • cron 系统任务调度。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。
  • crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许。

3.1、crontab 时间格式:

minute hour day month week command

minute: 表示分钟,可以是从0到59之间的任何整数。

hour:表示小时,可以是从0到23之间的任何整数。

day:表示日期,可以是从1到31之间的任何整数。

month:表示月份,可以是从1到12之间的任何整数。

week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

还可以使用以下特殊字符:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

3.2、crontab服务

3.2.1、检查、安装crontab

        

        检查是否安装了crontab,如果提示未安装请自行安装,crontab安装包在系统光盘里面的pacekage文件夹,也可以进入此网站找  http://rpmfind.net/  相对应的crontab安装包。或yum命令安装。

# vixie-cron软件包是cron的主程序;
yum install vixie-cron

# crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
yum install crontabs

  crond可以用以下的方法启动、关闭服务:

/sbin/service crond start #启动服务
/sbin/service crond stop #关闭服务
/sbin/service crond restart #重启服务
/sbin/service crond reload #重新载入配置

 crond开机自启动查询、设置: 

# 查询开机自启动服务,enabled 是开机启动,disabled 是开机不启动.
systemctl list-unit-files | grep crond

# 设置开机自启动
systemctl enable crond

# 设置开机不启动
systemctl disable crond

3.2.2、crontab命令

        作用:添加,查询,删除系统计划任务的指令。

语法:crontab [选项]

选项:

    -u <用户名称>   :设定指定<用户名称>的定时任务,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的定时任务。

    -e   :编辑某个用户的crontab定时任务文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
    -l    :查询crontab任务。显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
    -r   :从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

   -ir   :在删除用户的crontab文件时给确认提示。

 3.2.3、crontab 全局配置文件

         crontab在/etc目录下面存在cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d五个目录和crontab,cron.deny二个文件。

# 目录

  • cron.daily是每天执行一次的job。
  • cron.weekly是每个星期执行一次的job。
  • cron.monthly是每月执行一次的job。
  • cron.hourly是每个小时执行一次的job。
  • cron.d是系统自动定期需要做的任务。

# 文件

  • crontab是设定定时任务执行文件。
  • cron.deny文件就是用于控制不让哪些用户使用Crontab的功能。

 3.2.4、crontab 用户配置文件

        每个用户都有自己的cron配置文件,通过crontab -e 就可以编辑,一般情况下我们编辑好用户的cron配置文件保存退出后,系统会自动就存放于 /var/spool/cron目录中,文件以用户名命名。linux的cron服务是每隔一分钟去读取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面所有的内容。

3.2.5、cron定时任务的执行日志

 cron定时任务执行日志文件在: /var/log/cron

3.3、cron添加定时任务操作步骤

  1. 编辑了.sh脚本,并保存,记录.sh文件所在路径【一定确保.sh脚本可用,可以尝试在编辑完成.sh文件后,直接./clearlog.sh  执行脚本文件,查看是否可以正常执行】。
  2. 查看并设置cron为自启动。
  3. 查看并启动cron服务,使状态为running。
  4. 编辑并查看cron服务,注意路径和定时格式,确保cron服务编辑成功。
  5. 最后在编辑完成cron服务后,重新加载或重启cron服务,确保cron服务状态是running的。
  6. 最后可以通过查看cron执行日志,确保cron是否执行。
  7. 如果cron任务不执行,确保linux服务器系统 时间 和时区 是否正常。

3.4、查看、修改时区

# 查看当前系统的时区
timedatectl

# 列出可用时区
# timedatectl list-timezones 但是会列出一大堆

# 在后面加个grep查询,直接列出相关的信息
timedatectl list-timezones|grep Shanghai   

# 设置时区
timedatectl set-timezone Asia/Shanghai

# 查询设置结果
date

 3.5、添加定时任务示例:

# 每天凌晨4点执行清理日志命令
* 4 * * *  sh /home/admin/clearlog.sh

# 若执行多个命令,用;分隔开 
*/1 * * * * source /etc/profile; sh /home/pentaho/pentaho-server/auto_monitor_server.sh


 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐