после недели попыток я не знаю, что еще делать.
У меня есть простой скрипт PHP, который находится на моем веб-сервере, называется getpoem.php
Сценарий открывает веб-сайт, извлекает его содержимое и сохраняет его в файле poem.txt на сервере.
<?php
//File to extract the Poem of the day
$homepage = file_get_contents('http://SomeWebsite.com/today.php');
$poemALL = substr($homepage,strpos($homepage,"<p>"),strlen($homepage));
.
. // extracting the poem and saving it to $poemFinish
.
file_put_contents("poem.txt", $poemFinish); ?>
так что это довольно простой скрипт (он отлично работает, если я выполню его вручную). Этот скрипт должен быть выполнен с пользователем www-data с его cron, поэтому я открою cron этой командой и ввел команду, которую должен выполнить
sudo crontab -u www-data -e
0 3 * * * php /var/www/html/getpoem.php
чтобы избежать каких-либо проблем с разрешениями, я дал права getpoem.php и poem.txt rwx следующим образом (я знаю, что должен изменить его, когда он будет работать, но это только для проверки)
-rwxrwxrwx 1 www-data www-data 1189 Aug 17 15:07 getpoem.php
-rwxrwxrwx 1 www-data www-data 1335 Aug 17 15:07 poem.txt
Так что это настройка, но она не будет выполнена.
Что я сделал до сих пор, изменив «php» на / usr / bin / php, чтобы cron знал, что такое php.
Следующее, что я сделал — убедился, что cron запущен, поэтому я изменил cronjob на
2 * * * */usr/bin/php /var/www/html/getpoem.php | > /var/www/html/test.txt
который снова ничего не сделал …. так что я изменил его
2 * * * */usr/bin/php /var/www/html/getpoem.php | > /tmp/test.txt
который не запустил php-файл, но создал пустой (-.- «) файл с именем test.txt в моем каталоге tmp.
Поэтому я думаю, что проблема заключается в правах доступа моего пользователя www-data. Это просто очень странно, потому что весь мой веб-контент (php-файлы, webapp usw.) также принадлежит пользователю www-data и работает без сбоев.
Нужно ли мне предоставлять дополнительные привилегии для cron www-data?
При запуске php из cron ваш рабочий каталог обычно не является каталогом, в котором находится файл. При записи файла он может попытаться записать файл poem.txt
относительно /
который обычно не доступен для записи.
Таким образом, вы либо устанавливаете рабочий каталог, либо должны использовать «абсолютные» пути. Так, например:
file_put_contents(__DIR__.'/poem.txt');
где __DIR__
магическая константа, которая содержит каталог, в котором находится текущий файл
Других решений пока нет …