在一些场合(如开发,测试), 可能需要使用PHP编写一些命令行的处理脚本,或者是长时间
后台运行的任务, 需要注意以下准则:

准则1. 尽量避免使用PHP编写后台运行程序, 尤其是类似while(true){….} 这种循环的处理脚本.

比如,有时候我们需要定期检查数据库,然后有数据进行处理,没有数据等待.
我强烈建议不要使用PHP编写这样的类似service的脚本. php的gc并不稳定, 当运行到一定时候,
会异常退出. 另外, PHP也不擅长做命令行脚本. 看看Phing, 号称PHP port的Ant, 但是性能
糟糕的一塌糊涂, 远不如使用几个unix工具+shell来的快捷. (更别提windows,那基本是不可用).

使用Perl,Python来完成相应的任务吧, 那会让你很愉快, 或者,Ruby也不错.

准则2 编译特殊版本的php
如果一定要沉迷于PHP解决, 那么首先, 重新编译PHP,去掉所有不实用的模块. 增加PHP的稳定性.

准则3 不要直接使用fork 或者 nohup
不要在PHP中直接使用fork来进入后台运行, 也不要直接使用nohup来运行直接运行php 循环脚本.

准则4 使用 shell guard 来完成PHP的后台循环运行
php的脚本只需要处理一次数据后马上退出,不要使用任何while(true) 这样的脚本来挂起等待.
相反的, 可以使用以下的shell gurad 来完成上述工作:
night9.cn# cat guard.sh
DIR=`pwd`
while true; do
echo “start php script ..”
php $DIR/thumbnail_worker.php
echo “respawn the worker…”

上面这种脚本我称之为shell guard.这样的好处是你的后台脚本永远可以可靠的运行,一旦因为php自身出现问题(如内存溢出),那么马上就可以立即重新执行.
对于检查,执行,休眠模式,可以使用和以下类似的:
while true; do
php ./realtime_data_worker.php
echo “paused 10s”
sleep 10
done

上述shell guard的另一个好处就是一旦你更新了Php文件, 下次运行时就是新的了. 而无须kill掉在重启.
特别适合频繁变更的情况,减少你的工作量.

准则5 可以在你PHP脚本中监控执行的情况, 当执行了一定次数或者内存消耗到一定,则exit, 释放占用的内存,
防止内存泄露.
这条一定要和shell guard来配合.

如果你用windows, 抱歉, 这不在我考虑的范围之内.

准则6 如果以上仍然无法解决一些问题, 那么请参考第一条,使用Perl/Python重写. 立刻会药到病除 

PS: 某些copy & paste的人儿, 转载我的笔记麻烦给个出处. 我现在知道某些人为何使用我不称我,而使用类似night9.cn认为这样的第三人称说法, 都是某些热衷把转载当自己原创使用的人害得,但每次我看到这样的第三人称总会稀稀拉拉掉一地鸡皮疙瘩.

我写的所有笔记和心得都是自己实践, 主要是为自己备忘使用,都是原创,无须声明.
有时候很纳闷, 转载有必要么?
google可以告诉你一切. 减少点碳排放吧.

转载于:https://www.cnblogs.com/martinjinyu/articles/4019345.html

PHP编写命令行脚本和后台运行程序的注意事项相关推荐

  1. linux 后台运行jar包命令,Linux 运行jar包命令(Cent OS 7后台运行jar包)

    Linux 运行jar包命令如下: 方式一 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 java -jar shareniu. ...

  2. 在后台运行程序/软件的Linux命令

    介绍 通常情况下,在 Linux 终端中运行命令时,我们必须等前一命令执行完成后,在输入并执行后一条命令,称之为在前台或前台进程中运行命令,进程在前台运行时,将占用您的外壳,并且您也可以使用输入设备与 ...

  3. linux后台运行程序命令screen

    linux后台运行程序命令screen 前言 screen的简单使用 1.创建一个会话窗口 2. 查看我们screen的会话 3. 恢复会话窗口,就是继续查看我们后台运行的程序 前言 我们在服务器终端 ...

  4. Linux nohup实现后台运行程序及查看(nohup与)

    Linux nohup实现后台运行程序及查看(nohup与&) 更新时间:2019年09月11日 09:28:40 作者:猿的生活 这篇文章主要介绍了Linux nohup实现后台运行程序及查 ...

  5. java应用程序如何编译运作_开发Java应用程序的基本步骤是: 1 编写源文件, 2.编译源文件, 3.运行程序。_学小易找答案...

    [判断题]Java源文件中只能有一个类. [简答题]任务32:开关电源PCB 设计.docx [多选题]企业的收入具体表现为一定期间: [简答题]任务33:CPLD逻辑电路自制元件与封装.docx [ ...

  6. 在linux前台和后台运行程序

    为什么要在linux命令前加上 ./ 简述 在chinaunix 论坛里找到的答案 原来Quote: unix或linux中除了path系统变量外的目录下的命令都要加./ 修改用户的 .bash_pr ...

  7. Linux 下后台运行程序,查看和关闭后台运行程序(转载)

    1.运行.sh文件 直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令. (1)&命令 功能:加在一个命令的最后,可以把这 ...

  8. 后台运行程序的几种方式

    后台运行程序的几种方式 目录 1. 当前终端后台运行 示例1,使用ctrl z, bg 示例2,使用& 示例3,重定向标准输出和标准错误输出 2. 脱离当前终端运行 示例4,使用nohup,忽 ...

  9. Linux 后台运行程序 Screen 服务器

    Linux后台运行python程序,断网||关机后仍能在继续在服务器上运行 常用screen参数: screen -S sess_name -> 新建一个叫sess_name的session s ...

最新文章

  1. tcp reno 介绍
  2. C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比
  3. h5上传图片_怎么搭建自己的H5响应式网站
  4. sql in 用法(mysql)
  5. python旋转坐标系_python实现一个点绕另一个点旋转后的坐标
  6. 自适应网页设计(Responsive Web Design)响应式设计
  7. css 商城 两列_css大法之使用伪元素实现超实用的图标库(附源码
  8. 前端酷炫效果参考_2020年大前端发展趋势
  9. mysql 增加分区_mysql在原有表的基础上添加分区
  10. 用srvany.exe将程序安装为windows服务的步骤链接
  11. c语言利用公式求sin(x)的近似值,用下列公式计算sin(x)的近似值
  12. VB.net单exe文件内MP3和WAV音乐文件播放
  13. java项目笔记 - 第16章:坦克大战1.0
  14. Android解析域名获取IP
  15. 用Java开发50个棋类游戏
  16. win10查看电池损耗
  17. 转载一篇介绍 WordPress 的文章
  18. 希尔排序的思路及实现解析
  19. 贪心算法(Greedy)
  20. 微信小程序中使用vant组件库(超详细)

热门文章

  1. java中boolean类型占几个字节
  2. ecshop各个文件夹作用
  3. 学用 TStringGrid [1] - ColCount、RowCount、Cells
  4. DataDirectory是什么?
  5. Java2实用教程(第二版)程序代码——第十四章 Component类的常用方法
  6. mysql 删除记录代码_mysql 删除记录时报错
  7. Python2和Python3的兼容性写法
  8. Spring Boot 项目瘦身指南,瘦到不可思议!129M->1.3M
  9. 用Elasticsearch代替数据库存储日志方式
  10. 4、Flutter 采坑记录篇二_依赖库不兼容