linux定时清理nohup命令下产生的日志
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux定时清理nohup命令下产生的日志相关的知识,希望对你有一定的参考价值。
参考技术A 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执行,且输出重定向到黑洞目录。
linux下日志自动清理(find删除30天前的数据)
linux是一个很能自动产生文件的系统,日志、邮件、备份等。虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情。不用你去每天惦记着是否需要清理日志,不用每天收到硬盘空间不足的报警短信,想好好休息的话,让我们把这个事情交给机器定时去执行吧。
1.删除文件命令:
find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;
实例命令:
find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
说明:
将/opt/soft/log/目录下所有30天前带".log"的文件删除。具体参数说明如下:
find:linux的查找命令,用户查找指定条件的文件;
/opt/soft/log/:想要进行清理的任意目录;
-mtime:标准语句写法;
+30:查找30天前的文件,这里用数字代表天数;
"*.log":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三;
-exec:固定写法;
rm -rf:强制删除文件,包括目录;
{} \; :固定写法,一对大括号+空格+\+;
2.计划任务:
若嫌每次手动执行语句太麻烦,可以将这小语句写到一个可执行shell脚本文件中,再设置cron调度执行,那就可以让系统自动去清理相关文件。
2.1创建shell:
touch /opt/soft/bin/auto-del-30-days-ago-log.sh
chmod +x auto-del-30-days-ago-log.sh
新建一个可执行文件auto-del-30-days-ago-log.sh,并分配可运行权限
2.2编辑shell脚本:
vi auto-del-30-days-ago-log.sh
编辑auto-del-30-days-ago-log.sh文件如下:
#!/bin/sh
find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
ok,保存退出(:wq)。
2.3计划任务:
#crontab -e
将auto-del-30-days-ago-log.sh执行脚本加入到系统计划任务,到点自动执行
输入:
10 0 * * * /opt/soft/log/auto-del-7-days-ago-log.sh >/dev/null 2>&1
这里的设置是每天凌晨0点10分执行auto-del-7-days-ago-log.sh文件进行数据清理任务了。
完成以上三步,你就再也不每天惦记是否硬盘空间满了,该清理日志文件了,再也不会受到服务器硬盘空间不足的报警信息了,放心的去看书喝咖啡去吧!
以上是关于linux定时清理nohup命令下产生的日志的主要内容,如果未能解决你的问题,请参考以下文章