16

symfony2 に基づく私のアプリケーションは、さまざまな瞬間とさまざまな頻度でいくつかのスタンドアロン ジョブを実行する必要があります。たとえば、ニュースレターの送信、レポートの編集など...

アプリケーションから各タスクを追加/編集できるようにしたい 私のタスクは cron ジョブに非常に近く、特定の URL を呼び出すように構成されます。

私の視点から :

30 分または 10 分ごとにスクリプトを起動する cron ジョブを作成することを考えています。このスクリプトは、docronjob アクションを取得する curl コマンドのみを実行します。この docronjobaction は symfony の内部にあり、すべてのタスクを取得し、必要なタスクを起動する責任があります。

私の質問は次のとおりです。

  • それを達成するためのよりクリーンな方法はありますか?
  • docronaction 内で、他のアクションを起動するにはどうすればよいですか?
  • コントローラー全体の時間制限を 0 に設定するにはどうすればよいですか?
  • これを行うバンドルはすでに存在しますか?
4

4 に答える 4

6

このブログを使って、やりたいことができます。次に、cron またはその他のプログラムを使用してアクションをトリガーできます。

要約すれば:

まず、必要な機能を実行する symfony コマンドを作成する必要があります。そのために、バンドルに「コントローラーまたはリソース」と同じレベルに「コマンド」という名前のフォルダーを作成し、クラスに名前を付けます。名前は「Command」で終わらないと機能しません。「MyCommand」としましょう。

    <?php
    namespace Devvness\DevvnessBundle\Command;

    use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
    use Symfony\Component\Console\Input\InputArgument;
    use Symfony\Component\Console\Input\InputInterface;
    use Symfony\Component\Console\Output\OutputInterface;

    class MyCommand extends ContainerAwareCommand
    {


 protected function configure()
    {
        $this->setName('devvness:my_command')
            ->setDescription('Descripción de lo que hace el comando')
            ->addArgument('my_argument', InputArgument::OPTIONAL, 'Explicamos el significado del argumento');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $em = $this->getContainer()->get('doctrine')->getManager();
        // Hacemos lo que sea
        $output->writeln('Hola mundo');
        $em->flush();
    }
}

次に、cmd またはコンソールで実行して呼び出すことができます。

php app/console devness:mycommand 

また

php app/console devness:mycommand --my_argument=valor

次に、cronファイルを編集して、Unix用のcronなどでタスクをスケジュールする必要があります

* * * * * php /root/absolute/for/symfony/project/app/console devness:mycommand --myargument=valor
于 2014-06-18T21:25:50.403 に答える
3

管理するコマンドがたくさんあるアプリケーションで作業しているときに、非常によく似たニーズがありました (そのため、この古いトピックを見つけました)。

最後に、複数の symfony コマンド (Doctrine 経由で保存されたスケジュールされたタスク) の実行とキューイングを管理する独自のバンドルを作成しました。

ここに Git リポジトリがあります: CommandSchedulerBundle

それが誰かを助けることを願っています。

よろしくお願いします

于 2014-10-04T16:29:50.073 に答える