我正在尝试设置一个 cron 作业来每天运行一个 PHP 脚本,作为基于 Web 的预订系统的一部分。它已经在不同的 Apache 服务器上完美运行了几年,在 crontab 中使用它:
0 3 * * * wget -q -O /dev/null http://www.my_other_domain.org.uk/scheduled/my_script.php
Run Code Online (Sandbox Code Playgroud)
我刚刚在另一台 Apache 服务器上安装了该脚本,并且在通过浏览器调用时它可以正确运行。但是,当我尝试使用 cron 时,cron 守护进程会给出以下消息:
-: warning: setlocale: LC_ALL: cannot change locale (en_GB.utf-8)
-: wget: command not found
Run Code Online (Sandbox Code Playgroud)
当我尝试
0 3 * * * /usr/bin/env wget -q -O /dev/null http://www.mydomain.org.uk/scheduled/my_script.php
Run Code Online (Sandbox Code Playgroud)
我收到消息:
-: warning: setlocale: LC_ALL: cannot change locale (en_GB.utf-8)
-: /usr/bin/env: No such file or directory
Run Code Online (Sandbox Code Playgroud)
首先,我假设 setlocale 警告与问题无关吗?
我也试过
0 3 * * * /usr/bin/php /var/www/vhosts/mydomain/httpdocs/scheduled/my_script.php
Run Code Online (Sandbox Code Playgroud)
这使
-: /usr/bin/php: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我还尝试将 shebang 作为我脚本的第一行,并让 cron 使用完整路径调用它。cron 守护进程报告说没有 /[full_path]/my_script.php 这样的文件或目录。
尝试使用 curl 也好不到哪里去。
我没有对服务器的 shell 访问权限,我一直在通过 Plesk 控制面板设置 cron 作业。cron 作业似乎按计划运行。系统管理员为我做了以下事情:
#which php
/usr/bin/php
#which wget
/usr/bin/wget
#which curl
/usr/bin/curl
Run Code Online (Sandbox Code Playgroud)
这似乎确认命令位于正确的位置。
以上是一个简短的历史 - 我已经忘记了我尝试过的排列和组合,主要是由于阅读了这个论坛和其他论坛的建议。
谁能告诉我为什么 cron 作业无法找到命令并提出解决方案?
Chr*_*own 14
通过查看PATH
由您的环境设置的 ,您的shell 知道在哪里可以找到可执行文件。cron
不共享相同的环境。在 crontab 的顶部添加它应该告诉它在哪里可以找到你期望的命令:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Run Code Online (Sandbox Code Playgroud)