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