$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]
Это важная строка в скрипте (/etc/munin/plugins/nginx_status_codes.rb:31):Рубин умудряется неудачу открытие 644 файла, как только для чтения
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 (который работает как корень):
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 или любой другой. Я думаю, что Ruby просто глуп и сообщает о неправильном исключении (Errno: EACCES) и маскирует реальную проблему. Но что бы это было?
ОБНОВЛЕНИЕ: Пытался «исправить» его, имея скрипт, принадлежащий root: root и , даже с битами sid/gid, которые ему удается сбой с разрешения.
Я не знаком с Мунином. Это действительно работает как root? Не переключается ли он на другой идентификатор пользователя после инициализации? Если это так, то имеет ли этот идентификатор пользователя доступ к каталогам/var,/var/log и/var/log/nginx? – theglauber
У меня есть Munin, работающий как пользователь, так и группа «root» в соответствии с munin.cfg. Но, возможно, вы правы, но может случиться, что он удаляет пользователя root при запуске скрипта. То, что я нахожу странным, это то, что я могу запускать сценарий как обычный пользователь без проблем с разрешением. – hcalves