1、定时执行
就crontab了,linux命令,具体怎么用,自己google。只想说一点,crontab的时候需要注意权限,运维经常会用root来启动,导致有些文件web用户无权限。
2、后台守护
分两步:1需要在脚本中写死循环,因为php不像python,我一般是 do {....} while (true); 不过循环体里面一般要加个sleep的,不然机器会被跑死;2启动进程的时候需要在后面加个“&” ,这个大家也google吧,如果需要记录输出的信息需要这样写 php xxxx.php > /tmp/phplog &,这样程序的信息就记录到文件里了,方便以后排除问题。
3、运行监控
后台守护的进程启动了,但是你无法100%肯定你的程序不会出现警告信息,一旦出现这些信息,php会终止掉当前的进程,这个时候后台的程序就直接退出了。所以除了正常处理事情的程序外,还需要一个检查那个程序运行状态的程序,我一般会叫xxxxDefend.php,这个程序示例如下
#!/usr/local/php5/bin/php
<?php
//启动的命令
$action = '/usr/local/php5/bin/php xxxxxx.php';
$logPath = '/tmp/logs/';
do {
$result = array();
exec("ps aux | grep 'xxxxxx.php'", $result);
$isOk = 0;
foreach ($result as $v) {
$is = strpos($v, $action);
if (false !== $is) {
$isOk++;
}
}
$exec = $action . " > " . $logPath . "xxxxxx_log &";
for ($i=1;$i<=(5-$isOk);$i++) {
exec($exec);
}
sleep(5);
} while (true);
把这个程序也在后台启动起来,它就会每隔5秒用ps命令检查下工作的程序是否存在,不在或者不足5个的时候,就启动到5个。当然这个工作也可以交给运维用shell来做,不过当运维能力不足的时候就得自己来了。
4、多进程
工作的php为了增加效率,一般情况下会同时启动多个,甚至是运行在多台机器上。这个时候就要考虑到多进程同时处理同一个数据的问题。这个时候一般我会吧任务做一个队列(一般用redis,这个性能蛮不错的,怎么做,大家还是google吧),然后工作程序每次pop出一条要工作的记录,比如你有一个很大的文件要处理,这个时候我一般把文件处理好,一条一条的放到redis的list里,这样工作的程序就可以多个程序一起pop,并行执行,而且不会重复。如果实在没有redis,可以用mysql做,建个innodb的表,程序处理的之前务必在要处理的数据上加个读锁,然后处理之后加标记,或者直接删掉那条数据,这样也可以实现多进程不重复的问题。
5、日志
后台的程序一般会一直跑的,基本上不出事没人会理它,所以日志异常重要,因为一旦出事了,需要靠日志来找原因的,不像前台的程序可以echo看看错在哪里。日志不要怕记的多,不要怕浪费空间,硬盘不值钱的,但是一个bug可能会直接影响你的收入。我一般这样记日志
[机器ip] [进程pid] [时间] [当前程序文件名] [文件行数] [必要的参数和信息] [其他]
这些是正常的程序中能想到的问题,一般还会在程序的最外层加个try catch,这样能够捕获大部分的异常,然后也记录下来(警告catch不到,挺郁闷的)
6、性能优化
像这种后台的程序,一般运维都会单独给机器,这个时候需要做下压力测试,看看机器究竟能跑几个进程,这个一般在处理程序狂处理任务的时候看看机器的cpu,内存,网络,以及硬盘的使用情况,最好是这些同时达到最大值,这样你的这台机器就不浪费了,如果硬盘使用率很高,其他的很低,就要优化程序,这个情况一般是吧读取和写入的数据在内存中暂存一段时间,然后一次性写入硬盘;如果cpu狂高,那就是你的算法太搓了,优化优化吧;内存和网络一般不会成为瓶颈,php用不了多少内存,服务器至少也得是个千兆的网卡吧,这两项一般不会是瓶颈。所以这些机器我一般会再开个memcache,哈哈,不浪费。
7、题外话
一个关于服务器close_wait的问题。php的程序员一般都不太严谨,很少有人开了链接之后会主动关闭连接的,比如连数据库,连memcache,很多程序员都是建链接,操作,然后程序执行完成。如果php不主动关闭连接,会导致对方的机器一直会等待这边的关闭操作,在对方服务器上看到的就是一个close_wait状态,而一台机器能开的链接也就那么6万多个,尤其是后台的程序跑起来之后,对方的机器很快就被占满了,然后连不上。这个时候2边都需要做些修改,一方面php要主动断开连接,另一方面对方的机器,需要吧close_wait的默认超时时间改短一点(怎么改?自己google去),我一般memcache的只有5秒,数据库的长点,也就2分钟。这样处理之后,服务器的持续性就大大增加了,并发能力也会提高。
分享到:
相关推荐
php后端的微信小程序商城,压缩包中分为小程序安装教程、前端、后端。在此小程序中,用户可进行商品的浏览、分类选择、支付等完整的购物体验。后台功能完整,运行稳定,与小程序前端完美融合,可直接上线运营。
微信小程序获取OpenID +php后端完整源代码。里面包含完整的PHP后台程序和微信小程序端程序,简单修改里面的配置信息就可以运行。
微信小程序-搭伴拼团php后端源码。资源中包含了详细的系统图文搭建教程。源码都是实际项目,经过测试可以正常稳定运行在服务器,需要具备基础服务器搭建知识,不会搭建的请谨慎购买。
包含基本的代驾功能,内部基于腾讯地图开发,后端后台由thinkPHP+bootstarp开发,小程序由uniapp开发,二开需要安装hblider,代码结构清晰,支持二开,版权只支持自用,不可出售!!! 1.基于ThinkPHP+Bootstrap的...
微信小程序-语音日记本;php后端源码。资源中包含了详细的系统图文搭建教程。源码都是实际项目,经过测试可以正常稳定运行在服务器,需要具备基础服务器搭建知识,不会搭建的请谨慎购买。
微信小程序-外卖搭伴拼团php后端源码。资源中包含了详细的系统图文搭建教程。源码都是实际项目,经过测试可以正常稳定运行在服务器,需要具备基础服务器搭建知识,不会搭建的请谨慎购买。
基于微信小程序医院预约挂号系统PHP后端接口 开发软件:Idea/Vscode等都可以 + 微信开发者工具 + Mysql 开发技术环境:小程序客户端 + PHP后端Laravel框架接口 + 小皮面板(phpstudy环境) 这里个项目是一个基于小...
叮咚-超级外卖餐饮小程序+前端+后端php+数据库,这外卖小程序太详细了,有天降红包还有什么活动的,不是我需要的,我就是想要简单的点餐,获取地址,付款这些功能就好了,所以把这款放出来给有需要的人,我不太会...
本医院预约挂号系统小程序以php语言,b/s模式以及MySql作为后台运行的数据库。本系统主要包括首页、个人中心、用户管理、医生管理、科室分类管理、医生信息管理、预约挂号管理、系统管理等功能,通过这些功能的实现...
基于微信小程序失物招领平台app设计php后端毕业源码案例设计 开发技术:微信小程序客户端 + PHP后台服务器端 + mysql数据库 客户端用户通过可以浏览所有人发布的失物信息和招领信息,如果用户要发布和管理自己的...
YiiFrame 是一个通用的Web编程框架,可完美运行在linux、mac和windows环境下,用于开发各种基于PHP构建的Web应用程序,包括APP、小程序、H5、网站等。 基于插件的框架结构特别适合开发大型应用系统的后端和提供接口...
该项目代码主要针对计算机、自动化等相关专业的学生从业者下载使用,项目代码都经过严格调试,确保可以运行!放心下载使用。 也可作为期末课程设计、课程大作业、毕业设计等。具有较高的学习借鉴价值!也可直接当做...
基于微信小程序表白墙平台app设计PHP后端毕业源码案例设计 开发技术:微信小程序客户端 + PHP后台服务器端 + mysql数据库 客户端用户通过可以浏览所有人发布的表白信息,如果用户要发布和管理自己的表白信息,需要...
微信小程序-商城类完整demo:DFS:前端、PHP后端源码。资源中包含了详细的系统图文搭建教程。源码都是实际项目,经过测试可以正常稳定运行在服务器,需要具备基础服务器搭建知识,不会搭建的请谨慎购买。
开发技术环境:小程序客户端 + PHP后端Laravel框架接口 + 小皮面板(phpstudy环境) 这里个项目是一个基于小程序的医院预约挂号系统,一共3个身份包括管理员,医生和用户。医生登录web端后台后可以发布自己的出诊日期...
ThinkPHP5.0的运行环境要求PHP5.4以上,PHP5.7可能会加密会议报错建议用PHP5.5。 ##使用说明 根目录配置到thinkphp-exam / public /下 新建一个数据库考试,将thinkphp / data / exam.sql导入到数据库中 修改...
PHP调度器具有可插入后端的 PHP 调度程序/任务运行器。 注意:这是一个实验。 您可能不应该在生产中使用它! 创建任务对象并安排它们在其他地方运行。 您可以使用PHPScheduler安排作业在将来运行,或者只是安排它们...
API服务Stacha.dev安装方式克隆存储库: git clone https://github.com/Stacha-dev/tardis.git && cd tardis 运行安装脚本./bin/install.sh <db> <db> <db> 生成root用户composer app:password 发展更新git pull ...
毕业设计,微信小程序+PHP后端+MySql开发的家政服务预约系统,内含完整源代码,数据库脚本,任务书,论文答辩,视频教程 网络和科学技术的发展改变了人类的生活。科技的进步使计算机技术生活化,帮助人们的工作和...