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