从cPanel Crontab调用/usr/bin/php总是给出而不是cgi-fcgi



我正在使用这个/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

所以有两件事需要注意。

  1. 如果未指定可执行文件的绝对路径,则必须考虑$PATH环境变量(这可能因用户而异)。
  2. 指定绝对路径时,请确保首先检查它是否是所需的可执行文件。不要盲目地认为它是基于惯例的。它可能在每个系统上都不一样。

最新更新