我正在尝试运行 cron 作业来执行 PHP 脚本。我尝试执行的 cron 命令是
/usr/local/bin/php -q /home/domain/public_html/apps/app.php >> /home/domain/public_html/logs/cron.log
。运行作业时,出现以下错误:
Fatal error: Uncaught Google\Cloud\Core\Exception\GoogleException: Given keyfile path bigquery-keyfile.json does not exist in /home/domain/public_html/apps/vendor/google/cloud-core/src/ClientTrait.php:130
Stack trace:
#0 /home/domain/public_html/apps/vendor/google/cloud-core/src/ClientTrait.php(96): Google\Cloud\BigQuery\BigQueryClient->getKeyFile(Array)
#1 /home/domain/public_html/apps/vendor/google/cloud-bigquery/src/BigQueryClient.php(144): Google\Cloud\BigQuery\BigQueryClient->configureAuthentication(Array)
#2 /home/domain/public_html/apps/app.php(16): Google\Cloud\BigQuery\BigQueryClient->__construct(Array)
#3 {main}
thrown in /home/domain/public_html/apps/vendor/google/cloud-core/src/ClientTrait.php on line 130
我确实注意到,如果我在终端中手动输入 cron 命令,我会得到相同的错误,但是如果我将目录更改为
/home/domain/public_html/apps/
并运行 php app.php >> /home/domain/public_html/logs/cron.log
甚至 /usr/local/bin/php app.php >> /home/domain/public_html/logs/cron.log
,脚本将运行没有任何问题.
bigquery-keyfile.json
文件与 app.php
位于同一目录中。不知道我错过了什么。我一直在到处寻找并仍在继续。任何意见是极大的赞赏。预先感谢您。
“如果我要更改目录”-您已经回答了自己的问题。您正在运行的代码显然使用相对路径引用了相关文件,即假设它正在应用程序目录中运行。这并不罕见。 您可以考虑更新代码并尝试使用完全限定的路径引用该文件,或者在我看来,更好的解决方案是从它期望运行的目录运行它。将您的 cron 命令更新为如下所示:
cd /home/domain/public_html/apps/ && /usr/local/bin/php -q app.php >> ./logs/cron.log