В нашей среде у нас есть два администратора баз данных для выполнения некоторых заданий 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 запускаться только под этой учетной записью.
Это лучшая практика, которая предлагает множество преимуществ, помимо решения вашей проблемы:
В моей предыдущей компании я отключил 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; они могут отличаться в другом дистрибутиве.