ロリポップ!レンタルサーバーでのCRON設定
ロリポップ!レンタルサーバーで、CRM分析プラグインの集計用CRONを設定する手順です。
ロリポップ!のcron設定は、コマンドを直接入力するのではなく、実行するファイル(シェルスクリプト)のパスを指定する方式です。コマンドを書いたシェルスクリプトを2つ作り、FTPでアップロードして、cronに登録します。
前提条件
- ロリポップ!レンタルサーバーのユーザー専用ページにログインできること
- ライトプラン以上であること(CRM分析プラグインは2件のcronを登録します。エコノミープランは、後述の「エコノミープランの場合」を参照)
- EC-CUBEとCRM分析プラグインがインストール済みであること
- FTPで接続できること(シェルスクリプトのアップロードに使います)
- サーバーに、EC-CUBEが対応するバージョンのPHPがあること(
/usr/local/php/配下のフォルダで確認できます)
推奨スケジュール
| 用途 | 推奨 | コマンド |
|---|---|---|
| 集計ワーカー | 5分おき | eccube:crm-analytics42:worker |
| 日次登録 | 毎日 3:00 | eccube:crm-analytics42:enqueue-daily |
管理画面から集計を開始するとキューに登録され、次回のワーカー実行で処理が始まります。5分おきなら、開始までの待ちは最大で約5分です。
設定手順
- ダッシュボードの内容をコピーして、集計ワーカー用と日次登録用のシェルスクリプトを、それぞれ作る(後述)
- FTPで
webフォルダの中のcronフォルダにアップロードし、パーミッション(権限)を700にする - ブラウザでスクリプトのURLを開き、開けない(403エラーになる)ことを確認する(後述)
- ユーザー専用ページの「cron設定」を開き、集計ワーカー用と日次登録用の2件を登録する(後述)
手順1: シェルスクリプトを作成する
ダッシュボードの初期セットアップ「1. CRONを設定しましょう」に表示される内容を、そのままコピーして、2つのファイルを作ります。
- 「ご利用のサーバー」から、「ロリポップ!レンタルサーバー」を選ぶ
- 「PHP のバージョン」を選ぶ(ご利用のアカウントの
/usr/local/php/にあるバージョンを選んでください) - 「5分おき(集計の定期実行)」の内容を、「コピー」ボタンでコピーして、テキストエディタに貼り付け、
crm-worker.shという名前で保存する - 「毎日(前日分の集計予約・推奨 3:00)」の内容も、同様にコピーして、
crm-enqueue-daily.shという名前で保存する
ダッシュボードには、設置パスとPHPのフルパスが入った、次のような内容が表示されます(集計ワーカー用の例)。
#!/bin/sh
cd /home/users/●/アカウント名/web/ec-cube || exit 1
/usr/local/php/8.3/bin/php bin/console --no-debug eccube:crm-analytics42:worker > /dev/null 2>&1
exit

手順2: アップロードと権限の設定
- FTPソフトで接続し、
webフォルダの中にcronフォルダを作る(ロリポップ!のcron設定は、webフォルダ以下のファイルしか指定できません) cronフォルダに、2つのシェルスクリプトをアップロードする- それぞれのファイルのパーミッション(権限)を700に変更する


手順3: Webから開けないことを確認する
シェルスクリプトは、Webから見える web フォルダの中に置くことになります。スクリプトにはサーバー内のパスが書かれているため、Webから開けないことを確認してください。パーミッションを700にしていれば、ブラウザからは開けません。次のURLをブラウザで開き、「現在、このページへのアクセスは禁止されています」などのエラー(403)になることを確認します。
https://ご利用のドメイン/cron/crm-worker.sh

