当前位置:首页 » 网页前端 » 定时清理脚本linux
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

定时清理脚本linux

发布时间: 2023-04-28 01:58:03

1. linux定时删除N天前的文件(文件夹)

磁盘只有22T容量,为了避免爆盘,业务需要定时清除数据,根据网上的资料总结了一下设置方法:
可以使用find命令

另外的方法大仿凳同小异悔慧:

可以吧这个命令写到脚本里,
cleandata.sh
find /tmp -mtime +30 -type f -name "*" -exec rm -rf {} ;

配置可执行
chmod u+x ./cleandata.sh

配置到crontab
crontab -e
0 0 * * * /home/username/cleandata.sh > /dev/null 2>&1
每天零点自动执行
其中:
第一个 号表示时间中的 分钟 取值范围:0-59
第二个
号表示时间中的 小时 取值范围:0-23
第三个 号表示一个月中的第几天,取值范围:1-31
第四个
号表示一年中的第备前旅几个月,取值范围:1-12
第五个*号表示一个星期中的第几天,以星期天开始依次的取值为0~7,0、7都表示星期天

2. Linux 定时删除文件夹或文件

给个思路:

  1. 编写自动删除文件的脚本枝拿,关键部分是使用find命令查找到符合条件的文件野携并将其删颂搭伏除;

  2. 加入crontab,每天23:00运行脚本

PS: 如果删除的文件没有备份或者对应路径下有其他重要文件,则不建议这样做,毕竟谁都不敢保证自动运行的东西不会抽风……自己考虑下要不要用吧

3. Linux shell:定时删除指定时间之前的文件

要求删除一个月之前的备份文件,免得把硬盘给整爆了

location 是设置查找的目录
--mtime +30 是设置时间为30天前
-type f 这周查找的类型为文件

然后加入crontab定时袜氏来删除:

设定为每个月1号晚上4点10分执行脚本.当然你也可以根据你自己团衡的需求去整.

相同的删除塌好做方法:

4. Linux 系统 shell脚本定时 清空系统日志文件

其实没有必要写shell脚本,简单一句话放在系统定时任务里就行了。
比如你的日志文件名叫a.log。路径为/tmp/a.log;
那么你可以写个定时任务,这样做:crontab -e 进入定时任务器,然后把下面这段写到里面
00 02 * * * echo " " >/tmp/a.log
然后保存退出就可以了。这段内容意思是,每天凌晨2点自动清空a.log内容。你也可以自己定义多久清一次。比如想10分钟清一次,就这么写*/10 * * * * echo " " >/tmp/a.log。具体的crontab时间定义你可以去网络查查。希望对您有用!

5. linux定时清理nohup命令下产生的日志

         nohup命令 将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。一般用于将程序的输出、报错信息重定向到一个指定路径的指定文件。

语法 :nohup [command] [args] [&]    

nohup命令 最后要带个&作为结束

例:nohup python XXX.py > abc/def/XXX.log 2>&1 &

args: 0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;

2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到文件,即XXX.log中。

nohup命令的缺点:日志文件文件越来越大,占内存且查看麻烦。因为这个日志文件和程序是共生死的,因为只要程序运岩辩行起来,就一直对log文件进行读写,直接删除XXX.log会导致程序也被结束了。

目前想到的一些相关方法如下,并未完全解决问题。

参考: linux下nohup日志输出过大问题解决方案

split命令:

参数:-b:值为每一输出档案的大小,单位为 byte。

           -C:每一输出档中,单行的最大 byte 数。

           -d:使用数字作为后缀。默认这个数字后缀是两位的,例如00,01,11. -a: 指定位数,例如 -a 4表示后缀是四位的。

           -l:值为每一输出档的列数大小。

           PREFIX:代表前导符,可作为切割文件的前导文件。

例如:

可以用split命令把很大的日志文件分成多个小文件,分割完成后 原文件不变 。不会影响nohup运行的程序。

缺点:split文件分割依赖手动,当程序出故障或调试时,将日志分割以便查看最新的日志信息。没法定时做到定时自动清理。

首先介绍find命令的参数

参考: linux find命令详解

