0

我需要一个调度程序(仅限一次操作)用于我正在编码的站点(在 php 中),我有两个想法:

1- 使用 crontab 运行 php 脚本,并针对计划操作的数据库进行验证,并执行比当前时间更早的操作。

2-使用“at”命令安排各种任务。

第二个选项似乎更好更简单,所以这就是我想要做的。但是,我还没有找到一种方法来告诉“at”使用 PHP 解释器运行命令,到目前为止,我一直在创建一个 .sh 脚本,其中包含一个命令,即通过php解释器。这远非最佳设置,我希望我可以直接通过“at”执行 php 代码,例如:

at -e php -f /path/to/phpscript time

可能吗?我没有发现任何关于在 man 或 online 中使用 bash 以外的环境的信息。

4

2 回答 2

2

您可以在前面phpscript添加一个#!/usr/bin/php(或存储您的 php 脚本的任何位置)并使其/path/to/phpscript可执行。这正是#!语法的用途。

很明显,你phpscript会看起来像这样:

#!/usr/bin/php

...your code goes here
于 2012-08-25T18:00:55.767 回答
0

您指定的命令at由 执行/bin/sh,但 sh 可以调用任何命令,直接执行或由任何指定的解释器执行。

以下适用于带有 bash shell 的 Ubuntu 12.04 系统:

$ cat hello.php
#!/usr/bin/php
<?php
    echo "Hello, PHP\n";
?>
$ echo "$PWD/hello.php > hello.php.out" | at 16:11
warning: commands will be executed using /bin/sh
job 4 at Sat Aug 25 16:11:00 2012
$ date
Sat Aug 25 16:11:05 PDT 2012
$ cat hello.php.out
Hello, PHP
$ 

在某些情况下,您必须做一些额外的工作才能正确设置环境变量(对于这种简单的情况,这不是必需的)。引用手册页:

对于atbatch ,从标准输入或使用-f选项指定的文件读取命令并执行。工作目录、环境(除了变量BASH_VERSINFODISPLAYEUIDGROUPSSHELLOPTSTERMUID_)和 umask 从调用时起保留。

由于at当前作为 setuid 程序实现,其他环境变量(例如LD_LIBRARY_PATHLD_PRELOAD)也不会导出。这在未来可能会改变。作为一种解决方法,请在您的工作中明确设置这些变量。

于 2012-08-25T23:18:29.987 回答