LINUX.ORG.RU

Права доступа

 bash php perl


0

1

В общем, есть необычно криворукий кейс который навеял интересный вопрос. Суть такова: хочу запустить perl скрипт из php скрипта. Делаею:

exec("/home/cgi/test.pl");
Запускается, бегут надписи, закрывается. Смотрю, а работы он не выполнил. В perl скрипте есть команда на создание файла:
	open(FILE,"> $path");
	flock(FILE,2);
  	print(FILE "$content");
	close(FILE);
Она не отрабатывает.

Подскажите бывалые, куда копать? Логов php-fpm который обрабатывает php скрипт - не дает...



Последнее исправление: fenicks (всего исправлений: 6)

Вообщем

В общем, слова «вообщем» не существует. Вообще не существует.

akk ★★★★★
()
Ответ на: комментарий от fenicks

У тебя интерпретатор php работает от имени некоторого пользователя, скорее всего от того же пользователя, что и web-сервер. От имени этого же пользователя вызывается и твой скрипт, который вызывается из php.

А теперь подумай, может ли писать в /home/html этот пользователь или нет.

anonymous
()

В перлоскрипте есть такие строчки?

use strict;
use warnings;
С ними должон в STDERR ругаться, что ему не так.
А вообще код старорежимный, сейчас вроде как принято
open(my $file,'>',"$path");
ну и далее везде $file вместо FILE

massimus ★★★
()
Ответ на: комментарий от fenicks

Что может? Может так, а может нет, ты проверил, что пользователь от имени которого у тебя вызывается интерпретатор php может писать в /home/html?

anonymous
()
Ответ на: комментарий от anonymous

Да, может и exec файл bar.txt создает. Php запускается от пользователя nginx:apache Папка html имеет права

drwxr-xr-x. 22 nginx nginx  4096 Oct 25 01:10 html

fenicks
() автор топика
Ответ на: комментарий от massimus

strict закоментирован, если его включить скрипт перестает работать. Warning к сожалению ошибку не выявляет. Я сделал дебуг по шагам:

		print "DEBUG open: $path\t";
	open(my $file,'>',"$path");
		print "\t\tOK\n";
		print "DEBUG print to file\t";
	flock($file,2);
	print($file "$content");
		print "\t\tOK\n";
		print "DEBUG close: $path\t";
	close($file);
		print "\t\tOK\n";
Так вот в браузере выводится только конец:
DEBUG close: /home/html/file.html			OK

fenicks
() автор топика
Ответ на: комментарий от fenicks

Тогда проверяй скрипт /home/cgi/test.pl, просто запусти его руками от имени этого пользователя.

Проверь, что у этого скрипта (/home/cgi/test.pl) есть право на выполнение и вверху через «шебанг» (#!) указан путь до интерпретатора perl.

anonymous
()
Ответ на: комментарий от anonymous

Запустил в баше от имени nginx залогинившись так

su - nginx -s /bin/sh
Файл создался, работает.

Шебанг стоит верный...

fenicks
() автор топика
Ответ на: комментарий от anonymous

Да, из шела работает, а в браузере нет.

Где-нибудь еще в системе есть логи чтобы глянуть что не так?..

fenicks
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.