在这里主要用到的是这几个参数:

-atime n 查找系统中最悄让后n*24小时访问的文件

-ctime n  查找系统中最后n*24小时被改变文件状态的文件

-mtime n  查找系统中最后n*24小时被改变文件数据的文件

+n: n天前; -n: n天之内

find命令还可以和下一条命令连用(xargs或exec)



注:{}表示find到的东西;{}和 \;之间要有一个空格

我感觉exec不是很好用,怪怪的

cat dev/null

在 Linux 中, null 设备基本上被用来丢弃某个进程不再需要的输出流,或者作为某个输入流的空白文件,这些通常可以利用重定向机制来达到。

所以 /dev/null 设备文件是一个特殊的文件,它将清空送到它这里来的所有输入,而它的输出则可被视为一个空文件。另外,你可以通过使用 cat 命令显示 /dev/null 的内容然后重定向输出到某启枣局个文件,以此来达到清空该文件的目的。通过使用cat /dev/null,文件大小为0字节。

用cat删除文件:

但是我发现对于nohup的程序的日志,这样是无效的。因为nohup的程序持续不断地在读写日志文件,此时无法重定向,我试了几次,日志文件都压根没动。

crontab用于设置定时任务

参考:  linux crontab定时执行shell脚本

crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

语法

crontab(选项)(参数)

选项

-e:编辑该用户的计时器设置;

-l:列出该用户的计时器设置;

-r:删除该用户的计时器设置;

-u<用户名称>:指定要设定计时器的用户名称。

参数

crontab文件:指定包含待执行任务的crontab文件。

首先crontab -e,就会进入vi编辑界面。然后直接把新的命令输进去就行了。

minute hour day month week command /XXX/XXX.log 顺序:分 时 日 月 周

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

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

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

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

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

/n表示每个n的单位执行一次

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

意为每周的1:00执行,且输出重定向到黑洞目录。

6. linux日志清理脚本清理不掉

linux是一个很能自动产生文件的系统,日志、邮件、备份等。虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情。不用你去每天惦记着是否需要清理日志,不用每天收到硬盘空间不足的报警短信,想好好休息的话,让我们把这个事情交给机器定时去执行吧。

二、 分析日志
查看日志路径和日志命名规则:

要清理这个目录下面如此命名态返咐规则的日志。

三、方法
这时我想的肯定是希望能写一个脚本把这些日志清除掉,但不是删除掉。那么现在需要实现3步:

         1.找到所有项目的log的位置

         2.清除或者删除log内容

         3.定时执行脚本

删除和清空日志命令:

find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;

实例命令:

find /opt/soft/log/ -mtime +7 -name "*.log" -exec rm -rf {} \;

说明:

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

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

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

-mtime:标准语句写法;

+7:查找7天前的文件,这里用数字代表天数;

"*.log":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所世培有文件,"*"表示查找所有文件,这个可以灵活运帆纯用,举一反三;

-exec:固定写法;

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

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

清空方法:

find /opt/soft/log/ -mtime +7 -name "*.log" -type f -print -exec truncate -s 0 {} \;    ->将符合这样一个条件的文件查到出来并赋予它0M的大小。

-type f -print: 将符合的文件打印出来

truncate -s 0 aa.txt:意思是将aa.txt的大小变成0M,即把aa.txt的内容清空了

7. linux 下如何编写定时删除某目录下文件的脚本

