我有一个备份脚本(backup.sh
)ssh进入另一台机器,压缩文件,然后scp将此文件(backup_data.tar.gz
)返回到我的本地机器。我的本地计算机上还有一个logrotate文件:
/opt/backups/backup_data.tar.gz {
nocompress
daily
rotate 7
extension .tar.gz
missingok
postrotate
/opt/backups/backup.sh
endscript
}
因此,第一次执行logrotate时,要旋转的日志文件不存在(因为backup.sh脚本尚未执行)。我有missok,所以它继续前进并且不会抛出错误,但它似乎不执行backup.sh,因为在第一次运行后,backup_data.tar.gz仍然不存在。我相信postrotate只在文件被旋转时才会执行,有没有办法解决这个问题并让它无论如何执行?
答案 0 :(得分:3)
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
答案 1 :(得分:0)
使用lastaction。执行一次,是否旋转
/opt/backups/backup_data.tar.gz {
nocompress
daily
rotate 7
extension .tar.gz
missingok
postrotate
/opt/backups/backup.sh
endscript
}
答案 2 :(得分:0)
你错了,请阅读下面的手册页。
您必须使用cron作业,如ben所说。
lastaction/endscript The lines between lastaction and endscript (both of which must appear on lines by themselves) are executed (using /bin/sh)
在所有与通配符模式匹配的日志文件之后 旋转后旋转 仅在轮换至少一个日志的情况下运行脚本。这些指令只能出现在日志文件中 定义。整个模式作为第一个参数传递给脚本。 如果脚本错误退出,则只需 显示错误消息(因为这是最后一个操作)。另请参阅firstaction。