我正在使用这个/usr/bin/php -q /home/user/public_html/cron.php
而我是 cron.php 文件的前面var_dump(PHP_SAPI);
当我从 HTTP 调用以及从 SSH crontab 调用时,它给了我cgi-fcgi
我看到了这个答案 https://stackoverflow.com/a/19917512/1377781 我将 cron 命令更改为/usr/bin/php5-cli -q /home/user/public_html/cron.php
它工作得很好,对吗?它适用于所有主机吗?和环境?
> 不一定,不。
不能保证每个主机或环境都具有相同的 PHP 二进制路径和名称。就像我可以在 Windows 系统上将MSWord.exe
重命名为foobar.exe
一样,我可以在 *nix 系统上将我的 PHP 二进制重命名为foobar
,都是一样的。
通常(但并非总是)您的二进制文件存储在 *nix 系统上的/usr/bin
和/usr/local/bin
中。所以你可以在那里查看(比如ls -lah /usr/bin/php*
或ls -lah /usr/local/bin/php*
)并用/path/to/binary/<binary name> -v
检查每个二进制文件。
例如,在我的本地设置中,我有 20 个不同的 PHP 二进制文件,用于/usr/bin
中的 5 个不同的 SAPI,/usr/local/bin
中还有一些,/etc/php
中还有一些。
sherif@sdev:~$ ls/usr/bin/php*/usr/bin/php ->/etc/alternatives/php/usr/bin/phpize ->/etc/alternatives/phpize/usr/bin/phpize55/usr/bin/php55-mod ->/usr/lib/apache2/modules/libphp55.so/usr/bin/php55-fpm/usr/bin/php55-cli/usr/bin/php55-CGI/usr/bin/php55dbg/usr/bin/phpize56/usr/bin/php56-mod ->/usr/lib/apache2/modules/libphp56.so/usr/bin/php56-fpm/usr/bin/php56-cli/usr/bin/php56-cgi/usr/bin/php56dbg/usr/bin/phpize7/usr/bin/php7-mod ->/usr/lib/apache2/modules/libphp7.so/usr/bin/php7-fpm/usr/bin/php7-cli/usr/bin/php7-cgi/usr/bin/php7dbg/usr/bin/phpize71/usr/bin/php71-mod ->/usr/lib/apache2/modules/libphp71.so/usr/bin/php71-fpm/usr/bin/php71-cli/usr/bin/php71-cgi/usr/bin/php71dbg
所以有两件事需要注意。
- 如果未指定可执行文件的绝对路径,则必须考虑
$PATH
环境变量(这可能因用户而异)。 - 指定绝对路径时,请确保首先检查它是否是所需的可执行文件。不要盲目地认为它是基于惯例的。它可能在每个系统上都不一样。