Как запустить 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:www-data
разрешения.
Как сделать так, чтобы он по умолчанию создавал файл с user:www-data
разрешения?
Я не могу пойти и chown
каждый раз файл воссоздается.
Благодарю.
5 ответов
Вы можете написать свою запись в системе 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
Вы также можете запустить crontab с помощью -u
Аргумент для редактирования crontab для конкретного пользователя:
sudo crontab -u www-data -e
Для запуска crontab от имени пользователя www-data вы можете использовать следующую команду:
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 работает, вы можете проверить логи cron. обычно в /var/log/cron.log или выполняя следующую команду:
crontab -u www-data -l
Я хотел бы добавить другой подход. Как упоминали другие люди, 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.
Важно: у пользователя www-data нет прав на выполнение.
Итак: вам нужно su и добавить -s для запуска команды от имени пользователя www-data с оболочкой.
Пример для Ларавеля
* * * * * su www-data -s /bin/bash -c "/path_your_project/artisan schedule:run"