phplistを共有レンタルサーバーで使うときに気をつけるべきこと
phplistを共有レンタルサーバーで使う場合に気をつけた方が良い(気をつけるべき)ことが大きく2つあります。
この2つについて対応方法を以降に記載します。
レンタルサーバーのメールの送信制限を越え無いようにする
この対応として、phplistでは2つのやり方があります。
いずれも
phplist/public_html/lists/config/config.php
ファイルを編集して設定を行います。
- Mailqueue batch processingによる対応
メールキューのバッチ処理を設定することで対応します
config.phpの設定例
# Send a batch of 360 messages per batch period:
define("MAILQUEUE_BATCH_SIZE",2);
# batch period is set to 3600 seconds (=1 hour):
define("MAILQUEUE_BATCH_PERIOD",120);
# Pause between messages (in seconds) to avoid overloading the server:
define('MAILQUEUE_THROTTLE',1);
|
この設定例は、
バッチを2個起動(MAILQUEUE_BATCH_SIZE=2)
送信する時間を120秒に設定(MAILQUEUE_BATCH_PERIOD=120)
送信する間隔を1秒に設定(MAILQUEUE_THROTTLE=1)
と設定しています。
つまり、バッチを2個使って1秒間隔で2通のメールを120秒中に送信する・・・ということです。
以下は、この設定で3つの送信先へメールを送信した時のメールのロギング情報です。
# 1番目のメールアドレスへの送信時刻
Received: by svxx.firebird.netowl.jp (Postfix, from userid 2046) id 206DC5600CA; Tue, 12 Jul 2011 17:00:25 +0900 (JST)
# 2番目のメールアドレスへの送信時刻
Received: by svxx.firebird.netowl.jp (Postfix, from userid 2046) id 2B5A45600CD; Tue, 12 Jul 2011 17:00:26 +0900 (JST)
# 3番目のメールアドレスへの送信時刻
Received: by svxx.firebird.netowl.jp (Postfix, from userid 2046) id 6A7C45600CA; Tue, 12 Jul 2011 17:02:27 +0900 (JST)
|
(120秒間で2通まで送信可能なため)2通までは、連続で送信します。
ちょっとわかり難いですが、MAILQUEUE_THROTTLEに1秒を設定してあるので、送信のタイミングが必ず1秒以上空いています。
3通目は、全体として120秒後に送信されることになります。
- Mailqueue throttleによる対応
メールキューのスロットルを設定することで対応します
config.phpの設定例
# batch processing disabled:
define("MAILQUEUE_BATCH_SIZE",0);
# Batch_period is not effective when batch processing is disabled:
define("MAILQUEUE_BATCH_PERIOD",3600);
# Pause between messages (in seconds) to send no more than 360 messages per hour:
define('MAILQUEUE_THROTTLE',60);
|
この設定例は、
バッチを無効(MAILQUEUE_BATCH_SIZE=0)
送信する時間を1日に設定(MAILQUEUE_BATCH_PERIOD=3600)
送信する間隔を60秒に設定(MAILQUEUE_THROTTLE=60)
と設定しています。
つまり、バッチを使わずに60秒間隔で1通のメールを1日中送信する・・・ということです。
(上記と同じように 120 秒の間に2通のメール送信を実施することに違いはありません。)
以下は、この設定で3つの送信先へメールを送信した時のメールのロギング情報です。
# 1番目のメールアドレスへの送信時刻
Received: by svxx.firebird.netowl.jp (Postfix, from userid 2046) id 005095600CA; Tue, 12 Jul 2011 11:34:00 +0900 (JST)
# 2番目のメールアドレスへの送信時刻
Received: by svxx.firebird.netowl.jp (Postfix, from userid 2046) id 0EE735600CA; Tue, 12 Jul 2011 11:35:01 +0900 (JST)
# 3番目のメールアドレスへの送信時刻
Received: by svxx.firebird.netowl.jp (Postfix, from userid 2046) id 105065600CA; Tue, 12 Jul 2011 11:36:01 +0900 (JST)
|
単純に、メールの送信間隔が60秒以上空いています。
3通目は、全体として120秒後に送信されることになります。
MAILQUEUE_BATCH_SIZE :
メールキューへのメール数を設定します。この値は、MAILQUEUE_BATCH_PERIODとともに使用されます。
この値が0の場合は、バッチを無効にすることになります。
MAILQUEUE_BATCH_PERIOD :
メールキューへの送信する時間(秒)を設定します。この値は、MAILQUEUE_BATCH_SIZEとともに使用されます。
つまり、MAILQUEUE_BATCH_PERIODで設定する時間内に、MAILQUEUE_BATCH_SIZEで設定するメール数分だけ送信することになります。
MAILQUEUE_THROTTLE :
メールキューへの送信間隔(秒)を指定します。MAILQUEUE_BATCH_SIZEといっしょに用いることもできますし、単独の設定も可能です。
つまり、メールとメールの間のインターバル(間隔)をここで指定する時間(秒)だけ、必ず空けてから、次のメール送信処理を行います。
レンタルサーバーのプロセス管理の制限を越え無いようにする
上記の設定例は、いずれも2分間(120秒)でメールを2通まで送信できます。
実際に上記の各設定での送信したロギング情報からも、いずれの設定でも約2分で3通のメールを送信できます。
しかし、サーバーへの送信タイミングが異なることに注意してください。
MAILQUEUE_THROTTLEを設定した場合、その設定した間隔でメールは送信され続けることに注意してください。
これは、一見サーバーに負荷がかからないように見えますが、MAILQUEUE_BATCH_SIZEが無効(0)でない限り、全てのメールを送信し終えるまでphplistのプロセスは、実行し続けます。
これは、サーバー管理者からは、異常に長いプロセスが動いているように見えるでしょう。
ここが問題になるところで、プロセスを生かし続けることは、本当は、それほどリソースを使うこともないのですが、共有レンタルサーバーでは、
だれもの無限に近いプロセスを自由に生成できてしまうとリソースは枯渇してしまいます。
そのため、共有レンタルサーバーではユーザが起動したプロセスがある一定期間以上起動したままの場合は、無条件に停止させてしまいます。
これに対して、MAILQUEUE_BATCH_SIZE, MAILQUEUE_BATCH_PERIOD を使ったメールキューバッチ処理を使うと、プロセスを一旦終了することができます。
ウェブブラウザからメールキューを実行した場合、ブラウザが定期的に再読み込みを自動的に実施し、キューバッチを随時実行するようになっています。
※画面左のキューの処理か、メッセージ送信後のメッセージキューを処理 をクリックすることでメール送信が実行されます。
ウェブブラウザからメールキューを実行しない場合は、Cronを使うことになります。
※Cronを使えば、もちろん画面での操作は必要なくなります。
以降では、Cronを使ったファイアバード(firebird)、さくらインターネットでの設定例を簡単に解説してみます。
MAILQUEUE_THROTTLEは、phplistの処理の中で、メールを送信する間隔をsleep or usleep を使って単純に待ち状態を作っているに過ぎません。
そのため、プロセスは終了せずに永遠と全ての対象メールを送信し終えるまで、生きている状態になるわけです。
ファイアバード(firebird)での設定例
ファイアバード(firebird)の場合、
1日当たり800通という送信制限になります。
また、サーバーへの負荷が高い場合は、NGなので一定間隔で送信することが望まれます。
10分あたり、5,6 通で、24時間実行した場合、
5通/10分 → 720通/日
6通/10分 → 864通/日
という計算になります。
ここでは、安全圏の5通/10分を採用して設定してみます。
※ここで、10分毎にするのは、Cronが最短で10分毎しか設定できないからです。
- config.phpの設定を行います。
# MAILQUEUE_BATCH_PERIOD 設定時間内で 5通メール を送信する
define("MAILQUEUE_BATCH_SIZE",5);
# MAILQUEUE_BATCH_SIZE 設定したメールを送信する時間を 580秒 とする
define("MAILQUEUE_BATCH_PERIOD",580);
# メール送信の間隔を 1秒 とする
define('MAILQUEUE_THROTTLE',1);
|
MAILQUEUE_BATCH_PERIODは、確実に10分以内に全ての処理が終了するための時間を設定します。
(ここでは、5通より若干大目でOKだからです。)
必ず、余裕を持たせた設定にしましょう。ここでは、本来、10秒程度の幅でも良いですが、さらに余裕を持たせて、20秒の余裕を持たせています。
- 次に、cronの設定を行います。
Cronの設定は、ファイアバード(firebird)のサーバー管理画面の左メニューのCron設定を選択します。
Cronの設定画面は、以下のように設定します。
ファイアバード(firebird)の場合、10分おきにという設定をカンマ区切りで設定します。
一般には、*/10 の設定で良いのですが、ここは、ファイアバード(firebird)の設定に従い、0,10,20,30,40,50 と設定します。
時、日、月、曜日には、*を指定します。
コマンドには、
/usr/bin/lynx -dump 'http://yourdomain/lists/admin/index.php?page=processqueue&login=admin&password=phplistpassword' > /home/usrid/yourdomain/public_html/temp/phplist.processqueue.html
|
と設定します。
lynxは、テキストブラウザ リンクスとよばれるもので、コマンドラインから、指定したURLの情報を取得し、表示するコマンドです。
ここでは、指定したURLの情報を吐き出して終了としています。
また、URLの各パラメータは、それぞれ環境によって変更する必要があります。
login=
admin:phplistのログインユーザ名を指定します。
password=
phplistpassword:phplistのログインユーザのパスワードを指定します。
lynxのパスは必ず、
whichで確認しておきましょう。
$ which lynx
/usr/bin/lynx
|
また、
/home/usrid/yourdomain/public_html/temp/は、存在する適当なディレクトリ名を指定します。
さくらインターネットでの設定例
さくらインターネットの場合、
250通/15分という送信制限になります。
この場合、下手に10分間隔にしてしまうと制限値を超えることもありえますので、ここは、この設定をそのまま使用します。
※ここでは、Cronの設定も15分毎に設定します。
- config.phpの設定を行います。
# MAILQUEUE_BATCH_PERIOD 設定時間内で 250通メール を送信する
define("MAILQUEUE_BATCH_SIZE",250);
# MAILQUEUE_BATCH_SIZE 設定したメールを送信する時間を 870秒 とする
define("MAILQUEUE_BATCH_PERIOD",870);
# メール送信の間隔を 1秒 とする
define('MAILQUEUE_THROTTLE',1);
|
MAILQUEUE_BATCH_PERIODは、送信時間+インターバル時間を含めてトータルで15分を超えるように設定します。
必ず、余裕を持たせた設定にしましょう。ここでは、本来、1秒のインターバルがあるので、もっと短くても良いはずですが、余裕を持たせて、30秒の余裕を持たせています。
- 次に、cronの設定を行います。
Cronの設定は、さくらインターネットのサーバーのコントロール画面の左メニューのCron設定を選択します。
Cronの設定画面は、以下のように設定します。
さくらインターネットの場合、15分おきにという設定に */15 が設定できます。
ここでは、*/15 と設定します。
時、日、月には、*を指定します。
実行コマンドには、
/usr/bin/lynx -dump 'http://yourdomain/lists/admin/index.php?page=processqueue&login=admin&password=phplistpassword' > /home/usrid/www/temp/phplist.processqueue.html
|
と設定します。
lynxは、テキストブラウザ リンクスとよばれるもので、コマンドラインから、指定したURLの情報を取得し、表示するコマンドです。
ここでは、指定したURLの情報を吐き出して終了としています。
また、URLの各パラメータは、それぞれ環境によって変更する必要があります。
login=
admin:phplistのログインユーザ名を指定します。
password=
phplistpassword:phplistのログインユーザのパスワードを指定します。
lynxのパスは必ず、
whichで確認しておきましょう。
$ which lynx
/usr/bin/lynx
|
また、
/home/usrid/www/temp/は、存在する適当なディレクトリ名を指定します。
今回は、かつかつの設定になっていますので、もう少しチューニングが必要かもしれません。
例えば、さくらインターネットの設定では、phplistのプロセスが、最大で500秒近くかかるかもしれません。
メールのインターバル(間隔)の設定をもう少し短く設定しても良いかもしれませんね。( 0.5 でも良いかも。 )
無料お試しは、
ファイアバード(firebird)は、https://www.star.ne.jp/からどうぞ。
さくらのレンタルサーバは、http://www.sakura.ne.jp/からどうぞ。
口コミ・評判
口コミ・評判を投稿 :