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, как это случилось со мной. Кроме того, $ EDITOR не предупреждает о втором вызове "crontab -e", так как редактируемый файл отличается.

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам