Mac OS X Mavericks Server のメールサーバで正しくPush通知が送られない問題について。

| コメント(0) | トラックバック(0)
このエントリーをはてなブックマークに追加

みなさん、こんにちは。

近頃、iPhone、iPadユーザーが急激に増えた気がします。
さて、このiOSデバイス、キャリア以外のメールをプッシュで受信するにはAPNsという方法を利用しなければいけません。
このAPNsに対応しているメールサーバは今のところMac OS X Serverのみな気がします。(流石Apple・・・)
Apple純正のメールサーバ、謎なバグ(?)的なものがあるんですよね。
それが二時間おきにPush通知しなくなる・・・というもの。
以下がそのエラーログ
push_notify[121]: stream: received error: The operation couldn't be completed. Operation timed out on: incoming stream: APN to host: gateway.push.apple.com:2195
APNBridge[116]: Will attempt to reconnect stream APN to host gateway.push.apple.com:2195 in 15 seconds

同じようなエラーとして以下のサイトも見つかりました。

Lion Server push notifications to iOS5
https://discussions.apple.com/message/16800900#24471966

Lion Serverに設定したAppleプッシュ通知 メールを受信してもiPhoneにプッシュ通知がこない時がある
http://www.sa-sa-ki.jp/blog/2012/07/lion-server-apple-iphone/

Appleのサポートと掛け合った結果・・・

何も分かりませんでした。(´;ω;`)

(解決策は続きへ・・・)

サポートに電話して問題が解決しないため、ログを凝らして様子を観察しました。

二時間おきに送信できなということが分かり、焦点をpushを送るプロセスに当てた結果、そのデーモンを定期的にkillすることでいつでもpushを送ることが出来ました。
---
追記(2014/09/29)
下記のプログラムを簡単にインストールできるようにしたパッケージを以下より配布いたしました。

---
・・・ということで、
#!/usr/bin/perl

$| = 1;
while(1){
print "# ";
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
print  sprintf("%d", $year + 1900);
print "/" .  sprintf("%02d", $mon +1);
print "/" .  sprintf("%02d", $mday);
print " " .  sprintf("%02d", $hour);
print ":" .  sprintf("%02d", $min);
print ":" .  sprintf("%02d", $sec);
print " " .  sprintf("%s", ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")[$wday]);
print  "\n";
$test = `ps ax | grep -v grep | grep "aps" | awk '{ print \$1 }'  2>&1`;
for (split(/\n/, $test)){
my $test = $_;
print "kill:" . $test." aps\n";
system("kill $test");
}

$test = `ps ax | grep -v grep | grep "push" | awk '{ print \$1 }'  2>&1`;
$test =~ s/\n//ig;
print "kill:" . $test." push\n";
system("kill $test");

sleep 600;
}

プロセスを10分おきに停止させるプログラムです。起動時に実行してあげてください^^。kill後は、自動的にpushデーモンが再起動します。

---

使い方が分からない人のために:

1.ターミナルを起動します。(アプリケションのユーティリティフォルダにあります。)

スクリーンショット 2014-05-30 18.16.17.png

2.「vi PushKill.pl」と打ち込み、Return(Enter)キーを押します。

スクリーンショット 2014-05-30 18.18.38.png

3. すると下のような画面になるので一度だけ「i」キーを押します。
スクリーンショット 2014-05-30 18.19.13.png
4. 左下が「--INSERT--」になったのを確認します。
スクリーンショット 2014-05-30 18.20.09.png
5. 下記のコードを貼付けます。
#!/usr/bin/perl

$| = 1;
while(1){
print "# ";
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
print  sprintf("%d", $year + 1900);
print "/" .  sprintf("%02d", $mon +1);
print "/" .  sprintf("%02d", $mday);
print " " .  sprintf("%02d", $hour);
print ":" .  sprintf("%02d", $min);
print ":" .  sprintf("%02d", $sec);
print " " .  sprintf("%s", ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")[$wday]);
print  "\n";
$test = `ps ax | grep -v grep | grep "aps" | awk '{ print \$1 }'  2>&1`;
for (split(/\n/, $test)){
my $test = $_;
print "kill:" . $test." aps\n";
system("kill $test");
}

$test = `ps ax | grep -v grep | grep "push" | awk '{ print \$1 }'  2>&1`;
$test =~ s/\n//ig;
print "kill:" . $test." push\n";
system("kill $test");

sleep 600;
}

スクリーンショット 2014-05-30 18.22.08.png

6. [Esc]キーを押し、右下の「--INSERT--」が消えたのを確認します。
スクリーンショット 2014-05-30 18.23.02.png
7. 「:wq」と打ちます。(右下に:wqとなっていればOKです)
スクリーンショット 2014-05-30 18.24.04.png
8. [Enter]を押します。すると元の画面に戻ります。
スクリーンショット 2014-05-30 18.25.21.png
9.「chmod 0700 PushKill.pl」と打ち込み、[Enter]を押します。
スクリーンショット 2014-05-30 18.27.02.png
以上で、プログラムの作成は終了です。
あとはMacが再起動した後に、下記を実行して下さい。
1.ターミナルを起動します。(アプリケションのユーティリティフォルダにあります。)
スクリーンショット 2014-05-30 18.28.13.png
2.「sudo ./PushKill.pl」と打ち[Enter]を押します。
スクリーンショット 2014-05-30 18.29.12.png
3. パスワードを求められるので、ユーザーのパスワードを入れ、[Enter]を押して下さい。(入力されたパスワードは表示されません。)
4.下記のように実行され始めたら、完了です。
スクリーンショット 2014-05-30 18.31.49.png
このウインドウは、閉じてしまうと終了してまうので、そのまま開いた状態にしといてください。
これで大切な恋人からのメールも、怖い嫁さんからのメールもリアルタイムで届くようになるはずです。
---
追記(2014/09/29)
上記のプログラムを簡単にインストールできるようにしたパッケージを以下より配布いたしました。
http://blog.taporu.net/2014/09/os-x-server.html
---

トラックバック(0)

トラックバックURL: http://blog.taporu.net/system/mt-tb.cgi/16

コメントする

PR

プロフィール

ユーザ名:とっとこ。

このブログ記事について

このページは、とっとこが2014年5月30日 17:48に書いたブログ記事です。

ひとつ前のブログ記事は「Ubuntu (Linux) での VMWare Player が遅い件について。」です。

次のブログ記事は「H.264の動画ファイルをCGI経由で出力してiOSで再生させる方法。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

OpenID対応しています OpenIDについて

PR