【问题标题】:Execute at command from php page with command line input使用命令行输入从 php 页面执行命令
【发布时间】:2016-08-31 10:00:55
【问题描述】:

我想在 Linux 环境中从 PHP shell_script 执行以下命令。

shell_exec('at 12:39 <<< "mkdir newfolder"');

我已尝试使用 PHP 的所有方法来执行此脚本,但它不起作用。 在终端中,当我运行at 12:39 &lt;&lt;&lt; "mkdir newfolder" 时,它正在执行并且任务正在调度。但是当我尝试使用 shell_exec 在 php 中运行相同的脚本时,它不起作用。

您可以在键入at 12:39 时了解问题,它会显示您输入并按Ctrl+d 完成执行。在这里我使用&lt;&lt;&lt;

谁能建议我如何从 PHP 执行这个脚本?

【问题讨论】:

    标签: php task scheduling at-job


    【解决方案1】:

    shell_exec 默认使用 dash shell 系统:确保运行 php -r 'echo shell_exec("echo $0");' 会输出 'sh' ,并且 Dash 没有

    相反,您可以强制使用 Bash 并执行以下操作:

    shell_exec('/bin/bash -c \'at 12:39 <<< "mkdir newfolder"\'');
    

    希望这会有所帮助。

    【讨论】:

    • 感谢 Yacine 的回答,您提到的脚本返回 false 并且任务也没有调度。你能试试这个并给我一个答案吗?
    • 如果我在终端运行这个php -r 'echo shell_exec("echo $0");' 那么它工作正常但是当我使用shell_exec shell_exec('/bin/bash -c \'at 12:39 &lt;&lt;&lt; "mkdir newfolder"\''); 运行它不工作
    • 您是使用 php 命令还是从网络服务器运行脚本?
    • 如果它来自网络服务器,则可能是权限问题,因为 www-data 用户没有运行“at”命令的权限(如果有,请参阅文件 /etc/at.deny包含 www-data 条目)。
    • 是的,有一个名为 at.deny 的文件,但它没有用文本编辑器打开。您能否建议我如何打开以及如何编辑此文件,以便我可以在服务器中执行此命令。
    最近更新 更多