Проблема с разрешениями на открытие файла - Perl, CGI
Я пытался создать файл журнала для приложения, используя Perl и CGI на сервере Apache. По этой причине сценарий должен хранить файл журнала, который должен быть открыт при запуске сценария. Из логов я получаю: Unable to open the file: Permission denied at /usr/lib/cgi-bin/generate_logs.cgi
и скрипт выглядит следующим образом:
#!/usr/bin/perl
use CGI qw(:standard);
print "Content-type: text/plain\n\n";
...
open (my $logs, ">", "/path/to/directory/logs.txt") || die "Unable to open the file: $!";
...
Я пытался использовать некорневые пути для .txt
файл журнала, как ~/Desktop
, но все равно скрипт не может создать / открыть файл журнала. Не стесняйтесь спрашивать меня, если вам нужна дополнительная информация. заранее спасибо
1 ответ
Веб-сервер Apache обычно работает в вашей системе как отдельный пользователь. Ваш ~/Desktop
Каталог будет специфичным для ВАШЕГО пользователя. Любой каталог, в который пишет Apache, должен быть доступен для записи пользователю Apache.
Чтобы узнать, под каким именем работает Apache, проверьте ваш конфигурационный файл. Это могло бы по умолчанию /etc/httpd/conf/httpd.conf
, Вы, вероятно, найдете строку в этом файле с User
директива Вероятно, он установлен для пользователя apache
,
У Apache уже есть каталог журналов. Обычно это /var/log/httpd
, Возможно, попробуйте написать свой журнал там.
Обратите внимание, что приведенный вами пример кода очень проблематичен. Каждый раз, когда запускается ваш CGI-скрипт, ваш файл журнала будет стираться и перезаписываться. Если он работает с параллельными пользователями, у вас будут еще большие проблемы. Два потока пытаются записать один и тот же файл, проблемы с блокировкой и т. Д. Возможно, вы захотите взглянуть на CGI::Log
для чего-то более функционального.