PHP cli는 cron으로 실행될 때 다른 php.ini 파일을 사용합니다.

PHP cli는 cron으로 실행될 때 다른 php.ini 파일을 사용합니다.

내 CakePHP 콘솔 스크립트가 cron에서 실행하는 데 문제가 있습니다. MySQL 연결 누락 등에 대해 불평합니다.

약간의 조사 끝에 cron으로 실행되는 PHP는 터미널에서 실행할 때와 비교하여 다른 php.ini 파일을 사용한다는 것을 발견했습니다.

더 이상한 점은 터미널에서 PHP가 cli 구성을 사용하지 않는다는 것입니다.

PHP는 터미널에서 실행됩니다:

구성 파일(php.ini) 경로: /usr/local/lib
로드된 구성 파일: /usr/local/lib/php.ini
다음 위치에서 추가 .ini 파일 검색: (없음)
구문 분석된 추가 .ini 파일: (없음)

cron으로 실행되는 PHP:

구성 파일(php.ini) 경로: /etc/php5/cli
로드된 구성 파일: /etc/php5/cli/php.ini
/etc/php5/cli/conf.d에서 추가 .ini 파일을 검색하세요.
구문 분석된 추가 .ini 파일: /etc/php5/cli/conf.d/memcache.ini,
/etc/php5/cli/conf.d/mysql.ini,
/etc/php5/cli/conf.d/mysqli.ini,
/etc/php5/cli/conf.d/pdo.ini,
/etc/php5/cli/conf.d/pdo_mysql.ini,
/etc/php5/cli/conf.d/suhosin.ini,
/etc/php5/cli/conf.d/xcache.ini

왜 동일한 구성 파일을 사용하지 않는지 모르겠습니다. ENV터미널의 변수나 cron으로 실행할 때 특별한 점을 발견하지 못했습니다 .

답변1

이것이 표준 동작인지 아닌지는 확실하지 않지만 언제든지 추가할 수 있습니다.

-c /usr/local/lib/php.ini 사용자 정의 구성을 사용하는 명령에.

답변2

php설정 이 다르기 때문에 터미널과 cron에서 동일한 바이너리를 사용하지 않을 수도 있습니다 PATH.

which php터미널에 입력 하고 phpcron 스크립트에 바이너리의 전체 경로를 입력하세요.

답변3

나는 Oliver의 말에 동의합니다. cron에 PHP의 전체 경로를 입력해야 합니다. cron 파일에 PATH 매개변수를 포함할 수도 있지만 아마도 php의 절대 경로를 사용하는 것이 가장 좋습니다.

관련 정보