Итак, я настроил вкладку 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
это сработает?
Cronjob запускается из домашнего каталога пользователя, с которым связан crontab. Есть несколько способов получить правильную работу относительных путей из подобного cronjob, но, на мой взгляд, проще всего просто изменить каталоги перед вызовом скрипта.
40 14 * * * root cd /home/sites/sitename/batch && php sendemailtest.php
Есть несколько вариантов:
include('/home/sites/sitename/batch/scriptname.php')
,chdir('/home/sites/sitename/batch')
, Все сценарии после этого вызова будут выглядеть так, как будто они запускаются из нового рабочего каталога.