Как указать в 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
102   5  

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 в одном месте.

Я получаю следующее сообщение об ошибке для пользователя хрона:

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

    Ничего не найдено.

Добавить ответ:
Отменить.