Запуск cronjob как www-data

Запуск cronjob как www-data

Мой сервер работает на 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 не выполняет свою работу. Может быть, это связано с какими-то проблемами с правами доступа? Потому что он работает только при запуске от имени root. Есть ли способ заставить 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';

После этих изменений все работает как надо.

Связанный контент