Назад | Перейти на главную страницу

Bacula не удаляет файлы

У меня есть 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
...

С его помощью вы можете проверить вывод своего скрипта и узнать, где будет ошибка.