У меня есть conf для bacula. Я пытаюсь удалить файлы после работы, но это не работает :(
Разделите мою конф:
Job {
Name = "spass.mysql"
Type = Backup
Level = Full
Client = spass-fd
RunScript {
RunsWhen = Before
FailJobOnError = No
RunsOnClient = Yes
Command = "/usr/bin/mysqldump -EB syspass --result-file /tmp/syspass-%i.sql"
}
Client Run After Job = "/usr/bin/rm -f /tmp/*.sql"
Schedule = "WorkTimeEveryHour"
Storage = File-spass
Pool = spass
FileSet="spass.mysql"
Messages = Standard
Priority = 10
Write Bootstrap = "/var/spool/bacula/%c_%n_%e.bsr"
}
FileSet {
Name = "spass.mysql"
Include {
Options {
signature = MD5
compression = GZIP
wildfile = "*.sql"
}
Options {
Exclude = yes
RegexFile = ".*"
RegexDir = ".*"
}
File = /tmp/
}
}
В сообщении это нормально:
14-Jun 17:02 bnode10-dir JobId 364: Start Backup JobId 364, Job=spass.mysql.2017-06-14_17.02.09_10
14-Jun 17:02 bnode10-dir JobId 364: Using Device "FileStorage-spass" to write.
14-Jun 17:02 spass-fd JobId 364: shell command: run ClientBeforeJob "/usr/bin/mysqldump -EB syspass --result-file /tmp/syspass-364.sql"
14-Jun 17:02 bacula-sd JobId 364: Volume "spass0006" previously written, moving to end of data.
14-Jun 17:02 bacula-sd JobId 364: Ready to append to end of Volume "spass0006" size=995952259
14-Jun 17:02 spass-fd JobId 364: shell command: run ClientAfterJob "/usr/bin/rm -f /tmp/*.sql"
14-Jun 17:02 bacula-sd JobId 364: Elapsed time=00:00:01, Transfer rate=200.8 K Bytes/second
14-Jun 17:02 bnode10-dir JobId 364: Bacula bnode10-dir 5.2.13 (19Jan13):
Как это исправить?
PS. Я думаю, проблема в разрешении. Но не знаю, как это исправить
Вам нужно обернуть ваш звонок в оболочку. Просто звоню rm /tmp/*.sql
не будет применять глобус, поэтому он удаляет файл с именем /tmp/*.sql
которого не существует. Также нет предупреждения, как вы сказали -f
Попробуйте использовать Client Run After Job = "/usr/bin/bash -c '/usr/bin/rm -f /tmp/*.sql'"
который запустит вашу команду в bash, который затем выполнит подстановку.
Вы можете поместить свою команду в скрипт с выводом на консоль.
Bacula запишет этот вывод в файл журнала вашей работы.
Как и у вас, у меня есть работа по сохранению дампов баз данных. Для этого у меня есть сценарий, который делает дамп перед заданием, и сценарий, который удаляет дамп после задания.
Пример моего скрипта, который выполняет дамп перед работой (он в PowerShell, но идея та же):
$dump="e:\scripts\save\sql\"+$bdd+'.my.sql'
$process = Start-Process -FilePath "$($mysqldump_path)mysqldump.exe"
-ArgumentList "-u uuu -ppassword -B database_name" `
-RedirectStandardOutput $dump `
-Wait -WindowStyle hidden -PassThru `
-RedirectStandardError $log_temp
if ($process.ExitCode -eq 0){
write-host " Dump OK "
$file=Get-Item $($dump)
write-host (" "+$file.Name+" : "+$file.Length+" octets : "+$file.LastWriteTime)
}
else {
write-host " Error Dump of $bdd "
Get-Content $log_temp | Out-file -FilePath $log_error -Append
exit_script
}
Если с дампом все в порядке, у меня в журнале заданий bacula есть строка «dump ok»:
shell command: run ClientRunBeforeJob "c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -file E:\scripts\save\command_bacula.ps1"
ClientRunBeforeJob: start script : 06/13/2017 22:59:23
ClientRunBeforeJob:
ClientRunBeforeJob: ---- PostgreSQL ----
ClientRunBeforeJob: Dump bdd1
ClientRunBeforeJob: Dump OK
...
С его помощью вы можете проверить вывод своего скрипта и узнать, где будет ошибка.