Как запустить crontab в качестве пользователя: www-data?

22

Моя LAMP настроена на работу как user:www-data , и все файлы и папки создаются с такими разрешениями.

У меня есть настройка для crontab как user @ ubuntu.

Итак, я делаю crontab -e и использую эту команду:

*/5 * * * * php /var/www/public/voto_m/artisan top >/dev/null 2>&1

В основном эта команда просто создает файл кеша в определенном месте (никаких проблем с этим), но этот файл кеша создается с пользователем: разрешения пользователя не соответствуют user:www-data .

Как я могу сделать так, чтобы он по умолчанию создавал файл с разрешениями user:www-data ?
Я не могу идти и chown каждый раз, когда файл воссоздается.

Спасибо.

    
задан arma 15.09.2012 в 19:44
источник

4 ответа

28

Вы можете написать свою запись в систему crontab /etc/crontab , которая принимает дополнительный аргумент, указывающий, что пользователь должен запускать как (обычно root, но может быть www-data).

Ваша строка будет выглядеть следующим образом:

*/5 * * * * www-data php /var/www/public/voto_m/artisan top >/dev/null 2>&1

Или вы можете отредактировать crontab пользовательских www-данных с помощью su :

sudo su -c "crontab -e" www-data
    
ответ дан mivk 01.11.2012 в 13:44
источник
39

Вы также можете запустить crontab с аргументом -u для редактирования crontab для определенного пользователя:

sudo crontab -u www-data -e
    
ответ дан Code Commander 07.09.2013 в 19:09
3

Для запуска crontab в качестве пользовательских www-данных вы можете использовать следующую команду:

crontab -u www-data -e

Затем вы пишете строку, например, для запуска php-файла каждые 15 минут:

*/15  *  *  *  * php -f /path_to_cron/cron.php

При сохранении его вам будет задан редактор:

File Name to Write: /tmp/crontab.HMpG7V 

Сохраните его там, не беспокойтесь. crontab -e открывает файл в / tmp вместо фактического crontab, чтобы он мог проверить ваш новый crontab за ошибки и не дать вам переписать ваш фактический crontab с этими ошибками. Если ошибок нет, ваш фактический crontab будет обновлен. Если crontab -e просто написал прямо к вашему фактическому crontab, тогда вы рискуете сдуть весь свой кронтаб.

Чтобы проверить, что ваш cronjob работает, вы можете проверить журналы cron. обычно в /var/log/cron.log или выполнение следующей команды:

crontab -u www-data -l
    
ответ дан spacebiker 22.07.2016 в 10:06
-1

Я хотел бы добавить еще один подход. Как отмечали другие люди, Ubuntu (16.04 здесь) и www-data crontab кажется ненадежным (может быть, это вещь безопасности?).

В любом случае, в нашей компании нам нравится, когда все кроны на сервере легко доступны, поэтому вы ничего не пропустите. В то же время мы не хотим запускать все (что-то действительно!) Как root.

Поэтому мы запускаем

sudo crontab -e 

Как вы обычно это делаете, а затем мы укажем команду как

* * * * * /bin/su - www-data -s /bin/bash -c '/path/to/command'

Это будет выполняться / path / to / command в виде www-данных, сохраняя cronjob в корневом файле cronjobs (и это всегда будет работать правильно). Это имеет приятное преимущество в том, что вы можете писать лог-файлы как root (для максимальной безопасности) с помощью труб.

Обратите внимание, что мы передаем нашу предпочтительную оболочку, это также может быть / bin / sh для более простой оболочки (нам просто нравятся полные возможности bash). Www-data не имеет оболочки, поэтому вы получите ошибки без нее. Обычно cron запускает задания только с / bin / sh.     

ответ дан Henrik 15.12.2017 в 09:23