2

Debian vps (apace2、mysql) でプッシュ通知を機能させようとしています。

このチュートリアル (http://www.raywenderlich.com/3525/apple-push-notification-services-tutorial-part-2) の php スクリプトを使用します。

基本的に、スクリプトは無限ループに入れられ、数秒ごとに mysql テーブルの新しいレコードをチェックします。チュートリアルには、バックグラウンド プロセスとして実行する必要があると記載されています。

// This script should be run as a background process on the server. It checks
// every few seconds for new messages in the database table push_queue and 
// sends them to the Apple Push Notification Service.
//
// Usage: php push.php development &

そこで、質問が 4 つあります。

  1. ターミナルからスクリプトを開始するにはどうすればよいですか? 何を入力すればよいですか?サーバー上のスクリプトの場所は次のとおりです。

    /var/www/development_folder/scripts/push2/push.php

  2. 必要に応じて (すぐに再起動せずに) 強制終了するにはどうすればよいですか?

  3. プッシュ通知は必須なので、スクリプトが実行されているかどうかを確認する方法が必要です。コード(チュートリアルから)が関数を呼び出すと、何か問題が発生します:

    function fatalError($message)
    {
     writeToLog('Exiting with fatal error: ' . $message);
     exit;
    }
    

たぶん、スクリプトを再起動するために何かを入れることができますか? しかし、スクリプトが実行されているかどうかを 5 分ごとにチェックし、実行されていない場合は開始する cron ジョブなどを用意することもできます。

4 - apace または mysql の再起動後にスクリプトを自動的に開始することはできますか? サーバーがクラッシュしたり、apace の再起動が必要な何かが発生した場合は?

事前にどうもありがとう

4

1 に答える 1

8
  1. 次のコマンドでスクリプトを実行できます。

    nohup php /var/www/development_folder/scripts/push2/push.php > /dev/null &
    

    nohup は、ターミナル ウィンドウを閉じたときなどに、コマンドが終了しない (ハングアップ シグナルを無視する) ことを意味します。これを気にしない場合は、代わりに「php /var/www/development_folder/scripts/push2/push.php &」でプロセスを開始できます。PS!nohup はスクリプト出力をデフォルトで nohup.out というファイルに記録します。これが必要ない場合は、ここで行ったように > /dev/null を追加してください。最後の & は、プロセスがバックグラウンドで実行されることを意味します。コードをテストしている間だけ、このようなプッシュ スクリプトを開始することをお勧めします。常に実行することが重要な場合は、代わりにシステム起動時にスクリプトをデーモンとして実行する必要があります (4. を参照)。

  2. 入力するだけ

    ps ax | grep push.php
    

    そして、プロセス ID (pid) を取得します。次のようになります。

    4530 pts/3    S      0:00 php /var/www/development_folder/scripts/push2/push.php
    

    pid は、最初に表示される数値です。その後、次のコマンドを実行してスクリプトを強制終了できます。

    kill -9 4530
    

    ps ax | を実行した場合 もう一度 grep push.php を実行すると、プロセスは終了するはずです。

  3. php-script が実行されているかどうかを確認する cronjob を作成し、実行されていない場合は開始することをお勧めします。これは、シェル スクリプト内の ps ax および grep チェックで行うことができます。このような何かがそれを行う必要があります:

    if ! ps ax | grep -v grep | grep 'push.php' > /dev/null
    then
      nohup php /var/www/development_folder/scripts/push2/push.php > /dev/null &
    else
      echo "push-script is already running"
    fi
    
  4. システムの起動後にスクリプトを起動する場合は、/etc/init.d にファイルを作成できます (例:

    php /var/www/development_folder/scripts/push2/push.php
    

    (おそらく、このファイルにはもっとたくさんあるはずです)

    次のコマンドも実行する必要があります。

    chmod +x /etc/init.d/mypushscript
    update-rc.d mypushscript defaults
    

    起動時にスクリプトを開始するようにします。私はこれをテストしていないので、独自の init スクリプトを作成する前に、さらに調査を行ってください。

于 2012-07-11T18:56:15.017 に答える