概要
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
- 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分毎に追加されてくれば完了。