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

Зарегистрируйте изменения файла для выполнения действия

У меня следующая проблема: я вношу автоматические изменения в конфигурацию своего веб-сервера (через веб-интерфейс) и хочу перезапустить apache. Поскольку ни одно из действий не выполняется пользователем root, я не могу запустить сервер напрямую.

Мой текущий обходной путь - иметь cronjob (каждую минуту) для root, который проверяет, существует ли конкретный файл (/tmp/restart.txt). Если файл существует, он удаляется и apache перезапускается.

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

$ touch /tmp/restart.txt

Теперь у меня вопрос: могу ли я избежать задания cron и каким-то образом создать слушателя, который будет вызываться каждый раз, когда изменяется время файла? На мой взгляд, это было бы лучшим решением.

Мы используем я смотрю для отслеживания изменений файлов на наших серверах. Он использует inotify, который включен в ядра Linux> = 2.6.13 и зависит от Perl, но я думаю, это должно быть доступно, если вы используете Linux.

iwatch -c "File %f changed >> /tmp/changed.txt" -e modify /path/to/monitor

-c указывает команду для выполнения, -e указывает события, за которыми нужно следить (все в документации). В /path/to/monitor может быть каталогом или файлом.

cronjob сделать это будет немного безопаснее:

find /path/to/httpd.conf -newer /tmp/ars.dat -exec "/path/to/apache.rc restart;" -exec "touch -m /tmp/ars.dat;"

Также хорошей идеей, вероятно, будет размещение эталонного файла в другом месте, кроме tmp.