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 定时删除文件夹或文件
给个思路:
编写自动删除文件的脚本枝拿,关键部分是使用find命令查找到符合条件的文件野携并将其删颂搭伏除;
加入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分执行此脚本。