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)