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

Безопасно ли менять уровень запуска внутри cron-скрипта?

Я хочу сделать ночной «горячий клон» от сервера A к серверу B. Рекомендуется, чтобы сервер B запускал минимальные демоны во время этого действия, поэтому я хочу создать «минимальный» уровень запуска, который в основном запускает только sshd и переключается на него / с него уровень выполнения в середине скрипта, то есть:

# do some stuff ...

# take services down
telinit 2

# do backup ...

# bring services back up
telinit 3

# do post-backup stuff ...

Я хочу сделать переключение уровня выполнения, а не явно запускать / останавливать службы, поэтому я могу использовать один и тот же сценарий на нескольких по-разному настроенных машинах (разные службы, некоторые на systemv-init, некоторые на systemd). Я хочу сохранить все это в одном сценарии для удобства обслуживания, а не создавать кучу новых сценариев запуска / остановки initd / systemd.

Итак, суть вопроса такова: * Будет ли telinit останавливать скрипт (предположим, что cron находится на обоих уровнях выполнения)? * Телинит ждет завершения или сразу же возвращается? * Если вышеперечисленное работает, это «безопасно» или есть потенциальные проблемы с подходом? * Есть ли лучший способ использовать один скрипт (опять же, я бы предпочел не устанавливать кучу новых скриптов инициализации, так что эта штука в значительной степени "автономна" и переносима)

Я создал следующий скрипт

#!/bin/bash
date
who -r
/sbin/telinit 2
who -r
/sbin/telinit 3
who -r
date

и установил в cron

* * * * * /home/iain/test &>>/tmp/test.out

Это вывод

Thu Mar 20 03:06:01 EDT 2014
         run-level 3  2014-03-20 03:05                   last=2
         run-level 2  2014-03-20 03:06                   last=3
         run-level 3  2014-03-20 03:06                   last=2
Thu Mar 20 03:06:01 EDT 2014

Как видите, скрипт продолжает работать. Что касается безопасности этого, только вы можете решить, основываясь на вашем тестировании в вашей среде.

В более старых системах HP-UX мы выполняли «холодные» резервные копии наших баз данных каждую ночь, используя изменения уровня выполнения. Мы запускали и останавливали базу данных на уровне выполнения 4, и в основном выполняли telinit 3, делали снимки дисков, telinit 4, начинали резервное копирование дисков. Это немного другая стратегия, чем вы смотрите, но для всех намерений и целей она будет вести себя одинаково.