我正在尝试对我的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 &
所以我有四个问题。
如何从终端启动脚本?我应该输入什么?服务器上的脚本位置是:
/var/www/development_folder/scripts/push2/push.php
如果需要,我该如何杀死它(不必重新启动)?
由于推送通知很重要,我需要一种方法来检查脚本是否正在运行。 代码(来自教程)调用函数出错了:
function fatalError($message)
{
writeToLog('Exiting with fatal error: ' . $message);
exit;
}
也许我可以在那里放一些东西来重启脚本?但是,如果脚本正在运行,那么每隔5分钟左右检查一次cron作业或其他事情也会很好,并且如果它没有,则启动它。
4 - 我可以在apace或mysql重启后自动启动脚本吗?如果服务器崩溃或其他需要快速重启的事情发生?
提前多多感谢
答案 0 :(得分:8)
您可以使用以下命令运行脚本:
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.),如果它一直运行是很重要的。
只需输入
即可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这个过程现在应该消失了。
我建议您制作一个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
如果你想在启动系统后启动脚本,你可以在/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
使脚本在启动时启动。我没有测试过这个,所以请在制作自己的初始化脚本之前做更多的研究!