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

Блокировка Solaris «crontab -e» через vi

Вчера у меня возникла проблема с блокировкой Solaris и редактированием crontab, из-за которой я задумался, как лучше всего защитить несколько одновременных изменений одного и того же crontab в Solaris. Я подтвердил, что такое поведение существует в Solaris до 11.2.10.5.0.

EDITOR=vi
OS=Solaris 10, 11
SHELL=bash
RBAC=pfexec

Обычно vi использует файлы .filename.swp для предотвращения одновременного редактирования одного и того же файла несколькими пользователями, будь то несколько пользователей или несколько вызовов одного и того же пользователя. Однако «crontab -e» создает и передает временный файл с именем, основанным на / tmp / crontabXXXXXX, в $ EDITOR, а несколько одновременных вызовов «crontab -e» передают различные временные файлы в $ EDITOR, потенциально позволяя отменить изменения. в crontab, когда он открывается из двух мест одновременно, или когда приостановленный сеанс vi прекращается из-за тайм-аута TTY, как это случилось со мной. Кроме того, при втором вызове "crontab -e" от редактора $ EDITOR нет предупреждения, так как редактируемый файл отличается.

Как я могу предотвратить возникновение этой проблемы? Использование псевдослучайного имени временного файла предотвращает работу встроенной блокировки в vi, поэтому обращение к этому пути может показаться оптимальным. Возможно, проблема более фундаментальная и ее следует рассматривать как ошибку ОС. Справочная страница Solaris crontab не оставляет особых надежд, поскольку в ней говорится: «Одновременные модификации одного и того же файла crontab могут привести к неожиданным результатам», но я надеюсь, что у кого-то есть ответ.

Если это действительно вызывает беспокойство, вам придется написать что-то самостоятельно, поскольку на странице руководства предполагается, что это не встроено.

Вы можете написать оболочку для crontab (1), которая будет проверять блокировку / блокировку перед запуском самого crontab (1).

В этом ответ Я предлагаю метод блокировки файлов с помощью mkdir.

Однако вся эта идея не кажется тривиальной задачей.