Crontab和PHP require_once运行不正常

时间:2014-12-12 22:54:04

标签: php batch-file cron crontab

所以我设置了一个cron标签

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
  40 14 *  *  * root php /home/sites/sitename/batch/sendemailtest.php

现在问题是,当我在批处理目录中运行php sendemailtest.php时,一切正常。但如果我从php /home/sites/sitename/batch/sendemailtest.php这样的任何其他目录运行它,它会给我带来麻烦。

我认为这是因为在php文件里面是require_once

require_once '../includes/dbpw.php';

所以我猜我称之为php文件的位置会搞砸一切。

我该如何解决这个问题?

我还没有尝试过,担心它会产生意想不到的结果......但如果我将HOME=/更改为HOME=/home/sites/sitename/batch/,那么让它运行php sendemailtest.php,那会有效吗?

2 个答案:

答案 0 :(得分:4)

cronjob从与crontab关联的用户的主目录运行。有几种方法可以从像这样的cronjob中正确地运行相对路径,但我认为最简单的方法是在调用脚本之前更改目录。

40 14 * * * root cd /home/sites/sitename/batch && php sendemailtest.php

答案 1 :(得分:1)

有几个选择:

  1. 将包含调用更改为绝对文件。 include('/home/sites/sitename/batch/scriptname.php')
  2. 使用php文件顶部的chdir来更改它的工作目录。对于php,这将表现为脚本是从该目录中运行的。在php:chdir('/home/sites/sitename/batch')。此调用之后的所有脚本都将显示为从新工作目录运行。
  3. 像Glen建议的那样更改命令中的目录。