ロリポップ!レンタルサーバーでのCRON設定
ロリポップ!レンタルサーバーで、CRM分析プラグインの集計用CRONを設定する手順です。
ロリポップ!のcron設定は、コマンドを直接入力するのではなく、実行するファイル(シェルスクリプト)のパスを指定する方式です。コマンドを書いたシェルスクリプトを2つ作り、FTPでアップロードして、cronに登録します。
前提条件
- ロリポップ!レンタルサーバーのユーザー専用ページにログインできること
- ライトプラン以上であること(CRM分析プラグインは2件のcronを登録します。エコノミープランは、後述の「エコノミープランの場合」を参照)
- EC-CUBEとCRM分析プラグインがインストール済みであること
- FTPで接続できること(シェルスクリプトのアップロードに使います)
- EC-CUBEの設置ディレクトリの絶対パスが分かること(例:
/home/users/●/アカウント名/web/ec-cube) - サーバーに、EC-CUBEが対応するバージョンのPHPがあること(
/usr/local/php/配下のフォルダで確認できます)
プランごとの登録数
ロリポップ!のcronは、プランによって登録できる数と、実行できる最短の間隔が異なります。
| プラン | 登録数 | 最短の実行間隔 |
|---|---|---|
| エコノミー | 1件 | 5分ごと |
| ライト | 5件 | 5分ごと |
| スタンダード以上 | 10件 | 1分ごと |
CRM分析プラグインでは、どのプランでも5分おきを推奨しています。
推奨スケジュール
| 用途 | 推奨 | コマンド |
|---|---|---|
| 集計ワーカー | 5分おき | eccube:crm-analytics42:worker |
| 日次登録 | 毎日 3:00 | eccube:crm-analytics42:enqueue-daily |
管理画面から集計を開始するとキューに登録され、次回のワーカー実行で処理が始まります。5分おきなら、開始までの待ちは最大で約5分です。
設定手順
- 集計ワーカー用と日次登録用のシェルスクリプトを、それぞれ作る(後述)
- FTPで
webフォルダの中のcronフォルダにアップロードし、パーミッション(権限)を700にする - Webから開けないようにする
.htaccessを、cronフォルダに置く(後述) - ユーザー専用ページの「cron設定」を開く
- 設定名、日付・曜日・時間、実行ファイルパスを入力して登録する
- 日次登録用も同様にもう1件登録する
PHPのパスを確認する
ロリポップ!のシェルでは、php とだけ書いても動きません。PHPのフルパスを指定します。
- パスは
/usr/local/php/バージョン/bin/phpの形式です(例: PHP 8.3 の場合は/usr/local/php/8.3/bin/php) - 使えるバージョンは、
/usr/local/php/配下のフォルダ名です。SSHが使える場合は、ls /usr/local/phpで確認できます - バージョンは、EC-CUBEが対応するバージョンに合わせてください(動作環境・対応バージョン を参照)
- この方法では、シェルスクリプトの中でPHPのパスを指定するため、cronを設定したときのドメインのPHPバージョン設定とは関係なく、指定したバージョンで動きます
シェルスクリプトを作成する
テキストエディタで、次の2つのファイルを作成します。
1. 集計ワーカー用(crm-worker.sh)
#!/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. 日次登録用(crm-enqueue-daily.sh)
#!/bin/sh
cd /home/users/●/アカウント名/web/ec-cube || exit 1
/usr/local/php/8.3/bin/php bin/console --no-debug eccube:crm-analytics42:enqueue-daily > /dev/null 2>&1
exit
作成するときの注意
/home/users/●/アカウント名/web/ec-cubeは、実際のEC-CUBE設置ディレクトリの絶対パスに置き換えてください。ダッシュボードの初期セットアップに表示されるコマンドのcdのあとのパスを使うと確実です/usr/local/php/8.3/bin/phpは、使うPHPのパスに置き換えてください- 1行目の
#!/bin/shと、最後のexitを付けてください - 改行コードは、Windows用のCR+LFではなく、UNIX用のLF にしてください。CR+LFのままだと、うまく動作しないことがあります
> /dev/null 2>&1は、実行結果を捨てる指定です。5分おきに動くため、付けないと実行のたびに結果がメールで届くことがあります
アップロードと権限の設定
- FTPソフトで接続し、
webフォルダの中にcronフォルダを作る(ロリポップ!のcron設定は、webフォルダ以下のファイルしか指定できません) cronフォルダに、2つのシェルスクリプトをアップロードする- それぞれのファイルのパーミッション(権限)を700に変更する
Webからアクセスできないようにする(.htaccess)
シェルスクリプトは、Webから見える web フォルダの中に置くことになります。スクリプトにはサーバー内のパスが書かれているため、Webから開けないようにしてください。次の内容で .htaccess というファイルを作り、web/cron フォルダにアップロードします。
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
アップロードしたら、ブラウザで https://ご利用のドメイン/cron/crm-worker.sh を開き、内容が表示されず、エラー(403 Forbidden など)になることを確認してください。先頭が「.」のファイルがFTPソフトに表示されない場合は、隠しファイルを表示する設定を確認してください。
cron設定に入力する内容
ユーザー専用ページの「cron設定」で、次のように登録します。「実行ファイルパス」には、web フォルダからのパスを入力します。
- 使える文字は、半角英数字と
-_./だけです。スペースを含むコマンド(php bin/console ...など)は入力できないため、シェルスクリプトを指定します - 先頭に
../や./は付けられません。先頭と末尾の/も付けられません(例:/cron/crm-worker.shではなくcron/crm-worker.sh)
1. 集計ワーカー(5分おき)
| 項目 | 入力内容 |
|---|---|
| 設定名 | CRM分析 worker(任意) |
| 日付・曜日・時間 | 毎日・すべての曜日・5分おき |
| 実行ファイルパス | cron/crm-worker.sh |
2. 日次登録(毎日 3:00)
| 項目 | 入力内容 |
|---|---|
| 設定名 | CRM分析 日次登録(任意) |
| 日付・曜日・時間 | 毎日・すべての曜日・3時0分 |
| 実行ファイルパス | cron/crm-enqueue-daily.sh |
入力後、「スケジュール」に表示される内容が、上の表のとおりになっていることを確認してください。
エコノミープランの場合
エコノミープランは、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分おきにします - スクリプトの時刻は、サーバーの時刻(日本時間)で判定されます
設定後の確認
- ダッシュボードの初期セットアップで、ワーカー側に「動作を確認しました」と出るか見る(登録から最大5分ほどかかります)
- 初期セットアップの「上記2つの登録が完了したらチェックしてください。」にチェックを入れる
- 管理画面から短い期間で集計を開始し、「定期実行の開始待ち」から実行中へ進むことを確認する
うまくいかないとき
phpとだけ書いていると、「command not found」となり動きません。PHPのフルパスを指定してください/usr/local/php/配下に、EC-CUBEが対応するバージョンのフォルダが無い場合は、CRM分析プラグインのCRONを実行できません。サーバーやご契約の時期によって使えるバージョンが異なるため、ロリポップ!のサポートにご確認ください- 「実行ファイルパス」は、
webフォルダからのパスです(先頭の/は付けません)。ファイルの場所と、ファイル名を確認してください - シェルスクリプトの改行コードがCR+LFだったり、パーミッションが700になっていないと、動かないことがあります
- ダッシュボードに「CRON(定期実行)が動いていない可能性があります」と表示された場合や、解決しない場合は、初期セットアップ の「うまく動かないときは」を参照してください
- 設置パスが違うとコマンドが動きません。SSHが使える場合は、シェルスクリプトを手動実行して確認できます
- 原因を調べるときは、シェルスクリプトの
> /dev/null 2>&1をいったん外し、cron設定で実行結果の通知メールアドレスを設定して、実行結果を確認してください。確認が終わったら、元に戻してください - 登録数の上限(エコノミー1件、ライト5件、スタンダード以上10件)を超えていないか確認してください
--no-debugが付いていないと、長時間集計でメモリ不足になることがあります- 詳細は 集計されない も参照してください