Мой сервер работает на Ubuntu и nginx. Моя проблема касается Крона, я хотел бы запустить его (crontab) использование файла - cron.txt, его содержание:
* * * * * /usr/bin/php /var/www/html/test.php >> /var/log/cron.log
Если я выполняю его с помощью команды: crontab /var/www/html/cron.txt
, это работает отлично, сценарий test.php выполняется. Но когда я делаю то же, но использование Сценария PHP (выполняющийся через браузер): exec('crontab /var/www/html/cron.txt');
, это не работает.
Проверка текущего cronjob командой: crontab -l -u www-data
, строка из файла появляется, но Крон не делает своего задания. Возможно, это связано с некоторыми проблемами разрешения? Поскольку это только работает путем выполнения корнем. Существует ли способ вынудить Крон сделать задачи www-данных также?
Пожалуйста, используйте /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');, это не работает.
blockquote>Если это не сработает, возможно, у вас есть другая проблема, кроме использования crontab. Например: вам не нужно перенаправить? (т.е. используйте
> /dev/null 2>/dev/null &
в конце вашей команды exec?).
Мне удалось добиться того, чего я хотел, все в коде в моем первоначальном посте в порядке, единственное, что я должен был знать, это то, что пользователю www-данных не разрешено писать в /var/log
, поэтому я имел нет выхода там. Кроме того, в моем PHP-скрипте я пытался создать файл и записать в него что-то, для этого требуется абсолютный путь, поэтому он должен выглядеть следующим образом:
dirname(__FILE__) . '/myfile.txt';
После этих изменений, все работает как положено.