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

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命令的缺点

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

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

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

一个小tip:

linux的shell命令写在sh文件里,运行的时候不用在命令行敲啦,运行sh程序:

sh XXX.sh 就可以辽。

1. 切分文件

split命令:

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

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

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

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

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

例如:

           split -b 10k date.file -d -a 3

           ls

          结果:date.file x000 x001 x002 x003 x004 x005 x006 x007 x008 x009


          split -b 10k date.file -d -a 3 split_file

          ls

          结果:date.file split_file000 split_file001 split_file002 split_file003 split_file004 split_file005 split_file006 split_file007 split_file008 split_file009

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

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

2. find后rm删除或cat dev/null

首先介绍find命令的参数

参考:linux find命令详解

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

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

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

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

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

例如:find . -name "*.log" -mtime -1 #找出1天内被修改过的,后缀为log的文件。

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

find /XXX/XXX -mtime -7 -print |xargs rm -rf

find /XXX/XXX  -mtime -7 -exec rm {} \;

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

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

cat dev/null

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

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

用cat删除文件:

cat dev/null > /XXX/XXX.log

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

3. crontab

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:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

0 1 * * */1 /XXX/log.sh &>/dev/null 

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

4、清除日志内容

很多时候,nohup中的日志内容是用于查看执行情况的,无用日志,我之前由于,未能及时处理,导致文件越来越大,磁盘空间沾满,导致无法正常存储其他的内容,后痛定思痛,在系统定时任务中增加清除nohup日志的脚本命令

 crontab -e 
#将日志清空
* * * * * cd /data/web/Crontab/sniffer && echo "qingkong" > nohup.out
<think>嗯,用户让我介绍一下Linux组合命令。好的,首先我得确认用户对Linux的基础了解程度,可能他们已经知道一些基本命令,现在想学习如何组合使用它们。组合命令通常指的是通过管道、重定向或者逻辑运算符将多个命令连接起来,完成更复杂的任务。我需要分步骤解释,先讲基本概念,再举例子,这样用户更容易理解。 首先,我应该列举常用的组合方式,比如管道符、逻辑运算符、重定向这些。然后每个部分详细说明,比如管道符|的作用是将前一个命令的输出作为后一个命令的输入,比如ps aux | grep firefox。用户可能需要具体的例子来理解实际应用场景,比如查找进程或者处理文本文件。 接下来是逻辑运算符,比如&&和||。这里需要注意它们的区别,&&表示前一个命令成功才执行下一个,||则是失败才执行。比如mkdir test && cd test,如果创建目录成功,就进入目录。这在实际操作中很常见,比如编译安装软件时的步骤。 然后是重定向,>和>>的区别,一个是覆盖,一个是追加。还有2>&1这种错误重定向,用户可能需要处理命令的输出和错误信息,特别是在脚本中。例如,nohup command > output.log 2>&1 & 这样的后台运行命令,把标准输出和错误都重定向到日志文件。 接下来是命令替换,使用$()或者反引号,这样可以把命令的输出作为另一个命令的参数。比如echo "当前时间是 $(date)",或者旧式的`date`,但要注意推荐使用$(),因为它更清晰,嵌套更方便。 还有后台运行符号&,比如执行长时间任务时放到后台,这样终端可以继续使用。然后结合jobs、fg、bg这些命令管理后台任务。 然后,可能需要提到组合命令的高级用法,比如结合xargs处理参数,或者使用tee命令同时输出到屏幕和文件。比如find . -name "*.txt" | xargs grep "keyword",这里用xargs处理find找到的文件,作为grep的参数。 用户可能想知道如何高效地处理日志,比如统计某个服务的访问次数,可以用cat access.log | grep "GET /page" | cut -d ' ' -f 1 | sort | uniq -c | sort -nr。这样的组合命令分解每个步骤的作用,用户能理解每个命令的用途。 还要注意常见的错误,比如管道中命令的顺序,或者重定向的覆盖问题。比如使用>时会覆盖原有文件,用户如果不想丢失数据,应该用>>追加,或者确保文件名正确。 可能还需要提到组合命令在脚本中的应用,比如自动化任务,定期清理日志文件,或者监控系统状态。例如,结合crontab定时执行某个组合命令。 最后,总结一下组合命令的优势,比如提高效率,简化复杂任务,以及如何通过man手册或--help选项深入学习每个命令的细节。确保用户知道如何查找更多信息,以及练习的重要性。</think>### Linux组合命令详解 Linux组合命令通过**管道、重定向、逻辑运算符**等工具,将多个简单命令串联,实现复杂功能。以下是核心用法及示例: --- #### 一、基础组合方式 1. **管道符 `|`** **作用**:将前一个命令的输出作为后一个命令的输入。 **示例**: ```bash ps aux | grep firefox # 查找Firefox进程 cat log.txt | sort | uniq # 对文件内容排序并去重 ``` 2. **逻辑运算符** - `&&`:前一条命令成功(返回0)时执行后续命令 ```bash mkdir new_dir && cd new_dir # 创建目录后立即进入 ``` - `||`:前一条命令失败(返回非0)时执行后续命令 ```bash ping example.com || echo "连接失败" # 网络不通时输出提示 ``` 3. **重定向** - `>`:覆盖输出到文件 ```bash ls > file_list.txt # 将当前目录文件列表保存到文件 ``` - `>>`:追加输出到文件 ```bash date >> log.txt # 追加当前时间到日志文件 ``` - `2>&1`:将错误输出合并到标准输出 ```bash nohup command > output.log 2>&1 & # 后台运行命令并记录日志 ``` --- #### 二、进阶用法 1. **命令替换 `$(...)`** 将命令的输出结果作为参数传递。 **示例**: ```bash echo "系统时间:$(date)" # 输出当前时间 tar -czf backup_$(date +%F).tar.gz /data # 按日期打包文件 ``` 2. **后台运行 `&`** 让命令在后台执行,释放当前终端。 ```bash python3 script.py & # 后台运行Python脚本 jobs # 查看后台任务列表 ``` 3. **组合命令与`xargs`** 处理管道传递的多参数。 ```bash find /var/log -name "*.log" | xargs rm # 删除所有日志文件 ``` --- #### 三、实战案例 1. **统计访问量最高的IP** ```bash cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10 ``` - **分解步骤**: 1. `awk` 提取IP 2. `sort` 排序 3. `uniq -c` 计数 4. `sort -nr` 按数值倒序 5. `head` 显示前10条 2. **批量重命名文件** ```bash ls *.jpg | awk '{print "mv "$1" "$1".bak"}' | bash ``` - **原理**:生成重命名命令并交给`bash`执行。 --- #### 四、注意事项 1. **命令顺序**:管道中命令的输入输出需兼容(如`grep`处理文本,不接受二进制输入)。 2. **错误处理**:使用 `||` 定义容错逻辑,避免因单点失败导致脚本中断。 3. **资源占用**:长时间运行的组合命令建议搭配 `nohup` 或 `tmux` 防止断开。 通过灵活组合基础命令,可显著提升Linux操作效率。建议通过 `man [命令]` 或 `[命令] --help` 深入学习每个工具的细节。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值