У меня есть сценарий планировщика 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
Каждое из подвыражений в &&
(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"