LINUX.ORG.RU
решено ФорумAdmin

Перезапуск службы SystemD при сбое.

 


0

2

Всем привет.

Написал скрипт который делает бэкапы БД по ночам. Скрипт сам по себе работает и делает бэкапы, но нужно его запускать в ночное время, по будням(для тестов поменял временные интервалы). Самое главное, что если скрипту не удалось создать бэкап, т.е. к примеру сеть пропала или служба ssh на удаленном сервере остановилась/зависла(там винда)), то выполнить повторные запуски в кол-ве 5 раз с интервалом в 30 минут. Если все равно не удалось, то запустить службу по таймеру на следующий день.

Я написал файл для службы, который запускает скрипт:

[Unit]
Description=1C database backup
Wants=1C_Back.timer
#Служба будет перезапущена 5 раз в течении 15 минут
StartLimitIntervalSec=900
StartLimitBurst=5


[Service]
Type=simple
ExecStart=/root/Backup_1C/1C_back.sh
#Перезапуск службы в случае неудачного запуска
Restart=on-failure
#Повторные запуски через 3 минуты
RestartSec=180

[Install]
WantedBy=multi-user.target

Так же написал файл таймера:

[Unit]
Description=1C Backup
Requires=1C_back.service

[Timer]
Unit=1C_back.service
#Запуск службы 1C_back.service каждые 20 минут
OnCalendar= *:0/20


[Install]
WantedBy=timers.target

Проблема в том, что когда приходит время(00:00:00), то запускается служба, которая запускает скрипт, но появляется ошибка(и это нормально, так как заняты файлы в расшаренном каталоге) и по идее служба должна выполниться 5 раз через каждые 3 минуты в течении 15 минут(для тестов), но вместо этого она продолжает попытки запуска, хотя я ограничил их 5-ю. Почему так происходит? Вот что в логах: https://pastebin.com/D0WnBTep

В логах мы видим, что скрипт запускался аж 8 раз(и больше на самом деле) и превысил время в 15 минут. Почему по истечении 15 минут служба не остановила свое выполнение?



Последнее исправление: TuxZer92 (всего исправлений: 5)
Ответ на: комментарий от TuxZer92

Cut работает только в новостях и не прячет в спойлер, а урезает текст новости, чтоб не лезла целиком на главную страницу.

Сворачивается код, обернутый в [code] или, если Марк - даун, тройные кавычки

token_polyak ★★★★★
()
Последнее исправление: token_polyak (всего исправлений: 2)

Если все равно не удалось, то запустить службу по таймеру на следующий день.

идеальное ветвление в этом надёжном алгоритме, способное оставить незадачливого админа вообще без бэкапов.

мне нравится. 🙂

aol ★★★★★
()
Ответ на: комментарий от anonymous

А вообще, поставь StartLimitIntervalSec на всю ночь. У тебя служба может проработать какое-то время, потом упасть, запуститься, опять проработать какое-то время перед падением. Чтобы ограничить перезапуск, нужно выполнить условие: StartLimitBurst * RestartSec + сумма времён работы скрипта перед падением в каждой попытке <= StartLimitInytervalSec

anonymous
()

Кажись заработало)

1C_back.service: Start request repeated too quickly.
дек 27 13:23:18 Server systemd[1]: 1C_back.service: Failed with result 'exit-code'.
дек 27 13:23:18 Server systemd[1]: Failed to start 1C database backup.

Всем спасибо!;)

TuxZer92
() автор топика

но появляется ошибка(и это нормально, так как заняты файлы в расшаренном каталоге)
ошибка
и это нормально

Что-то вы неправильно делаете.

служба должна выполниться 5 раз

Что будете делать если файлы всё равно заняты? А завтра они тоже будут заняты... и послезавтра... и через месяц... и через год... Какой-то «не очень» бэкап у вас получается.

ЗЫ И не понятно зачем для /root/Backup_1C/1C_back.sh писать службу? В крон не пробовали добавлять?

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

Для тестов я специально занял каталог, чтобы проверить сработку и появление ошибки.

Настроен мониторинг через Zabbix, если файлы будут заняты и будет ошибка.

Вроде как крон не актуален для моей задачи? Там же костылять придется чтобы мониторить выполнение/не выполнение скрипта и делать попытки, если ошибки.

И у меня еще вопросик. После 3-ей попытки почему-то появляется сообщение в логах: Start request repeated too quickly.

Хотя стоит задержка в 3 минуты.

TuxZer92
() автор топика

Вот логи:

дек 27 16:22:17 test systemd[1]: Starting 1C database backup...
дек 27 16:22:18 test systemd[1]: 1C_back.service: Main process exited, code=exited, status=1/FAILURE
дек 27 16:22:18 test systemd[1]: 1C_back.service: Failed with result 'exit-code'.
дек 27 16:22:18 test systemd[1]: Failed to start 1C database backup.
дек 27 16:25:18 test systemd[1]: 1C_back.service: Scheduled restart job, restart counter is at 1.
дек 27 16:25:18 test systemd[1]: Stopped 1C database backup.
дек 27 16:25:18 test systemd[1]: Starting 1C database backup...
дек 27 16:25:19 test systemd[1]: 1C_back.service: Main process exited, code=exited, status=1/FAILURE
дек 27 16:25:19 test systemd[1]: 1C_back.service: Failed with result 'exit-code'.
дек 27 16:25:19 test systemd[1]: Failed to start 1C database backup.
дек 27 16:28:20 test systemd[1]: 1C_back.service: Scheduled restart job, restart counter is at 2.
дек 27 16:28:20 test systemd[1]: Stopped 1C database backup.
дек 27 16:28:20 test systemd[1]: Starting 1C database backup...
дек 27 16:28:21 test systemd[1]: 1C_back.service: Main process exited, code=exited, status=1/FAILURE
дек 27 16:28:21 test systemd[1]: 1C_back.service: Failed with result 'exit-code'.
дек 27 16:28:21 test systemd[1]: Failed to start 1C database backup.
дек 27 16:31:21 test systemd[1]: 1C_back.service: Scheduled restart job, restart counter is at 3.
дек 27 16:31:21 test systemd[1]: Stopped 1C database backup.
дек 27 16:31:21 test systemd[1]: 1C_back.service: Start request repeated too quickly.
дек 27 16:31:21 test systemd[1]: 1C_back.service: Failed with result 'exit-code'.
дек 27 16:31:21 test systemd[1]: Failed to start 1C database backup.
дек 27 16:40:50 test systemd[1]: Starting 1C database backup...
дек 27 16:41:13 test systemd[1]: 1C_back.service: Succeeded.
дек 27 16:41:13 test systemd[1]: Finished 1C database backup.
дек 27 16:41:13 test systemd[1]: 1C_back.service: Consumed 2.481s CPU time.

тут после 3-ей попытки почему-то Start request repeated too quickly.

TuxZer92
() автор топика