$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]
Это важная строка скрипта (/etc/munin/plugins/nginx_status_codes.rb:31):
File.open("/var/log/nginx/access.log", File::RDONLY).readlines.each do |line|
Мой журнал доступа имеет глобальные права на чтение:
$ ls -lha /var/log/nginx/access.log
-rw-r--r-- 1 www-data adm 49M May 1 15:56 /var/log/nginx/access.log
Скрипт работает, если я запускаю из терминала как обычный пользователь...
$ /etc/munin/plugins/nginx_status_codes > /dev/null && echo $?
0
... но не работает, если запускается Munin (который запускается от имени root):
2012/05/01-15:54:05 [3988] /etc/munin/plugins/nginx_status_codes:31:in `initialize': Permission denied - /var/log/nginx/access.log (Errno::EACCES)
2012/05/01-15:54:05 [3988] from /etc/munin/plugins/nginx_status_codes:31:in `open'
2012/05/01-15:54:05 [3988] from /etc/munin/plugins/nginx_status_codes:31
Это также не работает, если я устанавливаю права доступа к файлу на 777 или что-то еще. Я думаю, что Руби просто глуп и сообщает о неправильном исключении (Errno:EACCES) и маскирует реальную проблему. Но что бы это было?
ОБНОВЛЕНИЕ: Попытался «исправить» это, установив сценарий, принадлежащий root:root и даже с установленными битами sid/gid, ему удается сбой с отказом в разрешении.