Как запустить команду от имени пользователя root от cronjob? - PullRequest
21 голосов
/ 25 августа 2009

Кажется, я застрял между ограничением NFS и ограничением Cron.

Итак, у меня есть root cron (на RHEL5), выполняющий скрипт оболочки, который, помимо прочего, должен rsync для некоторых файлов при монтировании NFS. А файлы на монтировании NFS принадлежат пользователю apache с режимом 700, поэтому только пользователь apache может выполнить команду rsync - запуск от имени root приводит к ошибке разрешения (NFS, как представляется, редкий случай, когда пользователь root не всесильный?)

Когда я просто хочу запустить rsync вручную, я могу использовать "sudo -u apache rsync ..." Но sudo не работает в cron - он говорит: "sudo: извините, у вас должен быть tty для запуска sudo ».

Я не хочу запускать весь скрипт как apache (то есть из crontab apache), потому что другие части скрипта требуют root - это всего лишь одна команда, которая должна запускаться как apache. И я действительно предпочел бы не менять режим файлов, поскольку это повлечет за собой значительные изменения в других приложениях.

Должен быть способ выполнить "sudo -u apache" из cron ??

спасибо! грабят

Ответы [ 5 ]

17 голосов
/ 18 февраля 2011

su --shell = / bin / bash --session-command = "/ path / to / command -argument = что-то" username &

У меня работает (CentOS)

7 голосов
/ 25 августа 2009

Используйте su вместо sudo:

su -c "rsync ..." apache
3 голосов
/ 10 ноября 2011

По умолчанию в RHEL sudo не разрешено для процессов без терминала (tty). Это установлено в /etc/sudoers.

Вы можете разрешить tty-less sudo для определенных пользователей с помощью этих инструкций:

https://serverfault.com/questions/111064/sudoers-how-to-disable-requiretty-per-user

1 голос
/ 26 октября 2012

Если вы хотите, чтобы вы постоянно включали apache:

chsh apache

это позволяет изменить оболочку для пользователя

1 голос
/ 27 марта 2010

поместите его в / etc / crontab и укажите apache вместо root в пользовательском поле

...