2

我正在尝试在我的 debian vps(apace2,mysql)上进行推送通知。

我使用本教程中的 php 脚本 (http://www.raywenderlich.com/3525/apple-push-notification-services-tutorial-part-2)。

基本上,该脚本被放置在一个不定式循环中,每隔几秒钟检查一个 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 &

所以我有四个问题。

  1. 如何从终端启动脚本?我应该输入什么?服务器上的脚本位置是:

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

  2. 如果需要(无需重新启动),我该如何杀死它?

  3. 由于推送通知是必不可少的,我需要一种方法来检查脚本是否正在运行。代码(来自教程)调用函数出现问题:

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

也许我可以在那里放一些东西来重新启动脚本?但是如果脚本正在运行,如果有一个 cron 作业或每隔 5 分钟左右检查一次,如果它没有运行则启动它也很好。

4 - 我可以让脚本在 apace 或 mysql 重启后自动启动吗?如果服务器崩溃或发生其他需要快速重启的事情?

非常感谢提前

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. 我建议您创建一个 cronjob 来检查 php 脚本是否正在运行,如果没有,则启动它。您可以在 shell 脚本中使用 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 中创建一个文件(例如 /etc.init.d/mypushscript,其中包含以下内容:

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

    (你可能应该在这个文件中有更多)

    您还需要运行以下命令:

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

    使脚本在启动时启动。我没有对此进行测试,所以请在制作自己的初始化脚本之前做更多的研究!

于 2012-07-11T18:56:15.017 回答