这看起来很奇怪。我使用 Bacula 和现在的 BareOS 已有 10 多年了,但现在一个系统出现了奇怪的行为,我不知道为什么以及如何修复。
当它运行每日备份时,它工作正常,直到它到达 BackupCatalog 作业,该作业被配置为在其他所有操作之后运行。
该作业看起来已成功终止(表中的 JobStatus=T list jobs
):
*list jobs
...
+-------+---------------+--------------+---------------------+------+-------+----------+-----------------+-----------+
| JobId | Name | Client | StartTime | Type | Level | JobFiles | JobBytes | JobStatus |
+-------+---------------+--------------+---------------------+------+-------+----------+-----------------+-----------+
...
| 5,475 | BackupCatalog | kantor-fd | 2019-12-04 02:56:40 | B | F | 21 | 27,364,860 | T |
+-------+---------------+--------------+---------------------+------+-------+----------+-----------------+-----------+
但是,在messages
日志文件中,我看不到最后一项工作的常规摘要。日志文件完成如下:
19-Nov 02:32 kantor-dir JobId 5398: shell command: run BeforeJob "/usr/lib/bareos/scripts/make_catalog_backup.pl Kantor"
19-Nov 02:33 kantor-dir JobId 5398: Start Backup JobId 5398, Job=BackupCatalog.2019-11-18_23.10.00_10
19-Nov 02:33 kantor-dir JobId 5398: Using Device "FileStorage" to write.
19-Nov 02:33 kantor-sd JobId 5398: Volume "Kantor-2018-01-08_08:48:50" previously written, moving to end of data.
19-Nov 02:33 kantor-sd JobId 5398: Ready to append to end of Volume "Kantor-2018-01-08_08:48:50" size=4716094462
19-Nov 02:33 kantor-sd JobId 5398: Elapsed time=00:00:05, Transfer rate=5.663 M Bytes/second
就这样。注意,RunAfterJob 脚本似乎没有被执行。但是如果我手动执行它,它就可以工作(导出的目录数据库文件被删除)。然而,这不是 RunAfterJob 脚本的唯一工作。
我希望它最终会显示出这样的东西。所有其他工作都有它:
19-Nov 02:32 kantor-dir JobId 5397: Bareos kantor-dir 16.2.6 (02Jun17):
Build OS: x86_64-pc-linux-gnu debian Debian GNU/Linux buster/sid
JobId: 5397
Job: FTP.2019-11-18_23.05.00_09
...
FD termination status: OK
SD termination status: OK
Termination: Backup OK
19-Nov 02:32 kantor-dir JobId 5397: Begin pruning Jobs older than 1 month 10 days .
...
此外,导演的身份看起来很奇怪:
*status dir
kantor-dir Version: 16.2.6 (02 June 2017) x86_64-pc-linux-gnu debian Debian GNU/Linux buster/sid
Daemon started 03-Dec-19 11:10. Jobs: run=4, running=1 mode=0 db=mysql
Heap: heap=135,168 smbytes=222,459 max_bytes=236,758 bufs=543 max_bufs=594
Scheduled Jobs:
...
====
Running Jobs:
Console connected at 04-Dec-19 09:03
JobId Level Name Status
======================================================================
5475 Full BackupCatalog.2019-12-03_23.10.00_08 has terminated
====
Terminated Jobs:
JobId Level Files Bytes Status Finished Name
====================================================================
...
5471 Incr 6,591 7.499 G OK 03-Dec-19 23:15 termsrv
5472 Incr 427 11.37 G OK 03-Dec-19 23:44 1C
5473 Incr 3 3.198 G OK 04-Dec-19 02:56 Oracle
5474 Incr 5,797 2.600 G OK 04-Dec-19 02:56 FTP
Client Initiated Connections (waiting for jobs):
...
====
即在“正在运行的工作”中列出的上述工作,但它说它已终止。它没有在“终止的工作”中列出,好像导演还有事情要做。
它在这种状态下挂了六个小时。我还看到时间有些奇怪(表和日志文件中的 StartTime 相差半小时,但是,系统date
和 MySQLselect NOW();
是同步的)。
director 重启后,director 状态看起来更合适:
Running Jobs:
Console connected at 04-Dec-19 09:06
No Jobs running.
====
No Terminated Jobs.
这一切都始于两周前。如果我让它挂起,所有后续计划的作业将无限期地等待这个卡住的作业,这意味着不会执行任何备份。
我觉得这可能是该作业的 RunAfterJob 脚本存在的问题,但它是标准发布的脚本。如果我用手跑进去,它会起作用。作业定义本身也是标准发布的,唯一的修改是我在 FileSet 中添加了 compression=GZIP,但我每次都这样做,这从未引起任何问题。
要找什么?怎么修?
更新:
问题消失了。我不明白,为什么。备份工作至少两天。似乎什么都没有卡住。
它似乎被配置为在作业备份结束时通过电子邮件发送引导文件
BackupCatalog
:如果未配置服务器上的电子邮件发送,则会卡住。如果电子邮件发送受阻但后来在服务器外部修复,它会突然解开而没有明显的迹象表明发生了什么变化。这似乎是我的情况。
通过删除这个
Write Bootstrap
问题可以完全避免。(该作业将按照JobDefs
-referencedDefaultJob
模板中的配置写入本地引导文件。)这是 BareOS 的一个缺陷,它没有解释可能出现的问题,也没有将其记录为问题并走得更远。它只是卡住了。太糟糕了。也不可惜,默认情况下也是这样配置的。