2011-02-28 19 views
2

Expression Engineで実行されるスクリプトのcronジョブを設定するための最善の方法についてアドバイスがありますか?Expression Engineスクリプトを使用したCronジョブ

私の計画は、cronジョブを使用してLynxでURLにアクセスすることです。 URLはランダムな文字列になりますので、遭遇することはありませんが、一般公開されます。 cronジョブはURLをロードし、スクリプトは式エンジンの一部として実行されます。

PHPスクリプトを内部的に実行するためにcronジョブを取得するのが理想的ですが、この時点ではモジュールスクリプトの呼び出しが失敗するようにEEフレームワーク内から実行する必要があります

私はこれを仕事に配管することができますか、それとも私はちょうど計画Aと一緒に行かなければなりませんか?

答えて

0

私は、最も簡単な選択肢は、これを行うPHPスクリプトを別にすることだと思います。

しかし、EEでこれを実現するには、実行するPHPコードを実行してから拡張機能やプラグインを実行するプラグインや拡張機能を作成する必要がありますURLを介してアクセスするために作成したテンプレートページを呼び出します。コードがプラグインを呼ぶだろう、とプラグインは、あなたが念頭に置いていたものは何でもタスクんPHPコードを実行することを

{exp:runcron} 
{/exp:runcron} 

すなわち、吹き出しのようなものだろう。

2

EE2 ForumsEE1 Forumsには、cronジョブをさまざまな用途に使用する人がたくさんいます。

最も人気のある使用が予定さcronジョブをコマンドラインPHPスクリプトを使用して、automatically closing expired entriesのようだ:

#!usr/local/bin/php -n 

<?php global $PREFS;       // ee_cli_sql.php v0.3.5 

/* Copyright (c) 2003 - 2007 EllisLab, Inc. --- ExpressionEngine 1.6.0. 

    Some code by Ingmar Greil, 2007. <[email protected]> 
    My modfications and code released under a Creative Commons 
    "Attribution" license: http://creativecommons.org/licenses/by/2.0/ 

    This PHP command line script allows you to perform arbitrary 
    SQL queries on your EE database. There will be no visible output 
    (in this case we'd simply use the Query module in a template, right?), 
    since the whole point is to run this script unattended. 

    Put this file in your EE "system" folder, make sure the executable 
    bit is set (chmod +x ee_cli_sql.php), then call manually or via cron. 

    Try "crontab -e". 
    "5 * * * * command" will run your script 5 minutes past the hour, every hour. 
    "0,10,20,30,40,50 6-22 * * * 1-5" will run your script every ten minutes 
    between 6am and 10pm, except on weekends. The general syntax is: 
    <Minute> <Hour> <Day> <Month> <Day of Week> <Command line> 

*/ 

// This query will set all expired entries to "closed" status: 

$query = "UPDATE `exp_weblog_titles` SET status = 'closed' WHERE status <> 'closed' 
      AND expiration_date <> '0' AND expiration_date < UNIX_TIMESTAMP()"; 

// Change the above query to suit your needs. 
// That's it, folks! No user-serviceable parts below. 

define("EXT",".php");       // Get around EE's security mechanisms. Kludgy? Hell, yes. 
               // Got a better solution? I am all ears. 
require("config".EXT);       // Read the config file 
require("core/core.prefs".EXT);     // Load the PREFS cass 

$PREFS = new Preferences(); $PREFS->core_ini = $conf; unset($conf); 

$db = mysql_connect(       // Handle the connection to the database: 
     $PREFS->core_ini['db_hostname'],   // hostname, 
     $PREFS->core_ini['db_username'],   // username and 
     $PREFS->core_ini['db_password']);   // password are all pulled automatically. 

mysql_select_db($PREFS->core_ini['db_name']); // Now it's selecting the appropriate db, 
mysql_query($query,$db);      // performing the actual query, then 
mysql_close();         // cleaning up after ourselves. Done. 
?> 

ExpressionEngineのWikiの記事は、スクリプトを設定し、予定されているどのようにいくつかの洞察を提供します。

このPHPコマンドラインスクリプトを使用すると、 はEEデータベース上で任意のSQLクエリ を実行できます。 目に見える出力はありません(この場合、 テンプレートでクエリモジュールを使用します)。 ポイント全体がこのスクリプト を実行するためです。

が フォルダあなたのEE「システム」でこのファイルを入れて、実行可能なビット が、その後(chmodの+ X ee_cli_sql.php)、 コール手動またはcronを経由して設定されていることを確認してください。

あなたではなくあなたのcronジョブを管理するために、CLI(コマンドラインインターフェイス)を使用したくない場合、あなたは定期的に、スケジュールに基づいてプラグインやモジュールを呼び出すように設定することができ、EllisLabからCron Pluginを検討するかもしれません。

+0

期限切れのエントリを自動的に閉じるリンクが機能しない – williamcarswell

+3

EllisLabが2012年11月にサイトを再設計したとき、彼らはWikiを継承していないように見えます - すべてのリンクは単にellislab.comにリダイレクトされています。幸いにも、私は[インターネットアーカイブWayBackマシン](http://web.archive)から元の記事を掘り起こすことができました。org/web/20120103211342/http://expressionengine.com/wiki/Automatically_close_expired_entries) – rjb

関連する問題