Я обнаружил, что мои скрипты crontab не работают должным образом, потому что они не могут писать в / var / log. Я попытался выполнить команду:
sudo / usr / bin / php /var/www/html/iPhone/inarrivo/php/rome/process.php >>
/var/log/romeLoading.log 2>&1
от руки и получил:
-bash: /var/log/romeLoading.log: отказано в разрешении
Разрешения / var / log:
drwxr-XR-х. 13 корень корень 4096 15 назад 16.20.
Если я наоборот выполнить:
sudo touch /var/log/loadRome.log
Я не получаю никакой ошибки вообще.
В чем может быть проблема?
Обратите внимание, что Apache не поставлен на карту: я вызываю эти скрипты из корневого crontab и из оболочки с помощью sudo в качестве теста.
Это проблема с разрешениями, так как файл журнала принадлежит root
пользователь и apache убегают www-data
, Пытаться chown www-data:www-data /var/log/loadRome.log
,
Наилучшее предположение: у пользователя, работающего с оболочкой, нет прав на запись в /var/log/romeLoading.log
и перенаправление stdout (>>
) перенаправляется пользователем оболочки, а не пользователем sudo, поэтому доступ запрещен на >>, но не на sudo touch
, может быть попробовать
sudo sh -c '/usr/bin/php /var/www/html/iPhone/inarrivo/php/rome/process.php >> /var/log/romeLoading.log 2>&1'
он должен запускать sh от имени root, а root-sh должен выполнять перенаправление с правами root. хотя не проверено.
и в следующий раз, когда вы захотите опубликовать разрешения на отладку, опубликуйте namei -l path/to/file
вывод, он дает гораздо больше информации, чем указание самого файла при отладке проблем с разрешениями, так как проблема может быть выше, чем сам файл, например, папка, в которой он находится, или папка, в которой он находится, и т. д. ~ и namei дает вам, рекурсивно, подробную информацию о разрешениях на все из них.