0

cronとして実行するようにシェルを設定する方法を見つけようとしています。次のコードを使用して/app/Console/Command/TaskEmailerShell.phpにTaskEmailerShell.phpファイルを作成しました。

App::uses('CakeEmail', 'Network/Email');

class TaskEmailerShell extends AppShell {
    public $uses = array('Task');

    public function main()
    {
        // GENERATE AND SEND THE EMAIL
        // ------------------------------------------------------------>
        $email = new CakeEmail();
        etc etc

ここの指示に従いましたが、cronを実行すると、次のエラーが発生します。

/home/village/public_html/app/Console/cakeshell: line 14: cake: command not found

私のcronコマンドは次のとおりです。

/home/village/public_html/app/Console/cakeshell TaskEmailer -cli /usr/bin -console /Cake/Console -app /home/village/public_html/app >> /home/village/public_html/emailer_log.log

私が間違っているところに何か提案はありますか?

4

3 に答える 3

1

Command not found通常、あなたPATHが問題であることを意味します。cron から実行されるプログラムは、PATH設定すらされていない可能性があります。cron によって開始されるスクリプトはPATH、先頭近くに設定する必要があります。そうしないと、実行するはずのプログラムが見つかりません。

于 2012-11-09T02:48:11.807 に答える
1

そこでcakeshell参照しているスクリプトでは、cakeコンソール バイナリが PATH のどこかにある必要があります。または (少なくとも使用例を見ると)、-console引数でコンソールへのフル パスを指定している必要があります。そこに相対パスがあるようです。

個人的には、cron ジョブから直接 Cake コンソールを呼び出すことをお勧めします。他の必要が生じるとcakeshell、コンソールをラップするようなスクリプトを書くことになるかもしれません。次のようなものを試すことができます:

# m h dom mon dow command
*/5 *   *   *   * /home/village/public_html/lib/Cake/Console/cake -app '/home/village/public_html/app/' TaskEmailer >> /home/village/public_html/emailer_log.log
于 2012-11-09T01:04:13.613 に答える