Я использую плагин check_postgres.pl для Nagios. Я пытаюсь отслеживать, сколько времени прошло с момента запуска последней контрольной точки, с помощью параметра check_postgres_checkpoint. Когда я запускаю команду из CLI как root, я получаю результат, но не могу получить результат в веб-интерфейсе Nagios. Ошибка, которую он показывает,
ERROR: pg_controldata could not read the given data directory: "/opt/PostgreSQL/9.1/data"
Он пытается получить доступ к файлу pg_control в «глобальном» каталоге, находящемся под каталогом данных, который имеет доступ только для чтения для пользователя postgres.
Может ли кто-нибудь предложить мне, как это можно решить?
Спасибо.
На мой взгляд, лучший способ сделать это - использовать sudo, как предлагает Халед.
Запустите visudo и добавьте такую строку:
nagios ALL=NOPASSWD:/path/to/check_postgres.pl
Затем измените команду def для запуска плагина через sudo. О, и обязательно убедитесь, что "requiretty" не установлен (также через visudo), иначе он не сработает.
В качестве альтернативы вы можете создать новую группу, содержащую nagios + postgres, и сделать /opt/PostgreSQL/9.1/data владельцем postgres: postnag (или чего-то еще), но вам нужно будет убедиться, что все новые файлы также относятся к группе postnag '(например, через chmod g + s). Это гораздо более сложное решение, но оно не связано с sudo (некоторым людям не нравится использовать sudo вот так ...?).
postgres
пользователь.или
или
check_postgres
могу прочитать этоили
Это можно решить, предоставив пользователю nagios право sudo на запуск этого плагина без запроса пароля.
Предоставьте pg_controldata права setuid. Это проще и безопаснее, чем искажение sudo:
chmod u+s /usr/lib/postgresql/9.0/bin/pg_controldata