2017-12-23 31 views
0

나는 우분투 16.04를 실행하고 있습니다. 나는 var/www/html/CronScripts/에있는 PHP 스크립트를 cronjob으로 실행하려고합니다. 이 모든 스크립트는 동일한 디렉토리에 .txt 또는 .out 파일을 만듭니다.PHP 스크립트를 CRONJOB으로 실행하여 .txt 파일을 만들 때 권한이 거부되었거나 뭔가가 발생했습니다.

<?php 

$handle = fopen("theFileHandle.out", "a"); 
fwrite($handle, "The quick brown fox jumps over a lazy dog.\n"); 
fclose($handle); 

?> 

지금 문제는 내가 브라우저에서 열어이 스크립트를 실행할 때, 나는 다음과 같은 오류를 얻을 수 있다는 것입니다 : 여기에 스크립트입니다

Warning: fopen(theFileHandle.out): failed to open stream: Permission denied in /var/www/html/CronScripts/index.php on line 3 

Warning: fwrite() expects parameter 1 to be resource, boolean given in /var/www/html/CronScripts/index.php on line 4 

Warning: fclose() expects parameter 1 to be resource, boolean given in /var/www/html/CronScripts/index.php on line 5 

그래서 내 추론했다은이 경우 스크립트가 sudo으로 실행되면 허가 문제가 발생하지 않습니다. 내가 궁극적으로 cronjob에서 스크립트를 실행하기 위하여려고하고 있기 때문에, 나는 sudo 사용자의 crontab 파일에 때라도으로 cronjob을 추가 터미널

sudo crontab -e 

에서 다음 명령을 실행.

* * * * * php /var/www/html/CronScripts/index.php > /var/www/html/CronScripts/output.out 

이 후, output.out라는 이름의 파일이 ** 생성하지만 IT는 EMPTY 하였다.

는 내 웹 검색에서 내가 sudo는 사용자의 crontab에 cronjob를 추가했다,하지만 아마 문제 때문에 아파치/PHP는, www-data 사용자 에 의해 운영되며 결론을 내렸다. 따라서 su -s /bin/bash www-data을 실행하여 www-data으로 전환 한 다음 해당 crontab에 * * * * * php /var/www/html/CronScripts/index.php > /var/www/html/CronScripts/out.out을 추가했지만 출력 로그 파일 out.out이 생성되지 않았습니다.

제 질문은 왜 제가이 문제에 직면하고 있으며 어떻게 해결할 수 있습니까?
+0

첫 번째 경우 sudo ...를 실행할 때 /var/log/apache2/error.log에 오류가 있습니까? 그리고이 명령 행의 결과는 무엇입니까? ls -la/var/www/html? – Nico

답변

0

원래의 문제는 사용자 www-data (아파치와 PHP 스크립트를 실행하는 사용자)는 디렉토리에 쓸 수있는 권한이없는 것처럼 보입니다. chown과 chmod를 사용하여이 디렉토리의 www 데이터 사용자에게 읽고 쓸 수있는 권한을 부여하여이를 해결할 수 있습니다.

그 해결책은 보안 문제 일 수 있습니다. 아파치 서버 (예 :/varr/www/anotherplace)의 범위를 벗어나는 디렉토리를 사용하고 스크립트가 만드는 파일에 실행 권한을 부여하지 마십시오.