Получение crontab для изменения его рабочего каталога для выполнения Сценария PHP

У меня есть сценарий планировщика PHP, который мне нужен апач для выполнения в расписании крона. Тестирование этой команды из командной строки хорошо работает:

$    ! test -e /var/www/html/maintenance.flag && cd /var/www/html/shell && /bin/php ./scheduler.php --action cron --mode default

Когда я тестирую этот сценарий с помощью команды, показанной ниже как мой апачский пользователь, или добавляю его к апачскому крону, я получаю эту ошибку: не Мог открыть входной файл:./scheduler.php

$    sudo -H -u apache bash -c "! test -e /var/www/html/maintenance.flag && cd /var/www/html/shell &&  /bin/php ./scheduler.php --action cron --mode default"

Обратите внимание, что scheduler.php является символьной ссылкой с, читал/писал/выполнял на на файле связей и исходном файле (chmod ug+rwx scheduler.php ./vendor/vendor/package/src/scheduler.php).

Я первоначально пытался просто работать php /var/www/html/shell/scheduler.php --action cron --mode default, однако ссылочные файлы Сценария PHP в том же каталоге, который является, почему мне нужен апач/крон для выполнения файла из того каталога.

Править

Испытанное использование файла сценария, но все еще видит ту же ошибку.

Созданный cron.sh со следующим содержанием:

#!/bin/bash
cd /var/www/html/shell

#For Testing - remember, this is a symlink file
ls -l 'scheduler.php'

#Run Scheduler
/bin/php ./scheduler.php --action cron --mode always
/bin/php ./scheduler.php --action cron --mode default

Протестированный с:

sudo -H -u apache bash -c "! test -e /var/www/html/maintenance.flag && /bin/bash /var/www/html/cron.sh"

Вывод:

lrwxrwxrwx 1 apache webroot 53 Oct 26 10:36 scheduler.php -> ../vendor/aoepeople/aoe_scheduler/shell/scheduler.php
Could not open input file: scheduler.php
Could not open input file: scheduler.php
4
задан 8 December 2016 в 22:45

1 ответ

Каждое из подвыражений в && (test..., cd ... и /bin/php...) выполняется в разных подоболочках и не может передавать контекст (например, $PWD) между собой.

Вместо того, чтобы поместить свою команду в свой crontab, оберните ее простым bash сценарием и вызовите этот сценарий из crontab. Например :
В crontab:

! test -e /var/www/html/maintenance.flag && /usr/local/bin/maint

и в /usr/local/bin/maint:

#!/bin/bash
cd /var/www/html/shell
/bin/php ./scheduler.php --action cron --mode default"
6
ответ дан 1 December 2019 в 09:21

Другие вопросы по тегам:

Похожие вопросы: