Bash logrotate:即使日志为',也可以运行postrotate吗;t旋转?

Bash logrotate:即使日志为',也可以运行postrotate吗;t旋转?,bash,logging,backup,logrotate,Bash,Logging,Backup,Logrotate,我有一个备份脚本(backup.sh),它将ssh放入另一台机器,压缩一个文件,然后scp将这个文件(backup\u data.tar.gz)返回到我的本地机器。我的本地计算机上也有一个日志文件: /opt/backups/backup_data.tar.gz { nocompress daily rotate 7 extension .tar.gz missingok postrotate /opt/backups/backup

我有一个备份脚本(
backup.sh
),它将ssh放入另一台机器,压缩一个文件,然后scp将这个文件(
backup\u data.tar.gz
)返回到我的本地机器。我的本地计算机上也有一个日志文件:

/opt/backups/backup_data.tar.gz {
    nocompress
    daily
    rotate 7
    extension .tar.gz
    missingok
    postrotate
        /opt/backups/backup.sh
    endscript
}

因此,第一次执行logrotate时,要旋转的日志文件不在那里(因为backup.sh脚本尚未执行)。我有missingok,所以它继续运行,不会抛出错误,但它看起来不像backup.sh被执行,因为在第一次运行之后,backup_data.tar.gz仍然不存在。我相信postrotate只在文件旋转时执行,有没有办法绕过这一点,让它不受影响地执行?

logrotate
只有在至少一个日志文件已旋转的情况下才会运行脚本(prerotate、postrotate、firstaction、lastaction)。通过运行backup.sh一次来引导进程是可行的,但是如果它将来失败,在您干预之前,您将不会有新的备份

我将创建一个单独的logrotate配置文件,例如

/opt/backups/logrotate.conf

/opt/backups/backup_data.tar.gz {
    nocompress
    daily
    rotate 7
    extension .tar.gz
    missingok
}
接下来修改
backup.sh
,并在脚本顶部插入对
logrotate
的调用:

logrotate --state=/opt/backups/logrotate.state /opt/backups/logrotate.conf
最后,将
backup.sh
设置为每天运行,例如
crontab-e
/
sudo crontab-e-u backupuser

15 2    * * *   /path/to/backup.sh

使用最后一个动作。执行一次,是否旋转

/opt/backups/backup_data.tar.gz {
    nocompress
    daily
    rotate 7
    extension .tar.gz
    missingok
    postrotate
        /opt/backups/backup.sh
    endscript
}

如果你错了,请阅读下面的手册页

正如本所说,你必须使用cron作业

所有与通配符模式匹配的日志文件都被删除一次 旋转,在后旋转之后 仅当至少有一个日志被旋转时,脚本才会运行。这些指令只能出现在日志文件中 定义。整个模式作为第一个参数传递给脚本。 如果脚本退出时出错,则只需 显示错误消息(因为这是最后一个操作)。另见第一行动

   lastaction/endscript
          The lines between lastaction and endscript (both of which must appear on lines by themselves) are executed (using /bin/sh)