Как указать в crontab, каким пользователем запускать скрипт?
У меня есть несколько заданий crontab, которые работают под root, но это дает мне некоторые проблемы. Например все папки, созданные в процессе этого задания находятся под пользователем root и группе root. Как я могу заставить его работать под пользователем www-data и группой www-data, чтобы при запуске скриптов с моего сайта я мог управлять этими папками и файлами?
мой сервер работает на Ubuntu.
Текущее задание crontab:
*/1 * * * * php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1
5 ответов
вместо создания crontab для запуска от имени пользователя root создайте crontab для пользователя, который хочет запустить сценарий. В твоем случае, crontab -u www-data -e
отредактирует crontab для пользователя www-data. Просто поместите туда свою полную команду и удалите ее из crontab пользователя root.
EDIT: обратите внимание, что этот метод не будет работать с 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
Так как вы используете 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
пользователь имеет к ним доступ.
предложение Майка звучит как "правильный путь". Я наткнулся на этот поток, желая указать пользователя для запуска vncserver
при перезагрузке и хотел сохранить все мои задания cron в одном месте.
Я получал следующую ошибку для VNC cron:
vncserver: The USER environment variable is not set. E.g.:
в моем случае я смог использовать sudo
чтобы указать, кто будет выполнять задачу как.
@reboot sudo -u [someone] vncserver ...
вы также можете попробовать использовать 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