使用exec()来运行unix`at`命令

我需要使用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”。

希望能帮助到你。