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

时间:2011-04-01 13:52:15

标签: php linux unix

我需要使用PHP运行unix at命令。怎么可能这样做? curl不是我正在做的选择。如果我尝试仅仅exec('at')运行它,则不会给出任何响应。虽然,如果我使用ssh运行它,它工作正常。所以我猜这是权限/路径问题。

4 个答案:

答案 0 :(得分:3)

我想你有一些真正的at命令行,因为只有at是无效的语法。你的命令应该包含一些参数。

但是,您的问题可能是at不在$PATH。尝试使用通常为/usr/bin/at的完整路径运行。请使用whereis at

进行检查

答案 1 :(得分:3)

请记住“at”从stdin接收其脚本,因此您需要使用popen()打开at命令的管道。将命令写入该管道并关闭它。当您打开管道时,您希望“at”运行命令的时间应该是命令行的一部分。

<?php
$r = popen('/usr/bin/at noon');
fwrite($r,"ls -l");
pclose($r);
?>

答案 2 :(得分:1)

运行cat /etc/passwd检查whitch shell是否正在使用apache用户,如果bin/false你可以从apache用户运行'at'。

我在运行shell命令之前通过bin / bash导出shell找到了这个问题的技巧,如下所示:

  

export SHELL = / bin / bash; echo“shell命令”| at:time :: date:

并将其作为php exec()函数的参数传递。

通过这种方式,您将能够从apache运行“at”计划。

答案 3 :(得分:1)

原因在于文件“/etc/at.deny”。扫描文件,你会看到一行“www-data”,它是运行apache2的用户(在我的情况下是文件的最后一行)。这会拒绝用户“www-data”运行“at”命令。只需从/etc/at.deny删除该行。然后你可以使用“shell_exec”运行“at”。

希望它有所帮助。