服务器日志文件一般是每天一个或多个文件,如果日志文件不清理,时间久了就会将磁盘空间占满,从而影响系统的正常运行。
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添加定时任务操作步骤
- 编辑了.sh脚本,并保存,记录.sh文件所在路径【一定确保.sh脚本可用,可以尝试在编辑完成.sh文件后,直接./clearlog.sh 执行脚本文件,查看是否可以正常执行】。
- 查看并设置cron为自启动。
- 查看并启动cron服务,使状态为running。
- 编辑并查看cron服务,注意路径和定时格式,确保cron服务编辑成功。
- 最后在编辑完成cron服务后,重新加载或重启cron服务,确保cron服务状态是running的。
- 最后可以通过查看cron执行日志,确保cron是否执行。
- 如果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