crontab에 다른 PHP 설치 위치를 사용하도록 어떻게 알릴 수 있나요?

crontab에 다른 PHP 설치 위치를 사용하도록 어떻게 알릴 수 있나요?

Mac OS X 10.5 시스템에서 PHP 5.3.5를 실행하는 MAMP 설정이 있습니다. 내 MAMP 서버에 있는 PHP 스크립트를 실행하는 crontab을 설치하려고 합니다. /usr/bin/php(버전 5.2.15)에서 PHP 설치를 사용하는 경우에만 crontab을 실행할 수 있습니다. 즉, 이는 사전 설치된 MAC OS X PHP 설치입니다. crontab을 실행할 때 PHP의 MAMP 버전을 어떻게 사용합니까? /usr/bin/php에 새 버전의 PHP를 설치하기에는 유닉스에 대해 충분히 알지 못하지만 이것이 가능합니까?

crontab에서 다음을 사용하여 PHP 스크립트를 실행하고 싶습니다.맘프스PHP 버전입니다. 스크립트가 성공적으로 실행되어 원하는 결과를 얻었기 때문입니다. 그러나 /usr/bin/php에 있는 시스템의 기본 PHP 설치를 사용하여 crontab을 실행하려고 하면 치명적인 PHP 오류가 발생합니다.

--

이것이 유용할 수 있다면 MAMP 버전의 /usr/bin/php에 대한 결과는 다음과 같습니다. 첫 번째 코드 예제는 내 PHP 스크립트를 성공적으로 실행합니다.

$  MAMP_PHP_PATH="/applications/mamp/bin/php5.3/bin/php"
$  $MAMP_PHP_PATH -f /path/to/my/script.php

이제 다음 명령을 실행하면 다음과 같은 일이 발생합니다.

$  # whereis php in this case returns usr/bin/php
$  php -f /path/to/my/script.php

다음과 같은 오류가 발생합니다(내 형식을 포맷하는 중).

Fatal error: require_once(): 
Failed opening required '/path/to/includes/initialize.php' 
(include_path='.:') in /path/to/my/script.php on line 3

마지막으로, 내 crontab 파일은 다음과 같습니다(MAMP를 사용하는 PHP).

15 * * * * /Applications/MAMP/bin/php5.3/bin/php /path/to/my/script.php

MAMP가 없는 PHP:

15 * * * * php /path/to/my/script.php

감사해요

답변1

crontab에서 필요한 환경 변수를 설정합니다. 예를 들어:

PATH=/Applications/MAMP/bin/php5.3/bin:/usr/local/bin:/usr/bin:/bin
MAMP_PHP_PATH=/applications/mamp/bin/php5.3/bin/php
15 * * * * php /path/to/my/script.php

답변2

이것짧은A: 결국 방금 설치했어요최신 버전의 PHP내 시스템에.

이것답변(그리고 그 과정에서 겪었던 모든 고통):
crontab이 실행 중일 때 스크립트에서 인스턴스화한 특정 클래스를  SoapClient찾을 수 없다는 오류가 계속 발생합니다. 내 거자동 로드 기능둘 다 발견되지 않았으므로 OP에 표시된 대로 다음 오류가 발생합니다.

Fatal error: require_once(): 
Failed opening required '/path/to/includes/initialize.php' 
(include_path='.:') in /path/to/my/script.php on line 3

또 다른 유사한 오류가 발생했습니다. 이와 같은 오류가 계속 발생했습니다. 문제는 이전 버전의 PHP에 SOAP 확장이 활성화되어 있지 않다는 것을 알아냈고, 자동 로드 기능이 이를 찾았을 때 설치된 PHP를 확인했습니다.php.ini파일에는 다음 줄이 포함되어 있습니다. include_path그리고 포함하려는 SOAP 클래스에 대한 디렉터리를 확인합니다. 클래스를 찾을 수 없으면 치명적인 오류가 발생합니다. 노트: ( include_pathphp.ini 파일에 있는 Unix 환경의 $PATH 변수와 유사하게 작동합니다).

locate php.ini명령과 약간의 직관을 사용하여 내 시스템의 php.ini 파일이 /private/etc/php.ini.default당시 위치에 있다는 것을 발견했습니다.오래된php.ini 파일 – PHP 5.2 버전용 파일입니다. 요점은 비누가 전혀 활성화되지 않았기 때문에 include_path내 php.ini 파일의 매개변수가 해당 위치를 찾을 수 없다는 것입니다.

그래서 PHP 5.4.4를 다운로드하고 다음 명령을 실행했습니다.

$ ./configure --enable-soap --with-mysql
$ make
$ make install

설치는 에 있었지만 /usr/local/bin루트 PHP 설치는 에 있었기 /usr/bin때문에 다음 명령을 실행하여 모든 것을 /usr/local/bin로 이동하고 /usr/bin이전 PHP 버전을 덮어썼습니다.

$ sudo cp -Rvf /usr/local/bin/ /usr/bin

나는 다음을 지정합니다.
-R계층 구조의 모든 파일을 복사하고 /usr/local/bin/, -v프로세스가 진행되는 동안 어떤 파일이 이동되었는지 알려주는 출력 메시지를 표시하며, 이를 통해 -f필요한 경우 해당 파일을 덮어쓸 수 있습니다./usr/bin

이전 버전의 PHP를 새 버전으로 덮어쓰면 새 버전의 위치php.ini파일은 다른 곳에 있습니다. 하지만 어디? 나는 이것을 알아내기 위해 이것을 실행했다:

$ php -i | grep -i "configuration file"
  Configuration File (php.ini) Path => /usr/local/lib
  Loaded Configuration File => /usr/local/lib/php.ini

적절하게 변경한 후 /private/etc/php.ini.default의 파일을 php 5.4.4 설치와 함께 제공된 새 php.ini 파일로 덮어썼습니다.

비올라. cron 작업이 실행 중이므로 다른 PHP 경로를 지정할 필요가 전혀 없습니다. 건배!

관련 정보