ロリポップ!レンタルサーバーでの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:00eccube:crm-analytics42:enqueue-daily

管理画面から集計を開始するとキューに登録され、次回のワーカー実行で処理が始まります。5分おきなら、開始までの待ちは最大で約5分です。

設定手順

  1. 集計ワーカー用と日次登録用のシェルスクリプトを、それぞれ作る(後述)
  2. FTPで web フォルダの中の cron フォルダにアップロードし、パーミッション(権限)を700にする
  3. Webから開けないようにする .htaccess を、cron フォルダに置く(後述)
  4. ユーザー専用ページの「cron設定」を開く
  5. 設定名、日付・曜日・時間、実行ファイルパスを入力して登録する
  6. 日次登録用も同様にもう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分おきに動くため、付けないと実行のたびに結果がメールで届くことがあります

アップロードと権限の設定

  1. FTPソフトで接続し、web フォルダの中に cron フォルダを作る(ロリポップ!のcron設定は、web フォルダ以下のファイルしか指定できません)
  2. cron フォルダに、2つのシェルスクリプトをアップロードする
  3. それぞれのファイルのパーミッション(権限)を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分おきにします
  • スクリプトの時刻は、サーバーの時刻(日本時間)で判定されます

設定後の確認

  1. ダッシュボードの初期セットアップで、ワーカー側に「動作を確認しました」と出るか見る(登録から最大5分ほどかかります)
  2. 初期セットアップの「上記2つの登録が完了したらチェックしてください。」にチェックを入れる
  3. 管理画面から短い期間で集計を開始し、「定期実行の開始待ち」から実行中へ進むことを確認する

うまくいかないとき

  • 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 が付いていないと、長時間集計でメモリ不足になることがあります
  • 詳細は 集計されない も参照してください

関連ページ

CRM分析プラグイン

EC-CUBEの会員・受注データを分析し、リピート率や休眠顧客の把握、AIによる改善提案まで行えるプラグインです。