我需要使用PHP at
命令中运行unix。 怎么可能做到这一点? curl
不是我正在做的select。 如果我试图运行它简单的exec('at')
它没有回应。 但是,如果我使用ssh运行它,它工作正常。 所以我想这是权限/path问题。
我想你有一些真正at
命令行,因为只有at
是无效的语法。 你的命令应该包含一些参数。
但是,也许你的问题是,不在$PATH
。 尝试使用通常为/usr/bin/at
的完整路径运行。 检查这与whereis at
。
请记住“at”从stdin接收它的脚本,所以你需要使用popen()打开一条到at命令的管道。 将您的命令写入该管道并关闭它。 在打开管道时,您希望“at”运行命令的时间应该是命令行的一部分。
<?php $r = popen('/usr/bin/at noon'); fwrite($r,"ls -l"); pclose($r); ?>
运行cat /etc/passwd
来检查shell是否使用apache用户,如果是bin/false
你不能从apache用户运行'at'。
在运行shell命令之前,我通过在bin / bash中导出shell来找到这个问题的技巧,如下所示:
export SHELL = / bin / bash; echo“shell命令”| 在:时间::日期:
并将其作为php exec()函数的参数传递。
通过这种方式,您将能够从apache运行“at”调度。
原因是在文件“/etc/at.deny”中。 扫描文件,你将会看到一行“www-data”,这是apache2正在运行的用户(在我的情况下是文件的最后一行)。 这会拒绝用户“www-data”运行“at”命令。 只需从/etc/at.deny中删除该行即可。 然后你可以使用“shell_exec”运行“at”。
希望能帮助到你。