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

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

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

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

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

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

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

Спасибо.

32
задан 15 December 2017 в 12:24

4 ответа

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

sudo crontab -u www-data -e
0
ответ дан 15 December 2017 в 12:24

Вы можете записать свою запись в системный 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
0
ответ дан 15 December 2017 в 12:24

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

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

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

sudo crontab -e 

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

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

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

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

0
ответ дан 15 December 2017 в 12:24

Для выполнения 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, то Вы рискнули бы сдувать свой весь crontab.

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

crontab -u www-data -l
3
ответ дан 15 December 2017 в 12:24

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

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