Как указать в crontab каким пользователем запускать скрипт? - PullRequest
160 голосов
/ 12 декабря 2011

У меня есть несколько заданий crontab, которые запускаются под root, но это вызывает у меня некоторые проблемы.Например, все папки, созданные в процессе этого задания cron, находятся под пользователем root и группой root.Как я могу заставить его работать под пользовательскими www-данными и группировать www-данные, чтобы при запуске сценариев с моего веб-сайта я мог манипулировать этими папками и файлами?

Мой сервер работает в Ubuntu.
Текущий crontabработа:

*/1 * * * * php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

Ответы [ 5 ]

308 голосов
/ 12 декабря 2011

Вместо создания crontab для запуска от имени пользователя root, создайте crontab для пользователя, для которого вы хотите запустить скрипт. В вашем случае crontab -u www-data -e отредактирует crontab для пользователя www-data. Просто поместите туда свою полную команду и удалите ее из crontab пользователя root.

44 голосов
/ 12 декабря 2011

РЕДАКТИРОВАТЬ: обратите внимание, что этот метод не будет работать с crontab -e, но работает, только если вы редактируете / etc / crontab напрямую.В противном случае вы можете получить ошибку типа /bin/sh: www-data: command not found

Непосредственно перед именем программы:

*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1
14 голосов
/ 05 августа 2013

Поскольку вы используете Ubuntu, ваш системный crontab находится по адресу /etc/crontab.

Как пользователь root (или использующий sudo), вы можете просто отредактировать этот файл и указать пользователя, который должен выполнить эту команду. Вот формат записей в системном crontab и как вы должны ввести свою команду:

# m h dom mon dow user  command
*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

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

9 голосов
/ 20 сентября 2013

Вы также можете попробовать использовать runuser (от имени пользователя root) для запуска команды от имени другого пользователя

*/1 * * * * runuser php5 \
            --command="/var/www/web/includes/crontab/queue_process.php \
                       >> /var/www/web/includes/crontab/queue.log 2>&1"

См. Также: man runuser

8 голосов
/ 12 мая 2013

Предложение Майка звучит как "правильный путь".Я наткнулся на этот поток, желая указать, что пользователь должен запускать vncserver при перезагрузке, и хотел сохранить все мои задания cron в одном месте.

Я получил следующую ошибку для cron VNC:

vncserver: The USER environment variable is not set. E.g.:

В моем случае я смог использовать sudo, чтобы указать, кому запускать задачу.

@reboot sudo -u [someone] vncserver ...
...