22

我似乎陷入了 NFS 限制和 Cron 限制之间。

所以我有 root cron(在 RHEL5 上)运行一个 shell 脚本,除其他外,需要通过 NFS 挂载 rsync 一些文件。并且 NFS 挂载上的文件由模式 700 的 apache 用户拥有,因此只有 apache 用户可以运行 rsync 命令——以 root 身份运行会产生权限错误(NFS 显然是一种罕见的情况,其中 root 用户是不是万能的?)

当我只想手动运行 rsync 时,我可以使用“sudo -u apache rsync ...”但是 sudo 在 cron 中没有工作——它说“sudo:抱歉,你必须有一个 tty 才能运行 sudo”。

我不想将整个脚本作为 apache 运行(即来自 apache 的 crontab),因为脚本的其他部分确实需要 root ——这只是一个需要作为 apache 运行的命令。而且我真的不希望更改文件的模式,因为这将涉及对其他应用程序的重大更改。

一定有办法从cron完成“sudo -u apache”??

谢谢!抢

4

5 回答 5

17

su --shell=/bin/bash --session-command="/path/to/command -argument=something" 用户名&

为我工作(CentOS)

于 2011-02-18T03:42:18.807 回答
8

使用su代替sudo

su -c "rsync ..." apache
于 2009-08-25T17:00:53.880 回答
3

默认情况下,在 RHEL 上,sudo不允许没有终端 (tty) 的进程使用。这是设置在/etc/sudoers.

sudo您可以使用以下说明允许特定用户使用tty-less :

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

于 2011-11-10T16:35:30.223 回答
2

如果你想永久让你像 apache 一样摆弄:

chsh apache

这允许您更改用户的外壳

于 2012-10-26T13:54:53.163 回答
1

将它放在 /etc/crontab 并在用户字段中指定 apache 而不是 root

于 2010-03-27T00:36:43.520 回答