BareOS BackupCatalog 作業卡在 Director 中終止,RunAfterJob 未執行
這看起來很奇怪。我使用 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 = "|/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" root@localhost"
如果未配置伺服器上的電子郵件發送,則會卡住。如果電子郵件發送受阻但後來在伺服器外部修復,它會突然解開而沒有明顯的跡象表明發生了什麼變化。這似乎是我的情況。
通過刪除這個
Write Bootstrap
問題可以完全避免。(該作業將按照JobDefs
-referencedDefaultJob
模板中的配置寫入本地引導文件。)這是 BareOS 的一個缺陷,它沒有解釋可能出現的問題,也沒有將其記錄為問題並走得更遠。它只是卡住了。太糟糕了。也不可惜,預設情況下也是這樣配置的。