Может кто-нибудь сказать мне, что здесь происходит? Насколько мне известно, эти способы выполнения сценария инициализации идентичны.
box:~# whoami
root
box:~# /etc/init.d/nginx restart
nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed
box:~# service nginx restart
nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed
box:~# head -1 /etc/init.d/nginx
#!/bin/sh
box:~# /bin/sh /etc/init.d/nginx restart
Stopping nginx: [ OK ]
Starting nginx: [ OK ]
Я не понимаю, почему это сработало и почему вообще существует проблема с разрешением. Сценарий инициализации работает от имени пользователя root и должен иметь доступ к файлу pid.
Обновление 1: немного предыстории
Я пробовал ваш стандартный способ устранения неполадок "проблемы с разрешениями", дошел до того, что сделал файл pid доступным для чтения / записи. Раньше я получал ту же ошибку разрешений в журнале ошибок, который находился в произвольном месте: на монтировании. Я безуспешно пытался размонтировать / перемонтировать. После этого я применил метод «sh», который сработал. После этого, похоже, ошибка разрешений журнала исчезла, хотя теперь я вижу ту же ошибку в файле pid (как вы можете видеть).
Обновление 2: в ответ на комментарии
box3:~# ls -alZ /var/run/nginx.pid
-rw-rw-rw-. root root unconfined_u:object_r:var_run_t:s0 /var/run/nginx.pid
box3:~# ls -alZ /etc/init.d/nginx
-rwxr-xr-x. root root system_u:object_r:httpd_initrc_exec_t:s0 /etc/init.d/nginx
Обновление 3: это определенно проблема SELinux
Отключение SELinux решает проблему. Мне нужно прочитать о контекстах безопасности SELinux.
box:~# setenforce 0
box:~# getenforce
Permissive
box:~# /etc/init.d/nginx restart
Stopping nginx: [ OK ]
Starting nginx: [ OK ]
box:~# setenforce 1
box:~# /etc/init.d/nginx restart
nginx: [emerg] open() "/mnt1/logs/nginx-error.log" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed