Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux logrotate:仅将新的压缩文件移动到S3_Linux_Shell_Amazon S3_Aws Cli_Logrotate - Fatal编程技术网

Linux logrotate:仅将新的压缩文件移动到S3

Linux logrotate:仅将新的压缩文件移动到S3,linux,shell,amazon-s3,aws-cli,logrotate,Linux,Shell,Amazon S3,Aws Cli,Logrotate,我有一个生成输出和错误日志的应用程序。我需要压缩它们并在服务器上保留5个日志。 此外,日志应该在压缩后立即复制到S3 bucket lastaction在我看来是编写脚本的正确地方,因为我希望压缩文件 我的配置文件如下所示: /var/log/nodejs/*out.log /var/log/nodejs/*err.log { size 10M missingok notifempty rotate 5 sharedscripts compress copytrun

我有一个生成输出和错误日志的应用程序。我需要压缩它们并在服务器上保留5个日志。 此外,日志应该在压缩后立即复制到S3 bucket

lastaction在我看来是编写脚本的正确地方,因为我希望压缩文件

我的配置文件如下所示:

/var/log/nodejs/*out.log /var/log/nodejs/*err.log {
  size 10M
  missingok
  notifempty
  rotate 5 
  sharedscripts
  compress
  copytruncate
  dateext
  dateformat -%Y%m%d-%s
  olddir /var/log/nodejs/rotated
  lastaction
    echo $@
    INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id`"
    HOSTNAME=`hostname`
    BUCKET="my-logs"
    REGION="us-west-2"
    read DAY MONTH YEAR <<< `date "+%d %m %Y"`  
    aws s3 sync /var/log/nodejs/rotated/ "s3://$BUCKET/${INSTANCE_ID}_${HOSTNAME}/$YEAR/$MONTH/$DAY/" --region $REGION
  endscript
}
虽然我想得到新的位置:

/var/log/nodejs/rotated/app-out.log-20190131-1548925261.gz /var/log/nodejs/rotated/app-err.log-20190131-1548925261.gz
我找到了一个解决办法

我在aws s3 sync命令中添加了--exclude--include。 现在我的脚本看起来像:

/var/log/nodejs/*out.log /var/log/nodejs/*err.log {
  size 10M
  missingok
  notifempty
  rotate 5 
  sharedscripts
  compress
  copytruncate
  dateext
  dateformat -%Y%m%d-%s
  olddir /var/log/nodejs/rotated
  lastaction
    echo $@
    INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id`"
    HOSTNAME=`hostname`
    BUCKET="my-logs"
    REGION="us-west-2"
    read DAY MONTH YEAR <<< `date "+%d %m %Y"` 
    FORMAT=`date "+%Y%m%d"` 
    aws s3 sync /var/log/nodejs/rotated/ "s3://$BUCKET/${INSTANCE_ID}_${HOSTNAME}/$YEAR/$MONTH/$DAY/" --region $REGION --exclude "*" --include "*.log-$FORMAT*"
  endscript
}
/var/log/nodejs/*out.log/var/log/nodejs/*err.log{
尺寸10米
米森戈克
notifempty
轮换5次
共享脚本
压紧
复制截断
dateext
日期格式-%Y%m%d-%s
olddir/var/log/nodejs/rotated
最后行动
回音$@
实例_ID=“`wget-q-O-http://instance-data/latest/meta-data/instance-id`"
HOSTNAME=`HOSTNAME`
BUCKET=“我的日志”
REGION=“美国西部-2”

read DAY MONTH YEAR将当前日期添加到web服务器配置中的日志文件名中。例如,在Apache下,这将出现在网站的
指令
CustomLog“|/usr/bin/rotatelogs/var/log/nodejs/app out-%Y-%m-%d.log”
并将logrotate设置为每天旋转。但我希望它每小时旋转一次,因为日志文件应该非常大,然后将小时添加到文件名中并每小时旋转一次?我不能。我希望
copytruncate
/var/log/nodejs/*out.log /var/log/nodejs/*err.log {
  size 10M
  missingok
  notifempty
  rotate 5 
  sharedscripts
  compress
  copytruncate
  dateext
  dateformat -%Y%m%d-%s
  olddir /var/log/nodejs/rotated
  lastaction
    echo $@
    INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id`"
    HOSTNAME=`hostname`
    BUCKET="my-logs"
    REGION="us-west-2"
    read DAY MONTH YEAR <<< `date "+%d %m %Y"` 
    FORMAT=`date "+%Y%m%d"` 
    aws s3 sync /var/log/nodejs/rotated/ "s3://$BUCKET/${INSTANCE_ID}_${HOSTNAME}/$YEAR/$MONTH/$DAY/" --region $REGION --exclude "*" --include "*.log-$FORMAT*"
  endscript
}