Як запустити crontab як користувач: www-data?


32

Мій 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кожен раз відтворюється файл.

Спасибі.


Зауважте, що деякі сценарії кротобудів, які виконуються як www-дані (наприклад, для awstatsабо php5sessionclean), знаходяться в /etc/cron.*каталогах і, таким чином, не відображаються наскрізь crontab -e(навіть при вказівці www-даних користувача ).
Skippy le Grand Gourou

Відповіді:


40

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

Ваш рядок стане:

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

Або ви можете редагувати кронтаб користувача www-data користувача за допомогою 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-дані, ви можете використовувати таку команду:

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 -e щойно написав прямо на ваш фактичний crontab, тоді ви ризикуєте видути весь ваш crontab.

Щоб перевірити, чи працює ваш cronjob, ви можете перевірити журнали cron. як правило, в /var/log/cron.log або виконуючи таку команду:

crontab -u www-data -l

Цей працював для мене на Ubuntu
tristanbailey

На це раніше відповів правильно і більш стисло командир коду вище 4 років. Ви пропустили використання "судо". і кинув незапрошену інформацію щодо формату лінії крона.
HörmannHH

@ RichieHH, чому я повинен додати судо? Хто сказав, що користувач вже не працює як root? Кожен, хто використовує цю команду, повинен мати достатньо знань, щоб знати, що якщо йому потрібно запустити команду з привілеями, доведеться запустити її з sudo, інакше краще не чіпайте .. і ви скажете більш лаконічно ...? Командир коду просто набрав команду, але не дав більше інформації
spacebiker

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

-1

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

У будь-якому випадку, в нашій компанії нам подобається, щоб усі сервісні роботи на сервері були легко доступними, тому ви нічого не пропускаєте. У той же час ми не хочемо запускати все (нічого насправді!) Як корінь.

Тому ми біжимо

sudo crontab -e 

Як ви зазвичай робите, і тоді ми визначаємо команду як

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

Це виконає / path / to / command як www-data, зберігаючи cronjob у кореневому файлі cronjobs (і це завжди буде працювати правильно). Приємна перевага - мати можливість записувати журнали як корінь (для максимальної безпеки) за допомогою труб.

Зауважте, що ми передаємо нашу кращу оболонку, це також може бути / bin / sh для більш простої оболонки (ми просто любимо повні можливості bash). У Www-даних не вказана оболонка, тож ви отримаєте помилки без неї. Зазвичай cron виконує завдання лише з / bin / sh.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.