내 서버는 Ubuntu와 nginx에서 실행되고 있습니다. 나의 문제 고민크론, 파일을 사용하여 (crontab)을 시작하고 싶습니다.cron.txt, 내용:
* * * * * /usr/bin/php /var/www/html/test.php >> /var/log/cron.log
다음 명령을 사용하여 실행하면 crontab /var/www/html/cron.txt
완벽하게 작동합니다. 스크립트테스트.php처형되고 있습니다. 그러나 동일한 작업을 수행하지만 PHP 스크립트(브라우저를 통해 실행)를 사용하면 exec('crontab /var/www/html/cron.txt');
작동하지 않습니다.
다음 명령으로 현재 cronjob을 확인하면 crontab -l -u www-data
파일의 줄이 나타나지만 Cron은 해당 작업을 수행하지 않습니다. 어쩌면 일부 권한 문제와 관련이 있을까요? 루트로 실행해야만 작동하기 때문입니다. Cron이 www-data의 작업도 수행하도록 강제하는 방법이 있습니까?
답변1
사용 해주세요 /etc/crontab
. cron 작업을 수행하는 이 방법을 사용하면 작업에 사용자 이름을 추가할 수 있습니다. 다음과 같이 보일 것입니다:
* * * * * www-data /usr/bin/php /var/www/html/test.php >> /var/log/cron.log
nano /etc/crontab
파일에 행을 추가하고 추가 할 수 있습니다 .
그러나 동일한 작업을 수행하지만 PHP 스크립트(브라우저를 통해 실행): exec('crontab /var/www/html/cron.txt');를 사용하면 작동하지 않습니다.
그래도 작동하지 않으면 아마도 "crontab" 사용 이외의 다른 문제가 있는 것입니다. 예를 들어 리디렉션할 필요가 없나요? (즉, > /dev/null 2>/dev/null &
exec 명령 끝에 사용하시겠습니까?)
답변2
나는 내가 원하는 것을 달성할 수 있었고, 내 초기 게시물의 코드에 관한 모든 것이 괜찮습니다. 내가 알아야 했던 유일한 것은 www-data 사용자가 에 쓸 수 없다는 것입니다. /var/log
그래서 거기에는 출력이 없었습니다. 또한 내 PHP 스크립트에서 파일을 만들고 그 안에 무언가를 쓰려고 했는데 절대 경로가 필요하므로 다음과 같아야 합니다.
dirname(__FILE__) . '/myfile.txt';
이러한 변경 후에는 모든 것이 예상대로 작동합니다.