重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
nohup.out日志文件太大了,且一直增长,命令查看日志受阻
创新互联建站专注于江夏企业网站建设,响应式网站开发,成都商城网站开发。江夏网站建设公司,为江夏等地区提供建站服务。全流程按需定制开发,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务
①切割大文件变成多个小文件
②每天定时保存前一天的日志,重新记录当天日志
1.利用split命令切割
①按文件大小切割大文件:
切割文件:将ohup.out文件每500M切割一个文件放到/home/nginx/logs/newlog/目录下
②按文件行数切割大文件:
查询文件行数:
wc -l b.log
2038711 b.log
按50W行切割一个文件:
split -l 500000 -d -a 4 /home/nginx/logs/b.log /home/nginx/logs/newlog/
2.定时备份前一天日志,重新记录当天日志splitlog.sh
3.定时执行
查看定时任务:
crontab -l
编辑定时任务:
crontab -e
重启定时任务:
删除10天以前的日志文件,此日期为文件本身的时间,非日志内容时间
其实要说回答很简单,但是要给你做出来稍微费工夫,因为没有环境可以测试,你可以写一段shell代码来提取,也可以用sed/awk/grep等命令来做,但是命令的复杂度不亚于写一段shell代码。shell代码我给你算法吧。(括号里是参考代码,bash)
初始化变量(flg=0)
循环读取每一行文件(while line in `cat $log`)
变量开始[sip/2.0]为真时( if [ $flg -eq 1 ]; then )
输出当前行到结果文件中( echo $line $retFile )
如果是用户结束 ( chkEnd $line #chkEnd 是个shell函数检查是不是结束
if [ $? -eq 1 ]; then)
变量变量开始[sip/2.0]设置为假 (flg=0)
#如果是用户结束(fi)
否则(else)
如果当前行含有[sip/2.0]( echo $line | grep "[sip/2.0"
if [ $? -eq 0 ]; then)
输出当前行到结果文件中(echo $line $retFile)
变量变量开始[sip/2.0]设置为真(flg=1)
#如果当前行含有[sip/2.0](fi)
#变量开始[sip/2.0]为真时(fi)
last
-a 把从何处登入系统的主机名称或ip地址,显示在最后一行。
-d 指定记录文件。指定记录文件。将IP地址转换成主机名称。
-f 记录文件 指定记录文件。
-n 显示列数或-显示列数 设置列出名单的显示列数。
-R 不显示登入系统的主机名称或IP地址。
-x 显示系统关机,重新开机,以及执行等级的改变等信息
以下看所有的重启、关机记录
last | grep reboot
last | grep shutdown
history
列出所有的历史记录:
[zzs@Linux] # history
只列出最近10条记录:
[zzs@linux] # history 10 (注,history和10中间有空格)
使用命令记录号码执行命令,执行历史清单中的第99条命令
[zzs@linux] #!99 (!和99中间没有空格)
重复执行上一个命令
[zzs@linux] #!!
执行最后一次以rpm开头的'命令(!? ?代表的是字符串,这个String可以随便输,Shell会从最后一条历史命令向前搜索,最先匹配的一条命令将会得到执行。)
[zzs@linux] #!rpm
逐屏列出所有的历史记录:
[zzs@linux]# history | more
立即清空history当前所有历史命令的记录
[zzs@linux] #history -c
cat, tail 和 watch
系统所有的日志都在 /var/log 下面自己看(具体用途可以自己查,附录列出一些常用的日志)
cat /var/log/syslog 等
cat /var/log/*.log
tail -f
如果日志在更新,如何实时查看 tail -f /var/log/messages
还可以使用 watch -d -n 1 cat /var/log/messages
-d表示高亮不同的地方,-n表示多少秒刷新一次。
该指令,不会直接返回命令行,而是实时打印日志文件中新增加的内容,
这一特性,对于查看日志是非常有效的。如果想终止输出,按 Ctrl+C 即可。
除此之外还有more, less ,dmesg|more,这里就不作一一列举了,因为命令太多了,关键看个人喜好和业务需求.个人常用的就是以上那些
linux日志文件说明
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
/var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件
在生产环境中,往往没有条件给我们去debug排查,更多时候我们是通过日志来看具体的报错日期。
但是日志往往是一直在实时更新,而且记录条数庞大,很难直接定位到错误信息。这个时候,就可以利用sed命令来截取指定时间段内的日志(也是网上大多数博主的做法)。
具体命令如下:
这条命令可以查询2020.10.13号当天9点到9点十分中间的所有的日志信息。
但是这条命令的使用有两个前提(很多网上的博主都没有提到)
第一,日志输出的日期格式是要满足命令中的格式 ,如果不是的话就跟着实际的格式改
第二,输入的日期必须要真实存在!!! ,比如说9点整刚好没有日志输出,那么这条命令就会失效
更加通配的命令可以是这样, 使用 号*
这样无论九点整的时候是否有日志产生,就都可以获取到9点整到现在的所有日志了
使用 ,将截取到的内容输出到指定的文件中,方便进一步查看
ps:在实际操作中,我们一般会在后面加grep命令做进一步的关键字过滤