首页 > 解决方案 > PHP(Apache) 不执行 BASH 命令 (At + Wget)

问题描述

所以,伙计们,我有以下代码:

<?php
  $url  = "http://example.com/filetorun.php";
  $time = date('g:i A d.m.Y', $res['sometime']); 
  echo `echo "wget --spider {$url}" | at -M {$time}`;
?>

主要思想是在特定时间获取一些url,为我执行一些有用的操作。

终端会发生什么?

当我运行这个 bash 代码时。它给我这样的输出效果很好:

warning: commands will be executed using /bin/sh
job 59 at Mon Jan 13 17:12:00 2020

当我运行我的 php 脚本时,/var/log/apache2/error.log 会发生什么?

它得到这个输出。

atq怎么了?

只有当我通过终端创建作业时,我才能在那里看到作业。当我从 php 脚本创建它时,我不能这样做。

我试图做什么?

我将用户添加到 /etc/at.allow 并从 /etc/at.deny 中删除它们

标签: phplinuxapacheubuntuat-job

解决方案


没有太多细节可以继续,但我将您的注意力引向以下要求at

调用时 SHELL 环境变量的值将决定使用哪个 shell 来执行 at 作业命令。如果调用 at 时未设置 SHELL,则将使用用户的登录 shell;否则,如果在调用 at 时设置了 SHELL,则它必须包含 shell 解释器可执行文件的路径,该可执行文件将用于在指定时间运行命令。

您的 Web 服务器用户是否定义了登录 shell?getent passwdgrep /etc/passwd确定。无论如何,我建议将 shell 设置为在命令本身中使用,以防止有人更改调用用户的默认 shell 的问题。

如果这不是问题,我们可能需要更多细节。


推荐阅读