Задать вопрос

Bacula, выполнение скриптов после бекапа?

Добрый день.

Используем Bacula для резервного копирования, после бекапа на клиенте Bacula запускает скрипт, который еще дополнительно жмет нужные данные tar'ом.


В настройках директора в job для клиента это выглядит так:
Run Script {
      Runs When = After
      Runs On Client = yes
      Runs On Success = yes
      Runs On Failure = no
      Fail Job On Error = no
      Command = "sh /home/test2.sh"
    }



Все замечательно, скрипт запускается после бекапа, но вот bacula не считает задание завершенным пока скрипт не отработает до конца, а это может занять продолжительно время, из-за чего могу создаваться ненужные очереди в директоре…


Пытался обойти это стандартным башевским амперсандом (&):
Command = "sh /home/test2.sh &"

Ничего не выходит, пытался даже из скрипта запускать другой скрипт с амперсандом, все равно bacula считает задание не завершенным пока не отработает скрипт… Оо


Есть уже конечно мысли, создавать скриптом, который запускает бакула, какой-нибудь файл в tmp, а скриптом по крону проверять наличие этого файла и запускать tar, но городить такие костыли не хочется. Должен же быть выход!


Подскажите, кто сталкивался с Bacula, как решить эту задачу?
  • Вопрос задан
  • 4532 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@MealstroM
«mycommand.sh | at now » пробывали такую конструкцию? можно добавить at now + 1 hour. Попробуйте так.
Ответ написан
merlin-vrn
@merlin-vrn
Bacula ждёт завершения всех дочерних процессов. Другими словами, вы «в фоне» не оставите задачу, если ваши процессы будут запускаться из бакулы — даже если вы сделаете форк в скрипте и убъёте родителя, сироту подхватит бакула и будет ждать её завершения. Логично, потому, что сериализация задач в бакуле сделана для ускорения каждой из них: чтобы системы «не распылялись» при выполнении, выполняя каждую из задач и все в целом бысрее.

Частично обойти это можно, указав Maximum Concurrent Jobs больше 1 в Client, Storage, Director ресурсах (где это необходимо). Тогда система сможет запустить другие задания, несмотря на то, что данное задание ещё выполняется.
Возможно, другое решение — разворачивать только что сделанный бекап из бакулы и запаковывать в tar уже его. Если сейчас память не врёт, restore job-ы по-другому работают с этими ограничениями на число одновременных задач.

Вообще у меня стойкое ощущение, что вы неправильно её используете, а точнее — архитектура бекапов у вас неправильная. Для чего вам этот tar? Если это «второй бекап», почему он запускается из bacula, если он не имеет никакого к ней отношения? Попытка сериализовать задачи? Ну так они у вас и сериализовались правильно, диск и прочие ресурсы в каждый момент времени заняты одной конкретной задачей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы