在debian上运行php脚本(Apache)

时间:2012-07-10 18:27:08

标签: objective-c apache apache2 push-notification debian

我正在尝试对我的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;
    }
    
  4. 也许我可以在那里放一些东西来重启脚本?但是,如果脚本正在运行,那么每隔5分钟左右检查一次cron作业或其他事情也会很好,并且如果它没有,则启动它。

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

    提前多多感谢

1 个答案:

答案 0 :(得分: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
    

    您将获得processid(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
    

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