利用crontab定时清理日志数据

利用crontab定时清理日志数据不用每天惦记着是否需要清理日志,不用每天收到硬盘空间不足的报警短信,把这个事情交给机器定时去执行即可。

最简单的方法,直接一句crontab命令就可以(实测可以清空内容)

30 2 * * * echo -n "" > /root/trading_platform/coin_platform/coin_15m.log 2>&1

复杂点可以创建一个shel文件然后crontab调用这个sh文件执行

 创建shell文件的执行步骤:

mkdir /root/sh
touch /root/sh/auto-del-log.sh
chmod +x /root/sh/auto-del-log.sh

cd /root/sh/
vi auto-del-log.sh

清空日志要先杀掉进程,再清日志,再重启进程。内容如下:

#!/bin/sh
ps -ef|grep -v grep|grep Server_Coin_15M.py |awk '{print "kill -9 "$2}'|sh
sleep 1

echo -n "" > /root/trading_platform/coin_platform/coin_15m.log 2>&1

python /root/trading_platform/coin_platform/Server_Coin_15M.py &

保存退出(:wq)。

 

#crontab -e
30 2 * * * /root/sh/auto-del-log.sh >/dev/null 2>&1

设置是每天凌晨2点30分执行文件清理任务。

============
1.删除文件命令:
find 对应目录 -mtime +天数 -name “文件名” -exec rm -rf {} \;

实例命令:
find /opt/soft/log/ -mtime +10 -name “*.log” -exec rm -rf {} \;

说明:
将/opt/soft/log/目录下所有10天前带”.log”的文件删除。具体参数说明如下:

find:linux的查找命令,用户查找指定条件的文件;

/opt/soft/log/:想要进行清理的任意目录;

-mtime:标准语句写法;
+10:查找10天前的文件,这里用数字代表天数;
“*.log”:希望查找的数据类型,”*.jpg”表示查找扩展名为jpg的所有文件,”*”表示查找所有文件,这个可以灵活运用,举一反三;

-exec:固定写法;

rm -rf:强制删除文件,包括目录;

{} \; :固定写法,一对大括号+空格+\+;


2.计划任务:
若嫌每次手动执行语句太麻烦,可以将这小语句写到一个可执行shell脚本文件中,再设置cron调度执行,那就可以让系统自动去清理相关文件。

2.1创建shell:
touch /opt/soft/bin/auto-del-10-days-ago-log.sh
chmod +x auto-del-10-days-ago-log.sh

新建一个可执行文件auto-del-10-days-ago-log.sh,并分配可运行权限

2.2编辑shell脚本:
vi auto-del-10-days-ago-log.sh

编辑auto-del-10-days-ago-log.sh文件内容如下:
#!/bin/sh

find /opt/soft/log/ -mtime +10 -name “*.log” -exec rm -rf {} \;

保存退出(:wq)。

2.3计划任务:

#crontab -e

将auto-del-10-days-ago-log.sh执行脚本加入到系统计划任务,到点自动执行

输入:
30 3 * * * /opt/soft/log/auto-del-7-days-ago-log.sh >/dev/null 2>&1

这里的设置是每天凌晨3点30分执行auto-del-7-days-ago-log.sh文件进行数据清理任务了。

==============
linux 清空文件内容的方式
一、通过重定向来清空文件内容
-> 通过shell重定向null到指定文件即可
> access.log
-> 重定向 : 或 true 到指定文件
:> access.log
true > access.log

二、使用cat/cp/dd使用工具和/dev/null设备来清空文件内容
ps: /dev/null 是特殊文件,它将清空重定向到它的输出,而它输入是空白文件,什么内容也没有

关于/dev/null设备的详细内容可以参见:Shell—输入/输出重定向 https://blog.csdn.net/ltaihyy/article/details/53750438

Centos: 7 系统清空删除系统日志的方法: CentOS7 系统清空删除系统日志的方法 https://cloud.tencent.com/developer/article/1969592?from=15425

-> 可以使用cat命令查看/dev/null文件的内容,然后重定向输出到指定文件清空
cat /dev/null > access.log
-> 也可以使用 /dev/null文件的内容复制到指定文件进行请空
cp /dev/null access.log

三、使用echo命令清空文件内容
-> echo 将空串重定向到指定文件(两种)
echo "" > access.log
echo > access.log
-> 要想彻底清空文件内容,可以使用echo命令的-n选项
该选项将告诉echo,不再输出一个空白行
echo -n "" > access.log

四、使用truncate命令来清空文件内容
-> truncate 将一个文件缩小或扩展到给定的大小
-s 指定文件的大小
truncate -s 0 access.log

posted @ 2024-02-28 16:44  大自然的流风  阅读(57)  评论(0编辑  收藏  举报