我正在尝试使用 PHP 脚本来创建at
作业,但是当执行作业时,似乎什么都没有发生。我尝试将所有错误输出到日志文件,但是没有成功。这显然是权限问题,因为当我将 apache 设置为以我的个人用户身份运行时,一切都正常。但是,当我直接从 PHP 执行 wget 时,一切都正常,因此似乎 apache 具有使用它的正确权限。问题似乎出在at
与 apache 结合使用时。因此,我需要找到一种方法来让 apache 以其自己的用户身份运行。
这是我正在使用的命令:
echo "wget -qO- http://example.com/" | at now + 1 minute 2>&1
有任何想法吗?
编辑:Apache 可以创建 at 作业,只是当它们执行时似乎什么都没有发生。
答案1
您是否检查过 apache 用户是否在 at.allow 文件中?根据手册页...
The /etc/at.allow and /etc/at.deny files determine which user can sub-
mit commands for later execution via at(1) or batch(1).
The format of the files is a list of usernames, one on each line.
Whitespace is not permitted.
The superuser may always use at.
If the file /etc/at.allow exists, only usernames mentioned in it are
allowed to use at.
If /etc/at.allow does not exist, /etc/at.deny is checked.
答案2
该问题与 cron 的问题类似:您的作业在最小环境中执行(想想 PATH=/bin:/usr/bin 和 2 或 3 个东西),并且没有任何内容附加到其标准输入和输出。
首先确保您的 Apache 帐户是一个可以工作的 shell(而不是/bin/false
),因为“at”将使用此 shell 来运行您的 jobspec。
然后尝试这个更具体的代码片段:
echo "/usr/bin/wget -qO- http://example.com/ >/tmp/example.com 2>/tmp/example.com.error" | at now + 1 minute