Почему задачи крона, созданные ДАННЫМИ WWW, не работают?

Я имею Ubuntu 14 и хочу создать некоторые задания крона с помощью своего кода PHP.

В настоящее время я делаю что-то как crontab -u www-data, и от моего PHP кодируют, я могу записать в crontab.

Если я делаю crontab -u www-data -e Я вижу, что существуют некоторые команды, но они управляют, не выполняются, хотя, если я добавляю те же команды к crontab -e (не указывая пользователя), они работают успешно.

Файлы крона также имеют ОБЯЗАТЕЛЬНУЮ новую строку в конце.

TL; DR: Как может я делать работать на работах крона, созданных пользователем www-data работа?

Править: 1

РЕШЕНИЕ: нажмите для наблюдения решения

2
задан 13 April 2017 в 15:24

4 ответа

Поэтому, традиционно (и из очень хороших соображений безопасности), www-data пользователю не разрешают ничего сделать кроме веб-обслуживания. Никакие логины, никакие задания крона, nada.

$ getent passwd www-data
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

Переосмысление Ваш поток заданий, не пытайтесь выполнить вещи как www-data.

2
ответ дан 2 December 2019 в 01:36

Я нашел решение. Я проверил cronlogs путем ввода

sudo grep CRON /var/log/syslog

, И я видел сообщение “(CRON) info (No MTA installed, discarding output)”

, Это означало, что я должен был отправить по почте установленный.

, Таким образом, я работал sudo apt-get install postfix и теперь все работает.

1
ответ дан 2 December 2019 в 01:36

Крон выполнит www.data объекты. Можно проверить это с этим простым тестом:

$ sudo crontab -u www-data -e

Добавьте эту запись:

* * * * * date >> /tmp/date.out

Теперь исследуйте вывод с:

$ tail -f /tmp/date.out

После выполнения этого, чтобы гарантировать, что crontab работает, можно работать фактические скрипты, которые Вы хотите запустить.

пользователь www-data в то время как не имеют тот же путь как Вы, таким образом, много команд, которые работают из Вашей учетной записи, не будет работать от www-data пользователь, если Вы конкретно не устанавливаете путь для того сценария. путь www-данных по умолчанию содержит только: PATH=/usr/bin:/bin

Можно сделать это путем экспорта списка трактов, затем размещения его в список трактов для сценария.

Можно сделать это с:

$ echo $PATH > ~/mypath.txt

Теперь добавьте текст ~/mypath.txt к верхней части Вашего сценария как:

Ваш сценарий:

#!/bin/bash

export PATH=$PATH:/home/users/l/j/ljames/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
# rest of your script code here.

Можно точно настроить путь путем удаления некоторых очевидных объектов, что Вы не будете использовать такой в качестве в случае моего примера:

/home/users/l/j/ljames/bin
/usr/games
/usr/local/games
/snap/bin

Это оставило бы строку пути со сценария с:

#!/bin/bash

export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# ... rest of your script code here

Сценарий PHP выполняется в кроне

php сценарий тестирования (/home/users/l/j/ljames/test.php)

#!/usr/bin/php

<?php
        $string=`date`;
        print "Output from PHP script: $string";
?>

php crontab запись

* * * * * php /home/users/l/j/ljames/test.php >> /tmp/date.out

Можно исследовать вывод с:

$ tail -f /tmp/date.out
Output from PHP script: Fri Feb  3 14:46:01 EST 2017

Output from PHP script: Fri Feb  3 14:47:01 EST 2017

Output from PHP script: Fri Feb  3 14:48:01 EST 2017

Вывод проверяет, что crontab выполнит Ваши сценарии PHP. Это показывает, что преступник является фактическим сценарием, который должен был бы быть отлажен для функционирования правильно за пределами крона сначала. Вероятный преступник был бы список трактов среды.

Примечание:
Ваш sytsem с Вашими скриптами веб-сервера, запущенными как пользователь www-data будет более безопасным, чем если бы они были выполнены как Вы или корень. Если бы они были, поскольку Вы, сценарий имел бы доступ к каждой вещи, к которой у Вас есть доступ и если бы Ваш веб-сервер был поставлен под угрозу, то это могло бы даже иметь корневой доступ с sudo. Выполнение Ваших сценариев веб-сервера как www-data, поставленный под угрозу сервер только сможет получить доступ к Вашему серверу. Который, если сохранено, было бы легче зафиксировать, чем должным быть иметь дело с Вашим целым сервером.

4
ответ дан 2 December 2019 в 01:36

Для пользователя www-data для надлежащего выполнения задания крона этот файл должен существовать:

/var/spool/cron/crontabs/www-data

с полномочиями:

-rw------- 1 www-data crontab

Это должно достигнуть, который (упомянул выше):

sudo crontab -u www-data -e ... добавьте, в чем Вы нуждаетесь.

Если полномочия не корректны, используйте:

sudo chmod 600 /var/spool/cron/crontabs/www-data
sudo chown www-data:crontab /var/spool/cron/crontabs/www-data

Редактирование этого файла непосредственно осуждено, даже если это работает, потому что cron любит управлять собой.

0
ответ дан 2 December 2019 в 01:36

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

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