スクリプトの内容が表示されてしまう場合は、パーミッションが700になっているか確認してください。それでも表示される場合は、cron フォルダに、Webからのアクセスを禁止する .htaccess を置きます(ファイル名は .htaccess。先頭が「.」のファイルがFTPソフトに表示されない場合は、隠しファイルを表示する設定を確認してください)。
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
手順4: cron設定に入力する内容
ユーザー専用ページの「cron設定」で、次のように登録します。「実行ファイルパス」には、web フォルダからのパスを入力します。
集計ワーカー(5分おき)
| 項目 | 入力内容 |
|---|---|
| 設定名 | CRM分析 worker(任意) |
| 日付・曜日・時間 | 毎日・すべての曜日・5分おき |
| 実行ファイルパス | cron/crm-worker.sh |

日次登録(毎日 3:00)
| 項目 | 入力内容 |
|---|---|
| 設定名 | CRM分析 日次登録(任意) |
| 日付・曜日・時間 | 毎日・すべての曜日・3時0分 |
| 実行ファイルパス | cron/crm-enqueue-daily.sh |

「設定済みcron一覧」に登録内容が正しく表示されていることを確認してください。

エコノミープランの場合
エコノミープランは、cronを1件しか登録できません。2つの処理を1つのシェルスクリプトにまとめ、5分おきで登録してください。次のスクリプトは、5分おきにワーカーを動かし、毎日3:00台の最初の実行のときだけ、日次登録も行います。
まとめ用(crm-cron.sh)
#!/bin/sh
cd /home/users/●/アカウント名/web/ec-cube || exit 1
PHP=/usr/local/php/8.3/bin/php
# 毎日 3:00 台の最初の実行だけ、前日分の集計を登録する
if [ "$(date +%H)" = "03" ] && [ "$(date +%M)" -lt 5 ]; then
$PHP bin/console --no-debug eccube:crm-analytics42:enqueue-daily > /dev/null 2>&1
fi
# 5分おきの実行のたびに、集計ワーカーを動かす
$PHP bin/console --no-debug eccube:crm-analytics42:worker > /dev/null 2>&1
exit
- アップロード先とパーミッションは、前述と同じです。cron設定の「実行ファイルパス」には
cron/crm-cron.shを入力し、「日付・曜日・時間」は毎日・すべての曜日・5分おきにします - スクリプトの時刻は、サーバーの時刻(日本時間)で判定されます
cdのあとの設置パスと、PHPのパス(PHP=の右側)は、ダッシュボードに表示されるスクリプトと同じ値にしてください
設定後の確認
- ダッシュボードの初期セットアップで、ワーカー側に「動作を確認しました」と出るか見る(登録から最大5分ほどかかります)
- 初期セットアップの「上記2つの登録が完了したらチェックしてください。」にチェックを入れる
- 初期セットアップのステップ2「初回集計を開始しましょう」で「集計を開始」をクリックし、「定期実行の開始待ち」から実行中へ進むことを確認する(集計の期間は自動で選ばれます。集計するデータがない場合は、ステップ2は表示されず、セットアップが完了します)
うまくいかないとき
/usr/local/php/に、EC-CUBEが対応するバージョンのフォルダが無い場合は、実行できません。ロリポップ!のサポートにご確認ください- 「実行ファイルパス」は、
webフォルダからのパスです(先頭の/は付けません)。ファイルの場所と、ファイル名を確認してください - シェルスクリプトの改行コードがWindows用のCR+LFだったり、文字コードがBOM付きのUTF-8だったり、パーミッションが700になっていないと、動かないことがあります。改行コードはUNIX用のLF、文字コードはBOM無しのUTF-8で保存してください
- ダッシュボードに「CRON(定期実行)が動いていない可能性があります」と表示された場合や、解決しない場合は、初期セットアップ の「うまく動かないときは」を参照してください
- シェルスクリプトの
> /dev/null 2>&1は、実行結果を捨てる指定です(付けないと、5分おきに結果がメールで届くことがあります)。原因を調べるときは、これをいったん外し、cron設定で実行結果の通知メールアドレスを設定して、実行結果を確認してください。確認が終わったら、元に戻してください - 登録数の上限(エコノミー1件、ライト5件、スタンダード以上10件)を超えていないか確認してください
- 詳細は 集計されない も参照してください