어떤 cron 스크립트를 실행하는 것이 가장 좋습니까? cron.php 또는 cron.sh


27

Magento는 루트 디렉토리에 cron.php와 cron.sh라는 두 개의 cron 스크립트를 제공합니다.

어느 쪽이 더 뛰어나고 왜 그럴까요?

답변:


31

cron.sh를 실행하는 것이 가장 좋습니다.

Magento EE 1.13.x 및 CE 1.8.x에서 Magento가 새로운 스케줄링 모드 기능을 도입 한 위치에서 크론 메커니즘이 변경되었습니다.

사용 가능한 모드는 두 가지입니다. 1. 기본값-예약 된 크론을 실행합니다. 2. always-이름에서 알 수 있듯이 이러한 작업은 cron이 트리거 될 때마다 무조건 실행되며 명시 적으로 정의 된 일정이 필요하지 않습니다.

기본적으로 cron.php는 매개 변수없이 호출되며 shell_exec를 사용하여 cron.sh의 두 프로세스를 실행합니다. 각각 다른 매개 변수 ( "default"또는 "always")가 있습니다. Cron.sh는이 매개 변수를 cron.php로 다시 전달한 다음 cron을 실행합니다. 내부적으로 Magento는 이벤트 인프라를 사용하여 이름이 "default"및 "always"인 이벤트를 전달하여 두 가지 모드를 처리합니다. 그런 다음 Mage_Cron은 두 개의 옵저버 메소드를 구현합니다.

cron.php를 보면, PHP 함수 shell_exec의 사용법을 알 수 있습니다. 보안 문제와는 별도로, 함수는 오류가 발생하거나 프로그램이 출력을 생성하지 않을 때 NULL을 리턴 할 수 있습니다. 이 기능을 사용하여 실행 실패를 감지 할 수 없습니다. 즉, 오류로 인해 스크립트 / 코드가 실패하면 다음과 같은 상황이 발생합니다. 1. cronjob이 오래되고, 2. 오류가 기록되지 않습니다.

이를 극복하려면 다음 cronjob을 추가해야합니다.

*/5 *   * * *   www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default
*/5 *   * * *   www-data /bin/sh /path/to/magento/cron.sh cron.php -m=always

이렇게하면 대체 PHP 함수 shell_exec를 사용하지 않고 프로세스 모드가 항상 실행되고 오류가 발생하면 예외가 발생하여 cron이 오래되지 않아야합니다.


위의 샘플 cron 표현식이 꽤 일반적이라는 것을 추가하려고합니다. www-data웹 서버 프로세스를 실행하는 모든 사용자로 변경됩니다. 또한 많은 CPanel / WHM 호스팅 설정의 shell_exec()경우 비활성화 될 것입니다.
pspahn

*/5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default */5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=always이 명령들은 nupur walia에 의해 "command not found"에러를 발생시킵니다
Amit Bera

해당 오류가 발생하면 3 가지 사항을 확인해야합니다. 1) www-data는 해당 서버에서이 프로세스를 실행할 수있는 올바른 사용자입니다. 그렇지 않으면 사용자를 원하는대로 변경하십시오. 2) sh의 위치를 ​​확인하십시오. "sh"를 실행하면 위치가 출력됩니다. 경로가 다른 경우 "/ bin / sh"를 대체합니다. 3) 마지막으로 cron.sh의 경로가 실제로 올바른지 확인하십시오.
Shaughn

@ AmitBera 같은 오류 메시지가 표시되어 www-data, root 또는 다른 사용자와 작동하지 못했습니다. 나는 실제로 사용자를 생략했고 이제는 작동한다.*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
Michael

@Shaughn 기본 및 항상 모드의 사용법을 설명 할 수 있습니까?
Rohan Hapani
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.