Мой сервер работает на 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';
После этих изменений все работает как надо.