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


32

Моя ЛАМПА настроена на работу, 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каждый раз, когда файл воссоздается.

Спасибо.


Обратите внимание, что некоторые скрипты crontab, которые выполняются как www-данные (например, for awstatsили php5sessionclean), расположены в /etc/cron.*каталогах и, следовательно, не видны сквозь crontab -e(даже при указании пользовательских www-данных ).
Скиппи ле Гран Гуру

Ответы:


40

Вы можете записать свою запись в системный 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

1
фактически второй вариант не работает на большинстве версий Ubuntu
user123

Второй вариант у меня работает на 12.04LTS. Может быть, это не в более поздних версиях?
mivk

1
второй вариант не работает на 14.04
dgoosens

Для простоты управления, линия также может быть помещена в отдельном файле в /etc/cron.dс описательным именем, например , /etc/cron.d/artisan.
fkraiem

2
Для второго варианта попробуйте это вместоsudo su -c "crontab -e" www-data -s /bin/bash
Lunfel

51

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

sudo crontab -u www-data -e

это работает 14.04
dgoosens

3

Для запуска 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
tristanbailey

На это ранее отвечал правильно и более кратко командир кода выше 4 лет назад. Вы пропустили использование "sudo". и бросил незапрошенную информацию относительно формата строки cron.
HörmannHH

@RichieHH, зачем мне добавлять sudo? Кто сказал, что пользователь еще не запущен от имени пользователя root? Любой, кто использует эту команду, должен обладать достаточными знаниями, чтобы знать, что, если ему нужно выполнить команду с привилегиями, он должен будет запускать ее с помощью sudo, иначе лучше не трогать ... а вы говорите более кратко ...? Code
Commander

... если вы такой умный, вам лучше начать давать ответы, а не критиковать работу других, может быть, тогда вы начнете получать некоторую репутацию
spacebiker

-1

Я хотел бы добавить другой подход. Как упоминали другие люди, 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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.