Crontab 和 PHP require_once 不能正常工作

Ari*_*osh 0 php cron batch-file 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
Run Code Online (Sandbox Code Playgroud)

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

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

require_once '../includes/dbpw.php';
Run Code Online (Sandbox Code Playgroud)

所以我猜测我称之为 php 文件的位置把一切都搞砸了。

我该如何解决?

我还没有尝试过这个,担心它会产生意想不到的结果......但是如果我HOME=/改为HOME=/home/sites/sitename/batch/,然后让它运行php sendemailtest.php,那会起作用吗?

Gle*_*len 5

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

40 14 * * * root cd /home/sites/sitename/batch && php sendemailtest.php
Run Code Online (Sandbox Code Playgroud)