自己编写crontab设定计划任务就是了,
那个服务就是做这些定时的,自动化的工作用的。要写什么脚本的,一个命令搞定。
给你个手册页自己看吧。
补充回答:
运行这个命令:
crontab
-e
此命令将打开一个文本编辑器以添加新任务。
*
20
*
*
*
rm
-rf
/root/febhost/dat/*
/root/febhost/log/*
用对应的文本编辑器命令保存退出(vi编辑器是按esc后打:wq)
如果你对这种方式不熟悉,也可以直接改/etc/crontab,我看到你是要删除root文件夹内的目录,假设你有root权限(因为/etc/crontab所有者是root,并且只有以root身灶茄碰份执行删除命令才能删除root
home内的文件),用以下命令打开此文件:
vi
/etc/crontab
将光标移动至最后一行,按o键新开一行输入以下内容:
*
20
*
*
*
root
rm
-rf
/root/febhost/dat/*
/root/febhost/log/*
给你解释下此行的含义吧,前五个以4个空格分隔开的值依次表示:分、时、日、月、周隐谈,如果取所有值就是打*号,如果你想周期性的运行一个任务,crontab也接受范围指定,比如说一天中的早8点到晚6点每隔一小时(就是每两小时,将会在8,10,12,14,16,18执行)执行你这个删除命令这样写:
*
8-18/2
*
*
*
root
rm
-rf
/root/febhost/dat/*
/root/febhost/log/*
第一个字段是分钟,取值范围:0-59
第二个字段是小时。取值范围:0-23
第三个字段是一个月中的第几天,取值范围:1-31
第四个字段是一年中的第几个月,取值范围:1-12
最后一个字段是一个星期中的第几天,以星期天开始依次的取值为0~7,0、7都表示星期天。
下一个字段是纳拍执行该命令的用户身份,这里是root用户,最后一个字段就是定时运行的命令。

8. 用shell脚本自动定时清除/释放内存

Linux系统buff/cache 中缓存数据占用内存过高,定时清理buff/cache ,释放系统内存

root权限创山并建脚本文件:

cat clean_cache.sh

设置定时任猛唯物务,每隔2小时运行一次:

crontab -e

0 */2 * * * sh /usr/枝液local/bin/clean_cache.sh

9. 如何定时清理Linux系统中的Nginx日志

nginx日志文件需要手动分割,创建脚本文件clear_log.sh
文件路径/usr/local/nginx/clear_log.sh
vi clear_log.sh。输入如下内容
#!/bin/bash
cp /usr/local/nginx/logs/error.log /usr/local/nginx/error-$(date -d “yesterday” +“%Y%m%d”).log
#先复制原来的错误日志文件,请根据自己实际的日志路径填写
cat /dev/null 》 /usr/local/nginx/logs/error.log
#清空错误日志文件
cp/usr/local/nginx/logs/access.log /var/log/nginx/access/access-$(date -d “yesterday” +“拆迟%Y%m%d”).log
#先复制原来的正常访问日志
cat /dev/null 》 /usr/local/nginx/logs/access.log
#清空原来的正常访问日志
创建dellog.sh文件,路径/usr/local/nginx
咐歼vi dellog.sh
#!/bin/sh
find /usr/nginx/logs/error -mtime +7 -type f -name /*.log | xargs rm -f
find /usr/nginx/logs/access -mtime +7 -type f -name /*.log | xargs rm -f
#定期删除七天前的日志文件
启动linux下的计划任务,将刚才创建好的两个shell脚本加入此计划
crontab -e,输入如下内容
0 0 * * * /usr/nginx/clear_log.sh
#每天0点执行/usr/nginx/clear_log.sh
0 0 * * * /usr/nginx/dellog.sh
#每天0点执行 /usr/nginx/dellog.sh
保存后退出,输入命令crontab root就会看到/var/spool/cron/文件旅简李夹下看到相应的副本文件root。至此完成nginx日志按天拆分与定期清除。
逻辑详解:比如现在是3月18日0点0分,系统会自动执行clear_log.sh与dellog.sh两个shell脚本。clear_log.sh会把3月17日的日志文件分别生成为access_20140317.log与error_20140318.log,然后把原来的access.log与error.log分别清空。dellog.sh则会自动判断该文件的创建时间,如果是十五天前的就会自动清除
上面就是Linux清理Nginx日志的方法介绍了,因为Nginx日志没有自动清理的功能,一般采用切割日志的方法进行处理。

10. linux定时任务删除除当天外的文件夹

清理linux文件步骤如下:
1、首先新建脚本new_namesh清理穗睁文件命令如下:find/var/mqm/errors/-name.py-execrm-rf{};
2、其次给脚本加上权限:chmod+xnew_name.sh;
3、最后打开定时肆粗任务:crontab-e,加入100/path/new_namesh这是猜雹岁每天0点10分执行此脚本。