php - 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 中删除它们
解决方案
没有太多细节可以继续,但我将您的注意力引向以下要求at
:
调用时 SHELL 环境变量的值将决定使用哪个 shell 来执行 at 作业命令。如果调用 at 时未设置 SHELL,则将使用用户的登录 shell;否则,如果在调用 at 时设置了 SHELL,则它必须包含 shell 解释器可执行文件的路径,该可执行文件将用于在指定时间运行命令。
您的 Web 服务器用户是否定义了登录 shell?getent passwd
或grep /etc/passwd
确定。无论如何,我建议将 shell 设置为在命令本身中使用,以防止有人更改调用用户的默认 shell 的问题。
如果这不是问题,我们可能需要更多细节。
推荐阅读
- wordpress - 如果用户在没有被管理员接受的情况下无法购买商品,如何创建 woo-commerce 商店
- twitter-bootstrap - Bootstrap - 内容居中
- javascript - 排序与 if else if 在javascript中选择哪一个?
- spring - 如何通过谷歌实现授权?
- vba - 在 PowerPoint 中通过 VBA 更改链接的 Excel 文件
- node.js - 如何在 OpenCV 相机中禁用缓冲区?
- scala - 无法反序列化由 scalapb 编码的 protobuf
- sql-server - 列存储索引 - 检查已删除的行
- html - HTML CSS 居中整个站点
- android - 如何为 YouTubeView 设置访问令牌?