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

Как два пользователя могут настроить запуск одного и того же файла cron?

В нашей среде у нас есть два администратора баз данных для выполнения некоторых заданий cron, определенных в файле cron_jobs.txt. Часто нам нужно изменить время и команды в этом файле cron_jobs.txt и перезагрузить его.

Проблема в том, что если DBA_1 редактирует и перезагружает этот файл ($ crontab cron_jobs.txt), он загружается под его учетной записью пользователя. Теперь DBA_2 редактирует тот же файл cron_jobs.txt и перезагружает его. Новые наборы заданий будут выполняться под учетными записями пользователей DBA_2. Таким образом, в основном одни и те же задания выполняются дважды.

Например, задание настроено на запуск в 15:00 ежедневно администратором DBA_1. Несколько дней спустя DBA_2 изменяет его на 2PM и перезагружает. Теперь у нас такая же работа, которая выполняется в 14 и 15 часов.

Есть ли способ объединить вакансии? Лиек, независимо от того, кто загружает файл cron_job.txt, должен выполняться только один набор заданий? Кстати (DBA_1 имеет административный доступ к UNIX, DBA_2 - нет). Мы используем Sun Os 5.10. Решение будет оценено.

Спасибо.

DBA_2

Используйте ролевую учетную запись, а не привязывайте вещи к учетной записи обычного пользователя. Затем разрешите обоим пользователям выполнить эту команду.

sudo crontab -u dba_cron_user -e

Настройте для этой цели отдельную учетную запись и позвольте заданиям cron запускаться только под этой учетной записью.

Это лучшая практика, которая предлагает множество преимуществ, помимо решения вашей проблемы:

  • Не о чем беспокоиться, если DBA сбит автобусом или другим
  • Реальные среды учетных записей пользователей не влияют на ваши рабочие задания cron
  • В сочетании с sudo это дает хорошие возможности ведения журнала / отчетности

В моей предыдущей компании я отключил cron & at для всех реальных учетных записей пользователей.

Один из способов сделать это - иметь файл семафора, в который оба пользователя могут писать. Попросите задание cron проверить наличие этого файла и дату файла - если это сегодняшняя дата, чем задание уже было запущено - поэтому нет необходимости запускать - вторая попытка запустить файл завершится. Проблема с этим подходом заключается в том, что ранний запуск всегда будет выигрывать.

Обычно он говорит:

crontab -e

и редактирует файл. В этом случае более ранние правки присутствуют на момент внесения изменений. Это сохранит согласованность crontab (одного входа в систему).


Другой способ - получить текущий файл, добавить его и затем загрузить.

crontab -l > buffer.txt
cat new_command.txt >> buffer.txt
crontab buffer.txt

Здесь требуется уловка, заключающаяся в написании сценария слияния new_command.txt с buffer.txt, чтобы исключить репликацию. Человек-пользователь обычно делает это правильно при использовании crontab -e.

Вы можете создать жесткую или мягкую ссылку из файла crontab первого пользователя (/ var / spool / cron / DBA_1) на файл crontab второго пользователя (/ var / spool / cron / DBA_2). Обратной стороной этого метода является то, что оба пользователя используют один и тот же crontab, и ни один из них не получает отдельный файл.

Вышеупомянутые местоположения верны для RHEL / CentOS; они могут отличаться в другом дистрибутиве.