logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。
作用:
可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
logrotate 相关文件:
计划任务:/etc/cron.daily/logrotate
程序文件:/usr/sbin/logrotate
配置文件: /etc/logrotate.conf
日志文件:/var/lib/logrotate/logrotate.status
说明:
logrotate程序是系统自带的。
logrotate的实现是基于计划任务的。程序本身被计划任务调用
#每天执行一次logrotate,会调用/etc/logrotate.conf定义的日志转储规则来对日志进行操作
[root@LogServer ~]# vim /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE
#这个文件定义了日志转储的规则
#这是一个全局性配置,没有特殊约定的都按照这个规则执行
[root@LogServer ~]# vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly #每周做一次日志的转储
# keep 4 weeks worth of backlogs
rotate 4 #表示只保存最近的四个日志文件
# create new (empty) log files after rotating old ones
create #表示老日志文件滚动以后,创建一个同名的新日志文件
# use date as a suffix of the rotated file
dateext #旧的日志文件会添加一个时间后缀
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d #存放指定服务的配置
# system-specific logs may be also be configured here.
例如:
#btmp日志转储的配置
[root@LogServer logrotate.d]# cat btmp
# no packages own btmp -- we'll rotate it here
/var/log/btmp { #/var/log/btmp表示对btm这个文件定义转储规则
missingok #如果日志不存在,不提示错误,继续处理下一个
monthly #表示一个月转储一次
create 0600 root utmp #生成新文件的权限 所有者 所属组
rotate 1 #只保存最近的一个文件
}
范例: 设置nginx的日志转储
cat /etc/logrotate.d/nginx
/var/log/nginx/*.log { #/var/log/nginx路径下只要是log结尾的文件都进行转储 -- 表示针对谁进行规则配置
daily #指定转储周期为每天
rotate 100 #表示保留最近的100哥文件
missingok #如果日志不存在,不提示错误,继续处理下一个
compress #对转储的日志文件加逆行压缩
delaycompress #和compress一起使用时,转储的日志文件到下一次转储时才压缩。延迟压缩
notifempty #not if empty:如果日志文件为空旧不进行转储
create 644 ngnix nginx #创建的新文件 文件权限-所有者-所属组
postrotate #
if [ -f /app/nginx/logs/nginx.pid ]; then #如果进程生成的这个pid文件存在
kill -USR1 `cat /app/nginx/logs/nginx.pid` # 在转储以后需要执行的命令 发送一个信号重新加载nginx进程
fi
endscript #postrotate和endscript中的内容为对日志文件转储后的操作
}
范例:对指定日志手动执行日志转储
#生成测试日志
[root@centos8 ~]#dd if=/dev/zero of=/var/log/test1.log bs=2M count=1
#创建日志转储配置文件
[root@centos8 ~]#cat /etc/logrotate.d/test1
/var/log/test1.log { #表示要对那个文件进行转储
daily #每天转储一次
rotate 5 #只保存最近的五个文件
compress #对转储的日志文件进行压缩
delaycompress #不立即压缩,而是再下一次转储的时候再压缩
missingok #如果这个文件不存在,不提示错误
size 1M #文件大小超过1M就进行转储
notifempty #如果/var/log/test1.log为空就不进行转储
create 640 bin nobody #新创建的/var/log/test1.log 文件权限为640,所有者为bin,所属组为nobody
postrotate
echo `date +%F_%T` >> /var/log/test1.log #转储完成后,对新生成的/var/log/test1.log执行操作
endscript
}
#手动执行日志转储
[root@LogServer log]# logrotate /etc/logrotate.d/test1
#查看内容
[root@LogServer log]# cat test1.log
2022-10-20_15:54:26
触发总配置文件:子配置文件里面没定义的就按照总配置文件的对应配置来进行转储。
| 配置参数 | 说明 |
|---|---|
| compress | 通过gzip压缩转储以后的日志 |
| nocompress | 不压缩 |
| copytruncate | 用于还在打开中的日志文件,把当前日志备份并截断 |
| nocopytruncate | 备份日志文件但是不截断 |
| create mode owner group | 转储文件,使用指定的权限,所有者,所属组创建新的日志文件 |
| nocreate | 不建立新的日志文件 |
| delaycompress | 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩 |
| nodelaycompress | 覆盖 delaycompress 选项,转储同时压缩 |
| errors address | 专储时的错误信息发送到指定的Email 地址 |
| ifempty | 即使是空文件也转储,此为默认选项 |
| notifempty | 如果是空文件的话,不转储 |
| mail address | 把转储的日志文件发送到指定的E-mail 地址 |
| nomail | 转储时不发送日志文件 |
| olddir directory | 转储后的日志文件放入指定目录,必须和当前日志文件在同一个文件系统 |
| noolddir | 转储后的日志文件和当前日志文件放在同一个目录下 |
| prerotate/endscript | 在转储以前需要执行的命令,这两个关键字必须单独成行 |
| postrotate/endscript | 在转储以后需要执行的命令,这两个关键字必须单独成行 |
| daily | 指定转储周期为每天 |
| weekly | 指定转储周期为每周 |
| monthly | 指定转储周期为每月 |
| rotate count | 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份 |
| tabooext [+] list | 让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig,.rpmsave, v, 和 ~ |
| size size | 当日志文件到达指定的大小时才转储,bytes(缺省)及KB或MB |
| sharedscripts | 默认,对每个转储日志运行prerotate和postrotate脚本,日志文件的绝对路径作为第一个参数传递给脚本。 这意味着单个脚本可以针对与多个文件匹配的日志文件条目多次运行(例如/ var / log / news /*.example)。如果指定此项sharedscripts,则无论有多少个日志与通配符模式匹配,脚本都只会运行一次 |
| nosharedscripts | 针对每一个转储的日志文件,都执行一次prerotate 和 postrotate脚本,此为默认值 |
| missingok | 如果日志不存在,不提示错误,继续处理下一个 |
| nomissingok | 如果日志不存在,提示错误,此为默认值 |
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
我是ruby的新手,正在配置IRB。我喜欢pretty-print(需要'pp'),但总是输入pp来漂亮地打印它似乎很麻烦。我想做的是默认情况下让它漂亮地打印出来,所以如果我有一个var,比如说,'myvar',然后键入myvar,它会自动调用pretty_inspect而不是常规检查。我从哪里开始?理想情况下,我将能够向我的.irbrc文件添加一个自动调用的方法。有什么想法吗?谢谢! 最佳答案 irb中默认pretty-print对象正是hirb被迫去做。Theseposts解释hirb如何将几乎所有内容转换为ascii表。虽
我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO
我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe
在Rails自动生成的功能测试(test/functional/products_controller_test.rb)中,我看到以下代码:classProductsControllerTest我的问题是:方法调用products()在哪里/如何定义?products(:one)到底是什么意思?看代码,大概意思是“创建一个产品”,但是它是如何工作的呢?注意我是Ruby/Rails的新手,如果这些是微不足道的问题,我深表歉意。 最佳答案 如果您查看test/fixtures文件夹,您会看到一个products.yml文件。这是在您创建