1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[EC-CUBE4]cronによる定期実行処理

Last updated at Posted at 2020-03-05

概要

EC-CUBEで定期実行処理を行う際のcronの設定を記載する。
行うことは以下の通り。

  • cronで定期実行するCommand処理を作成
  • crontabへの設定

前提条件
dockerでローカル開発環境が構築されていること。
公式ドキュメント Docker Composeを使用してインストールする

1. 定期実行用のCommandファイルを作成

1-1.Customizeディレクトリ内に処理を実装

サンプルとして現在時刻をファイルに書き出す処理を記載する。
app/CustomizeフォルダにCommandフォルダを作成し、SampleCommand.phpファイルを作成する。
書き出し先のファイル:app/Customize/Command/text.txt

app/Customize/Command/SampleCommand.php

<?php

namespace Customize\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;

/**
 * sample cron.
 */
class SampleCommand extends Command
{
    protected static $defaultName = 'eccube:customize:sample';

    protected function execute(InputInterface $input, OutputInterface $output)
    {

        $file = "/var/www/html/app/Customize/Command/text.txt";
        $now = date('Y/m/d H:i:s');
        $text = $now ."\n";
        file_put_contents($file, $text, FILE_APPEND); 
        
    }
}

不要なコードがある気がするが、一旦はこれで。

1-2. 単体で実行処理をして確認

## dockerコンテナ内のbin/consoleを実行
$ docker container exec -it "コンテナ名" bin/console eccube:customize:sample

app/Customize/Command/text.txt に現在時刻が書き出されていればOK。

2.cronの設定、開始

2-1. cronの設定

## コンテナ内に入る
$ docker container exec -it "コンテナ名"

## crontab -eを開く
root@xxxxx:/var/www/html # crontab -e

## エディタ内で以下を設定
## 毎分、eccube:customize:sampleを実行する
* * * * * /usr/local/bin/php  /var/www/html/bin/console eccube:customize:sample

・記述
スクリーンショット 2020-02-20 21.42.35.png

  • crontab -eでエラーが発生した場合
## エラー

### commandがない
root@xxxxx:/var/www/html# crontab -e
bash: crontab: command not found

### cronがインストールできない
# apt-get install cron
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package cron

docker環境内ではcronを実行する環境が整っていない可能性があるので、コンテナ内で以下のコマンドを実行する。
※本来はDockefileなどに記載しておくのがいいかも。

## crontab -e が使えるように設定する
root@xxxxx:/var/www/html # apt-get update
root@xxxxx:/var/www/html # apt-get install cron

2-2. cronを開始

service cron startでcronを動かす。

root@xxxxx:/var/www/html# service cron start
[ ok ] Starting periodic command scheduler: cron.

cronの状態

## cronが動作している場合
root@xxxxx:/var/www/html# service cron status
[ ok ] cron is running.

## cronが動作していない
root@xxxxx:/var/www/html# service cron status
[FAIL] cron is not running ... failed!

結果表示

app/Customize/Command/text.txtファイルに現在時刻が1分毎に追加されてくれば完了。

スクリーンショット 2020-02-20 19.43.12.png
1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?