Crontab и PHP require_once не работают хорошо

0

Итак, у меня установлена вкладка 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, это сработает?

Теги:
batch-file
cron
crontab

2 ответа

4
Лучший ответ

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню