1時間ごとにコードを実行する[終了]


8

1時間ごとに実行されるWebサービスを作成する必要があります。これは、データベース内のデータを確認し、特定の条件が満たされている/満たされていない場合に同じデータベース内のテーブルにアラートを追加するために使用されます。私たちが現在持っているものは:

Pythonを使用してAmazon Web Services(AWS)仮想サーバーにレポートするエンドデバイスがあります。AWSサーバーはその情報を取得してMySQLデータベースに保存します。AWSサーバーはDjangoとApacheを実行するLinuxです。エンドデバイスによって保存されたデータを検証するPythonコードを毎時間実行できるようにする必要があります。特定の条件が満たされない場合alerts、データベースのテーブルにレコードが追加されます。

上記の設定を作成することを最初に契約しました。Python、Django、Apacheは初めてです。ただし、エンドデバイスとの間でデータを送受信するPythonコードにはすでにいくつかの変更を加えています。私はWebプログラミングに侵入しているコーダーです。

誰か私がこれを行う方法について何かアドバイスはありますか?


Quartz-Schedulerを使用します。以下のリンクが参考になります。quartz-scheduler.orgチュートリアルquartz-scheduler.org/documentation/quartz-2.1.x/quick-start

QuartzはJava用に設計されているようです。私はJavaをまったく使用していません。Python / Djangoを使用しています。
Linger

回答:


31

あなたがシェルアクセスを持っていると仮定して、cronjobを作るのはどうですか?

cronデーモンは、事実上すべてのUNIXライクなシステムやスケジュールコマンドと呼ばれるファイルの記述に基づいて実行するように存在しているのcrontab

ファイルの各行には、コマンドが実行される時点を示す一連のフィールドが含まれています。

タスクは、達成したいタスクを実行するスタンドアロンプ​​ログラム、または別の回答が示唆するように、アクションを実行するWebリソースにアクセスするためのwgetcurlfetchなどのHTTPクライアントの呼び出しのいずれかです。

リクエストの処理にかかる時間に制限がある場合は、タスクを、Webフレームワーク/サーバー内で実行されないオフラインのスクリプトまたはプログラムに移動する必要がある場合があります。


Cronは間違いなく私が最終的に使用したものでした。答えてくれてありがとう。Cronを使用したくないが同じ機能を使用したい人のために、Cronのようなジョブを実行する2つのオンラインサービス、SetCronJobCronlessを見つけました
Linger、2012年

17

AWS上のジャンゴで、私はに見てねセロリ

Celeryは非同期タスクを追加し、スケジューラーを含みます。AWSでは、Amazon Simple Queue Serviceをブローカーとして使用するようにCeleryを設定できます(Stack Overflow でのAmazon SQSを使用したCeleryおよび件名に関するこのブログ投稿を参照)。

あなたは、セットアップセロリ定期的なタスクスケジュールを、それがそのスケジュールに従って構成されたタスクを実行します。

利点は、セットアップ全体を使用して非同期タスクを実行し、WebサーバーからCeleryワーカーに重いタスクをオフロードできることです。

軽量の代替手段は、crontabジョブを設定することです。curlまたはを使用して呼び出されるようにDjangoアプリケーションのルートを設定することもできますwget

* 5 * * * curl http://username:password@hostname/route_to_job

1
+1私の単純なcronタスクよりもはるかに洗練されたソリューションであり、OPの実装に固有です。
msanford 2012年

7

AWSインスタンスはLinuxを実行しているため、おそらくこれをcronジョブとして実行できます。

私がDrupalのcronアプローチ呼んでいる方法を取ることができます。Djangoの場合、URLに応答するコントローラーを作成し、必要なアクションを実行する必要があります。

次にcurl、コントローラーのURLにcronタスクを構成し、スクリプトをトリガーします。

これには、URLからいつでも簡単に呼び出すことができるという追加の利点があります。たぶん、せっかちなマネージャーが、過去20分のデータから生成されたレポートを必要としています。


3

APSchedulerを調べてみてください。これは、Pythonのクォーツのようなスケジューラーです(それほど広範囲ではありません)。

これは、プラットフォームに依存せず、アプリケーションの変数や関数に直接アクセスできるため、長期実行アプリケーション(Webアプリケーションなど)の外部で実行するcronスクリプトに代わるはるかに優れた方法です。

最新のリリースの説明は、http//pypi.python.org/pypi/APScheduler/2.0.3にあります。

インストール/実装に関するいくつかのドキュメントがここにあります:https : //apscheduler.readthedocs.org/en/latest/

ここにいくつかの機能があります:

  • (ハード)外部依存関係なし
  • スレッドセーフAPI
  • 優れたテストカバレッジ(CPython 2.5-2.7、3.3、Jython 2.5.3、PyPy 1.9でテスト)
  • 構成可能なスケジューリングメカニズム(トリガー):
    • cronのようなスケジューリング
    • 単一実行ジョブのスケジューリングの遅延(UNIXの「at」コマンドなど)
    • 間隔ベース(指定された時間間隔でジョブを実行)
  • 複数の、同時にアクティブなジョブストア:
    • ファイルベースのシンプルなデータベース(シェルフ)
    • SQLAlchemy(サポートされているすべてのRDBMSが機能します)
    • MongoDB
    • Redis

1

私はあなたがのようないくつかのものを使用することができると思います django-extensions

Django-Extensionsウェブサイト

モジュールがあります-ジョブ。私にとって、これはあなたのcronジョブを制御するための非常に良いツールです。

2番目のオプションは、ファブリックを使用して、このための関数を作成することです。

そして、私は3番目の方法を見ます。あなたの想像力と知識を使用して、サブプロセスとshで独自の機能を作成してください。


1

最も可能性が高いのは、デフォルト設定でcrontabを実行しているということです。つまり、crontab SPOOL RATHER THE FILESが表示されます。

一方、それはAWSでも実行できます。これは、cronが事前にインストールおよび構成されているため、ファイルを次のように配置することで、毎時、毎日、毎週、または毎月、およびその他の期間に実行する必要があるタスクのセットアップを可能にします。ここで/etc/cron.xxxxxx説明するディレクトリ。

毎時、毎日、毎週、または毎月実行するジョブの設定は非常に迅速です。問題は1時間ごとにコードを実行する方法を尋ねているため、AWS Linuxではでファイルを作成できます/etc/cron.hourly

SSHクライアントを介してインスタンスにログインするときの手順は次のとおりです。

$ echo "/usr/bin/python -q /path/to/your/file" > application
$ sudo mv application /etc/cron.hourly/
$ sudo chown -R root /etc/cron.hourly
$ sudo chmod 2755 /etc/cron.hourly/application
$ sudo /etc/init.d/crond restart

上記の例では、「application」という名前のファイルが保存されています。名前が一意である限り、名前は重要ではありません。これは、次を実行した場合のログレポートです。$ sudo vim /var/log/cron

Dec 28 19:01:01 ip-xxx-xx-xx-xx CROND[20243]: (root) CMD (run-parts /etc/cron.hourly)
Dec 28 19:01:01 ip-xxx-xx-xx-xx run-parts(/etc/cron.hourly)[20243]: starting 0anacron
Dec 28 19:01:01 ip-xxx-xx-xx-xx run-parts(/etc/cron.hourly)[20261]: finished 0anacron
Dec 28 19:01:01 ip-xxx-xx-xx-xx run-parts(/etc/cron.hourly)[20243]: starting application
Dec 28 19:01:02 ip-xxx-xx-xx-xx run-parts(/etc/cron.hourly)[20323]: finished application

ログに示されているように、時間単位で、従来はcronによって行われていた定期的なコマンドスケジューリングを実行するanacronの実行を開始し、ディレクトリ内の他のすべてのファイルを呼び出して、各ファイルでコマンドを実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.