Ответ 1
su --shell =/bin/ bash --session-command = "/path/to/command -argument = something" имя пользователя &
Работает для меня (CentOS)
Кажется, я застрял между ограничением NFS и ограничением Cron.
Итак, у меня есть root cron (на RHEL5), на котором запущена оболочка script, которая, помимо прочего, нуждается в rsync для некоторых файлов поверх монтирования NFS. И файлы на монте NFS принадлежат пользователю apache с режимом 700, поэтому только пользователь apache может запускать команду rsync - запуск с правами root приводит к ошибке разрешения (NFS - это редкий случай, по-видимому, где пользователь root не всемогущий?)
Когда я просто хочу запустить rsync вручную, я могу использовать "sudo -u apache rsync..." Но sudo no workie в cron - он говорит "sudo: извините, вы должны иметь tty для запуска sudo".
Я не хочу запускать весь script как apache (т.е. из apache crontab), потому что другие части script требуют root - это просто одна команда, которая должна запускаться как apache. И я бы предпочел не менять режим в файлах, так как это потребует значительных изменений в других приложениях.
Должен быть способ выполнить "sudo -u apache" из cron??
спасибо! грабят
su --shell =/bin/ bash --session-command = "/path/to/command -argument = something" имя пользователя &
Работает для меня (CentOS)
Используйте su
вместо sudo
:
su -c "rsync ..." apache
По умолчанию для RHEL sudo
не разрешено для процессов без терминала (tty). Это установлено в /etc/sudoers
.
Вы можете разрешить tty-less sudo
для конкретных пользователей с этими инструкциями:
https://serverfault.com/questions/111064/sudoers-how-to-disable-requiretty-per-user
поместите его в /etc/crontab и укажите apache вместо root в поле пользователя
Если вы хотите навсегда разрешить вам сражаться как apache:
chsh apache
это позволяет вам изменять оболочку для пользователя