У меня следующая проблема: я вношу автоматические изменения в конфигурацию своего веб-сервера (через веб-интерфейс) и хочу перезапустить 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.