使用shell脚本无法正常运行mkdir
我创建了一个文件test.sh,如下所示:
#!/bin/sh mkdir /testDir 如果我在命令行上运行脚本,例如:sudo /path/to/test.sh,它会成功创建目录. 我在visudo中添加了这样的sudo权限: www-data ALL=NOPASSWD: /path/to/test.sh 我在.php文件中运行这样的脚本: shell_exec('sh /path/to/test.sh'); 但是没有创建目录! 我究竟做错了什么?! 正确的用户sudo权限? 当我在php文件上运行shell_exec(‘whoami’)时,我得到: www-data 正确的PHP脚本路径? 我通过添加一个echo语句来测试shell脚本,如: #!/bin/sh mkdir /testDir echo "hello" 当我运行.php命令时: echo shell_exec('sh /path/to/test.sh'); .php页面返回 ???你好 我也试过test.sh: output=$( mkdir /testDir ) echo "$output" 但没有任何回报 更新 如果我把它添加到visudo: www-data ALL=(ALL) NOPASSWD: ALL 有用!!但当我这样做时: www-data ALL=(ALL) NOPASSWD: /path/to/test.sh 它不……正如你所知道的那样. 通过将PHP更改为,我找到了一种很好的调试方法 echo shell_exec('sh /path/to/test.sh 2>&1 1> /dev/null'); 并返回错误:
所以我试过了: >添加默认值:www-data!requiretty到visudo但没有运气!!!! 我不知道这个requiretty,因为它似乎不在我的ubuntu系统的任何地方.在visudo中没有提到过一次? 我花了太长时间! 有人能告诉我,如果我这样做,我会遇到什么问题: www-data ALL=(ALL) NOPASSWD: ALL ? 解决方法
如果
www-data ALL=(ALL) NOPASSWD: ALL 有效,但是 www-data ALL=(ALL) NOPASSWD: /path/to/test.sh 没有,那么显然执行的命令与/path/to/test.sh不匹配. sh /path/to/test.sh 你在调用sh!使用/path/to/test.sh作为第一个参数,但仍然如此. shell_exec('/path/to/test.sh'); 或者相应地更新你的sudoers文件(注意sh的完整路径): www-data ALL=(ALL) NOPASSWD: /bin/sh /path/to/test.sh (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Angular 2:共享相同解析器的兄弟姐妹子路由
- 更新为angular 5 throws @ angular/compiler-cli的版本需要
- twitter-bootstrap – Angular 2不导入Bootstrap css
- Scala – 如何使用反射api获取字段的’type’
- Traefik正在使用traefik.enable = true设置忽略docker
- shell判断变量是否为空
- j2me 调用 webservice
- 如何限制vim的%功能?
- Play Framework Scala:带有可选参数的路由在控制器子包中不
- 一个动态调用webservices的类分享给大家 含有 soapheader