2014-01-22 1 views
0

php webscript에서 유닉스 at 작업 명령을 실행하는 데 문제가 있습니다. at 작업과 PHP는 다음과 같습니다 php 스크립트에서 unix`at`가 쉘에서 작동하지만 웹에서는 작동하지 않습니다.

$output=exec('echo "/usr/bin/perl /home/dir/test.pl" | /usr/bin/at now +1minute') 

이것은 쉘 명령 프롬프트에서 잘 작동합니다. 나는 PHP 스크립트를 실행하여 atq을 실행하여 해당 작업이 설정되고 작업이 루트에 속하는지 확인할 수 있습니다. 그런 다음 test.pl 스크립트가 실행되었음을 기다리고 확인하십시오. test.pl 스크립트는 데이터베이스에 간단한 업데이트를 수행하여 모든 것이 제대로 작동하는지 확인할 수 있습니다.

웹에서 PHP 스크립트를 실행할 때 내 쉘로 돌아가서 atq을 다시 실행하십시오. 나는 직업이 배치되었음을 볼 수있다. 이번엔 아파치에 속한다. 그래서 모든 것이 잘된 것처럼 보인다. 그러나 예약 된 시간을 기다린 후 db에 대한 업데이트가 작동하지 않았 음을 확인한 후에 test.pl 스크립트가 실행되지 않습니다.

나는 이것이 허가 문제가되어야 함을 알고 있지만 확실하지 않습니다. 나는/home/dir과 test.pl 스크립트 소유권을 아파치에 제공하려고했으나 여전히 작동하지 않습니다. webroot 폴더에서/home/dir에 대한 심볼릭 링크를 만들려고했으나 도움이되지 않았습니다. 나는 아파치 권한을 잘 모르기 때문에 뭔가를 간과 할 수있다.

여기 디렉토리이 하나에 어떤 도움

/home/dir 
drwxrwxr-x 2 apache apache 

test.pl 
-rwxr-xr-x 1 apache apache 

감사 OUPUT test.pl ls -l입니다.

+0

내가 잘못 이해했을 수도 있지만,'test.pl'의 권한을'chmod 777'으로 변경할 수 있습니다. 또한 일반적으로 Apache는 소유권이 없으며 관리자 또는 사용자는 소유권을 갖지 않습니다. –

답변

0

작업이 대기열에있는 경우 apache uid가 'at'에 대한 액세스가 거부 될 가능성을 줄일 수 있습니다.

이는 (당신이 그것을 실행하는 데 실패 알고 어떻게?) 작업이 아마도 실행에 실패한 것을 의미 루트 액세스 권한이 있기 때문에

하면, 다음 단계는의 메일 파일을보고하는 것 아파치 UID -이 UID에 대한 메일이 전송되는 경우 또는 결정이 봐 : man page에서 :

사용자는 자신의 명령 (있는 경우)에서 표준 오류 및 표준 출력을 발송됩니다

. 메일을 사용하여 전송됩니다/usr/sbin/sendmail 명령

(당신이 무엇을 찾을 수없는 경우에, 당신은 얻을 않는 메일을 확인하는 -m과에서 pwd | mail -s test apache 같은 또는 실행을 시도 할 수도 있습니다 처리해야 함)

일반적으로 데몬 소유자는 쉘을 구성 할 필요가 없습니다. -에서 호출하기 전에 $ SHELL을 설정 했습니까? (이 경우 메일이 보내지면 해당 오류가 읽히기를 기다리고있을 것입니다).

test.pl 파일에 대한 사용 권한을 확인 했는데도 문제가되지 않습니다 (fACL 또는 SELinux 제한이 적용되지 않는 경우). perl 실행 파일의 사용 권한을 확인 했습니까? test.pl에 권한이있는 다른 파일에 액세스하려고 시도 할 수 있습니까?

+0

메일이 제대로 처리되지 않는 것 같습니다. 적어도'pwd | mail -s myusername' 나는 메일을받지 못한다.'at '가 어떤 쉘을 사용할 것인지 결정하기 위해 $ SHELL을 사용하면 (root 나 다른 사용자로 실행할 때/bin/bash) 아파치에서 실행할 때 $ SHELL이 설정되지 않고' 직장을 구할 때 사용할 쉘이 없다. – BryanK

+0

사용자에 대해 이미 구성되지 않은 경우 $ SHELL 만 설정하면됩니다 (예 :/etc/passwd 참조). 주의 : 아파치에 쉘이 없다면/etc/passwd - $ SHELL을 실행하기 전에 설정하십시오. 그리고 너의 우편물을 고쳐라. (아파치 사용자를 위해 수신 메일을 분류하려고한다는 것을 기억하십시오) – symcbean

관련 문제