командный файл — Crontab и PHP require_once не работают

Итак, я настроил вкладку 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

Решение

Cronjob запускается из домашнего каталога пользователя, с которым связан crontab. Есть несколько способов получить правильную работу относительных путей из подобного cronjob, но, на мой взгляд, проще всего просто изменить каталоги перед вызовом скрипта.

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

Другие решения

Есть несколько вариантов:

  1. Измените вызов include на абсолютный файл. include('/home/sites/sitename/batch/scriptname.php'),
  2. использование ChDir в верхней части php-файла, чтобы изменить его рабочий каталог. Для php это будет действовать так, как если бы скрипт запускался из этого каталога. В php: chdir('/home/sites/sitename/batch'), Все сценарии после этого вызова будут выглядеть так, как будто они запускаются из нового рабочего каталога.
  3. Измените каталог в команде, как предлагает Глен.
1