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

Мой сервер работает на 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?

3
задан 6 June 2017 в 22:17

4 ответа

Мне удалось добиться того, чего я хотел, все, что касается кода в моей начальной записи, в порядке, единственное, что я должен был знать, это то, что пользователю www-данных не разрешено писать в /var/log, поэтому я нет выхода там. И, кроме того, в моем PHP-скрипте я пытался создать файл и что-то записать в него, чтобы сделать это, необходим абсолютный путь, поэтому он должен выглядеть так:

dirname(__FILE__) . '/myfile.txt';

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

0
ответ дан 18 July 2018 в 12:03

Используйте /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?).

3
ответ дан 18 July 2018 в 12:03

Мне удалось добиться того, чего я хотел, все, что касается кода в моей начальной записи, в порядке, единственное, что я должен был знать, это то, что пользователю www-данных не разрешено писать в /var/log, поэтому я нет выхода там. И, кроме того, в моем PHP-скрипте я пытался создать файл и что-то записать в него, чтобы сделать это, необходим абсолютный путь, поэтому он должен выглядеть так:

dirname(__FILE__) . '/myfile.txt';

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

0
ответ дан 24 July 2018 в 19:54

Используйте /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?).

3
ответ дан 24 July 2018 в 19:54
  • 1
    Вспомни, ты избил меня до фактического ответа. Мой был комментарий, но ваш намного лучше! +1 =) – Terrance 6 June 2017 в 22:15
  • 2
    @Terrance был там, что: =) – Rinzwind 6 June 2017 в 22:16
  • 3
    Честно говоря, я не знаю, что это значит (> /dev/null 2>/dev/null &), не могли бы вы немного объяснить? Вы имеете в виду что-то вроде этого: exec('crontab /var/www/html/cron.txt > /dev/null 2>/dev/null &');? – BociucH 6 June 2017 в 22:36
  • 4
    Это приведет к перенаправлению вывода и ошибок в «/ dev / null». И & quot; & amp; & quot; отделяет команду от исходного потока. Вы действительно должны знать об этом. – Rinzwind 6 June 2017 в 23:20

Другие вопросы по тегам:

Похожие вопросы: