所以我设置了一个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
,那会有效吗?
答案 0 :(得分:4)
cronjob从与crontab关联的用户的主目录运行。有几种方法可以从像这样的cronjob中正确地运行相对路径,但我认为最简单的方法是在调用脚本之前更改目录。
40 14 * * * root cd /home/sites/sitename/batch && php sendemailtest.php
答案 1 :(得分:1)
有几个选择:
include('/home/sites/sitename/batch/scriptname.php')
。chdir('/home/sites/sitename/batch')
。此调用之后的所有脚本都将显示为从新工作目录运行。