我已经构建了一个php文件来检查一些结果,所以我需要设置一个cronjob.
我设置一个每30分钟运行一次,以便结果发送.但是,我不知道为什么我的crontab每隔30分钟就没有运行.
以下是我设置crontab的方法:
*/30 * * * * php /var/www/html/result.php
Run Code Online (Sandbox Code Playgroud)
我已经确认我的文件目录是正确的.我不确定的是时间部分:是不是可以使用*/30 * * * *或30 * * * *?我设定*/30 * * * *并没有奏效.
fed*_*qui 52
特定
*/30 * * * * php /var/www/html/result.php
Run Code Online (Sandbox Code Playgroud)
它有多种可能性不起作用:
首先,检查是否简单执行是很重要的php /var/www/html/result.php.这是必需的.但不幸的是,实现这一点并不意味着问题得到解决.
php必须添加二进制文件的路径.
*/30 * * * * php /var/www/html/result.php
Run Code Online (Sandbox Code Playgroud)
改为
*/30 * * * * /usr/bin/php /var/www/html/result.php
Run Code Online (Sandbox Code Playgroud)
或者来自的任何东西which php.
检查脚本的权限给运行crontab的用户.
授予文件执行权限:chmod +x file.并确保crontab由具有执行脚本权限的用户启动.还要检查用户是否可以访问该文件所在的目录.
为了更安全,您还可以在脚本顶部添加php路径,例如:
#!/usr/bin/php -q
<?php
...
?>
Run Code Online (Sandbox Code Playgroud)确保用户有权使用crontab.检查他是否在/etc/cron.d/deny文件中.此外,进行基本测试,看看它是crontanb还是php问题.
* * * * * touch /tmp/hello
Run Code Online (Sandbox Code Playgroud)正如William Niu建议的那样,将脚本的结果输出到日志文件中.
*/30 * * * * /usr/bin/php /var/www/html/result.php > /tmp/result
Run Code Online (Sandbox Code Playgroud)使用该-f选项执行脚本:
*/30 * * * * /usr/bin/php -f /var/www/html/result.php > /tmp/result
Run Code Online (Sandbox Code Playgroud)总而言之,有许多可能的原因.其中一个应该解决问题.
这可能是因为php不在路径中.crontab有一个非常小的path.所以,包括你的PHP程序的完整路径.
您可以通过将输出传递给文件来测试您的cron命令,例如
*/30 * * * * php /var/www/html/result.php > /tmp/result.log
Run Code Online (Sandbox Code Playgroud)
在此参考页面的 "Crontab Environment"下:
cron使用shell(/ usr/bin/sh)从用户的HOME目录调用该命令.cron为每个shell提供默认环境,定义:
HOME=user’s-home-directory
LOGNAME=user’s-login-id
PATH=/usr/bin:/usr/sbin:.
SHELL=/usr/bin/sh
Run Code Online (Sandbox Code Playgroud)
此外,/30所有平台可能都不支持语法,因此,请尝试将其更改为0,30.
小智 6
有一个类似的问题; 从命令行,它工作,但从cron,没有去.
有一个"include("./ connect.php");在我的PHP代码中为db的东西.
删除了,并将connect.php代码直接添加到php脚本中,并且它来自cron.
我有一个类似的问题,Ubuntu 14.04.1问题结果是我修改crontab的方式:
我正在使用sudo crontab -e而不是公正crontab -e,这导致我的更改被忽略.
小智 5
我对此很有趣。尽管我的脚本可以手动运行,但它们不能从crontab运行。
事实证明,由于脚本是从运行的,/usr/bin/php而不是文件的位置(如我手动运行时的位置),因此我的php require找不到所需的文件。更改它以反映完整的地址即可解决。
通过运行脚本进行故障排除,这/usr/bin/php -f /var/www/myfile.php有助于我发现问题
| 归档时间: |
|
| 查看次数: |
31070 次 |
| 最近记录: |