2012-06-26 2 views
0

나는 cron 스크립트에 갇혀있어 도움이 필요합니다.cron 스크립트를 사용하여 클래스 함수를 실행하는 방법

내 사이트는 1and1 서버에서 호스팅됩니다. 클래스 함수 구조를 사용하여 PHP에서 cron 스크립트를 작성했습니다.

실제로 두 개의 스크립트가 있습니다. 그것들은 다음과 같습니다 : 1) init.php 2) job.php

나는 init.php에서 필자는 필요한 클래스와 함수를 작성했다. job.php 스크립트에서 위와 아래에 init.php를 포함 시켰습니다. 다른 기능 (데이터베이스 쿼리와 이메일 보내기)을 작성했습니다.

브라우저 (http://www.abc.com/job.php)를 사용하여 스크립트를 직접 실행하면 스크립트가 올바르게 실행됩니다. 나는 이메일을 받고있다. 그러나이 스크립트를 쉘을 사용하여 cron 작업으로 설정 한 후 응답이 없습니다. cron의 오류 로그를 확인하는 방법을 알지 못합니다.

은 PHP 파일

샘플 구조는 아래에 주어진다 :

init.php :

define('DB_SERVER','***********'); 
define('DB_USERNAME','*******'); 
define('DB_PASSWARD','******'); 
define('DB_DATABASE','*******'); 


class information{ 

    public function __construct(){ 
     $connection = mysql_connect(DB_SERVER,DB_USERNAME,DB_PASSWARD) or die ('connection error'.mysql_error()); 
     mysql_select_db(DB_DATABASE,$connection) or die('database error'.mysql_error()); 
    } 

    public function configuration(){ 

     $sql = "SELECT * FROM config order by id"; 
     $exe = mysql_query($sql); 

     $site_config = array(); 

     while($res = mysql_fetch_array($exe)){  
      $site_config[$res['name']]=$res['value']; 
     } 
     return $site_config; 
    } 

} 

$obj = new information; 

job.php :

는 ('init.php')를 요구;

class Achdirect_cmi 
{ 
    private $ID; 
    private $AID; 
    private $Key; 

    public $site_config; 

    public function __construct() 
    { 
     global $obj; 

     $this->site_config = $obj->configuration(); 


     $this->ID   = $this->site_config['id']; 
     $this->AID   = $this->site_config['A_id']; 
     $this->Key = $this->site_config['key'];  

    } 
. 
. 
. 
. 

} 

이 스크립트를 실행하면 도움이됩니다.

** cron 작업은 SSH 액세스를 사용하여 설정됩니다.

아래의 명령은 cron 스크립트를 설정하는 데 사용되었습니다.

          • 는/usr/빈/php에 /a/b/htdocs/scripts/job.php

셸 명령과 구성이 실행되는지 여부를 확인하기 위해 테스트 스크립트도 추가했습니다. 테스트 스크립트가 제대로 실행되었습니다. **

기능을 하나씩 분석 한 후 아래 코드가 실행되지 않는 것으로 나타났습니다. 변수가 제대로 초기화되었지만 "SoapClient"개체가 생성되지 않았습니다. SoapClient 클래스는 나를 정의하지는 않지만 php5의 핵심 기능임을 유의하십시오.

try{ 

$client = new SoapClient($url, array("location" => $location)); 

$params = array("ticket" => $auth_array, "MerchantID" => $MerchantID, "TransactionID" => $trace_number); 

$response = $client->getTransaction($params); 

} 
catch (Exception $e){ 

echo $e->getMessage(); 
} 

제발 내가 필요하다고 제안 해주세요.

+1

은 crontab 파일에 example.org' @'MAILTO = 나를 추가;의 경우이 이메일을 보내드립니다 cron 작업이 뭔가를 출력합니다 –

+1

cronjob은 어떻게 설정합니까? SSH에 액세스 할 수 있습니까? 아니면 웹 기반 콘솔입니까? –

+0

방금 ​​sa 위의 엠프 코드 구조, 내 원본 스크립트에서 메일이 포함되어 있습니다. 브라우저를 사용하여 스크립트를 실행하면 이메일이 전송됩니다. 하지만이 스크립트를 cron 스크립트로 설정 한 후에는 전자 메일을받지 못합니다. 나는이 점을 위에 언급했다. cron 작업은 쉘 액세스 및 명령을 사용하여 설정됩니다. 또한 cron이 작동하는지 또는 동일한 쉘 구성을 사용하지 않는지 테스트 스크립트를 사용하여 테스트했습니다. – Debashis

답변

0

문제는 대부분 "require ('init."

cron 작업은 job.php 파일이있는 경로가 아니라 cron이 위치한 곳에서 실행되므로 파일을 포함하려면 포함 경로의 전체 경로를 포함해야합니다 . 파일

require('/a/b/htdocs/scripts/init.php'); 

(! 즉 올바른 디렉토리 인 경우 - 재미있는 이름 구조를 보인다)

+0

내가 제안한대로 수정 된 디렉토리 경로를 설정했습니다. 예, 지정된 디렉토리 경로가 유효한 구조가 아닙니다. 또 다른 파일 (check.php)을 만들고, init.php와 job.php의 모든 기능을 check.php 파일에 복사하고 다른 cron 작업을 설정합니다. 이 파일은 직접 액세스를 사용하여 실행 중이지만 cron 작업을 사용하여 실행하지 않습니다. – Debashis

+0

기능을 하나씩 분석 한 후 아래 코드가 실행되지 않는 것으로 나타났습니다. 변수가 제대로 초기화되었지만 "SoapClient"개체가 생성되지 않았습니다. SoapClient 클래스는 나를 정의하지는 않지만 php5의 핵심 기능임을 유의하십시오. { $ client = new SoapClient ($ url, array ("location"=> $ location)); 시도하십시오. $ params = array ("ticket"=> $ auth_array, "MerchantID"=> $ MerchantID, "TransactionID"=> $ trace_number); $ response = $ client-> getTransaction ($ params); } catch (Exception $ e) { echo $ e-> getMessage(); } 나에게 필요한 것을 제안 해주세요. – Debashis

+0

어떤 오류 메시지가 나타 납니까? – Robbie

관련 문제