我一直在尝试使用php中的shell_exec()函数执行脚本:
我写了以下几行代码:
$command = "bash /path/to/my/script/ funciton_name() 2>&1";
echo shell_exec($command);
在shell脚本中我正在做:
sudo rsync -avvc /source/path /destination/path
在浏览器上执行此操作时,收到以下错误消息:
sudo: no tty present and no askpass program specified
当我在服务器上执行相同的shell脚本时,它执行正常。
当我在这个论坛上发布类似的问题时,我意识到我必须在我的服务器上添加NOPASSWD行,我发现它已经按以下格式添加:
User_Alias NOBODY=nobody,apache
NOBODY ALL=(ALL) NOPASSWD : /path/to/my/script
当我这样做时:
echo shell_exec("whois");
我得到的输出为:
apache
克服这个问题的任何帮助都会有很大的帮助。
答案 0 :(得分:0)
sudo
将要求TTY,即使您已将其设置为无密码。但是作为@Cfreak pointed out,通过设置正确的safer来避免sudo
会更好(更简单的和 access rights)(在继续之前阅读它)首先。
rsync
本身不需要在明智配置的* nix安装上拥有root权限。要验证这一点,您可以检查type -a rsync
是否打印出rsync is aliased to `sudo rsync'
之类的奇怪内容,而ls -l $(which rsync)
打印出合理的权限(每个人至少rx
)。< / p>