应用场景:某些情况下,我们需要持续的周期性的提供一些服务,比如监控内存或cpu的运行状况,这些应用与客户端是没有关系的,不是说客户端(如web界面,手机app等)关闭了,我们就不监控内存或cpu了,为了应对这种业务场景,后台守护进程就可以派上用场了。

步骤:

1.创建一个daemon.php文件,内容如下:

<?php

class Daemon
{
/**
* 初始化一个守护进程
* @throws Exception
*/
public function init(){
// 创建一个字进程
$pid = pcntl_fork(); if ($pid == -1) {
throw new Exception('fork子进程失败');
} else if ($pid > 0) {
// 父进程退出, 子进程变成孤儿进程被1号进程收养, 进程脱离终端
exit(0);
} // 创建一个新的会话, 脱离终端控制, 更改子进程为组长进程
$sid = posix_setsid();
if ($sid == -1) {
throw new Exception('setsid fail');
} // 修改当前进程的工作目录, 由于子进程会继承父进程的工作目录, 修改工作目录以释放对父进程工作目录的占用
chdir('/'); /** 
* 通过上一步,我们创建了一个新的会话组长,进程组长,且脱离了终端,但是会话组长可以申请重新打开一个终端,为了避免
* 这种情况,我们再次创建一个子进程,并退出当前进程,这样运行的进程就不再是会话组长。 
*/
$pid = pcntl_fork();
if ($pid == -1) {
throw new Exception('fork子进程失败');
} else if ($pid > 0){
//再一次退出父进程,子进程成为最终的守护进程
exit(0);
}
//由于守护进程用不到标准输入输出,关闭标准输入,输出,错误输出描述符 
fclose(STDIN);
fclose(STDOUT);
fclose(STDERR); }
} $daemon = new Daemon;
$daemon->init; // 业务代码
while (true) {
echo 'success';
file_put_contents('/usr/local/src/log.txt', date('Y-m-d H:i:s').PHP_EOL, FILE_APPEND);
sleep(2);
}

2.以后台方式运行php脚本:

nohup php /usr/local/src/daemon.php &

3.查看日志输出:

tail -f /usr/local/src/log.txt  

4.关闭php后台进程:

首先,我们需要查出该进程的PID:

ps -ef | grep "php /usr/local/src/daemon.php"

然后,通过这个PID把该进程kill掉:

kill -9 22767    // 其中,22767就是php后台进程的PID号

5.开机自启

在实际的应用中,我们不可能每次都是手动开启,这样我们就会损失掉一部分业务数据,所以我们必须要让该进程开机自动运行,在/etc/rc.local文件中,加入以下即可

nohup php /usr/local/src/daemon.php &

原文地址:https://blog.csdn.net/echojson/article/details/79926880

基于Linux环境,创建PHP后台守护进程(转载)的更多相关文章

  1. 实用,Windows后台守护进程iNeuDaemon发布。Linux操作系统下使用使用supervisor

    目       录 1.      概述... 1 2.      iNeuDaemon部署... 2 3.      iNeuDaemon配置监控服务项... 3 4.      应用效果... 3 ...

  2. Linux中的两种守护进程stand alone和xinetd

    Linux中的两种守护进程stand alone和xinetd --http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html#top 一 ...

  3. 详解基于linux环境MySQL搭建与卸载

    本篇文章将从实际操作的层面,讲解基于linux环境的mysql的搭建和卸载. 1  搭建mysql 1.1  官网下载mysql压缩包 下载压缩包时,可以先把安装包下载到本地,再上传到服务器,也可以在 ...

  4. Windows 和 Linux 上Redis的安装守护进程配置

    # Windows 和 Linux 上Redis的安装守护进程配置 Redis 简介 ​ Redis是目前最常用的非关系型数据库(NOSql)之一,常以Key-Value的形式存储.Redis读写速度 ...

  5. Supervisor 管理后台守护进程

    Supervisor 管理后台守护进程 参考原文如下: http://codinn.com/people/brant/notes/110948/ 做了一些注释 +++++++++++引用开始+++++ ...

  6. Unix环境高级编程:守护进程

    参考 Unix环境高级编程,第9,13章 介绍 守护进程就是Linux中使用ps aux那些一般以d结尾的程序,比如rsyslogd,sshd等,为daemon简称.他们是长期在后台执行的随终端关闭而 ...

  7. [Linux] PHP程序员玩转Linux系列-使用supervisor实现守护进程

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  8. Unix环境高级编程(十三)守护进程

    守护进程也称为精灵进程是一种生存期较长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.他们常常在系统引导装入时启动,在系统关闭时终止.unix系统有很多守护进程,大多数 ...

  9. Linux下性能监控、守护进程与计划任务管理

    目录 一:监视系统进程(ps .top) 二:查看网络连接信息 (netstat) 三:文件进程.端口关联(lsof) 四:计划任务管理(at .crontab) at crontab 一:监视系统进 ...

随机推荐

  1. LINUX 安装扩展(笔记)

    1.下载扩展包: 网址:http://pecl.php.net/ 2.解压安装包. 3.进入解压好的安装包. 4.使用php中的phpize (扩展模块) 使其生成configure. 5../con ...

  2. 逆向工程vgenerator(一)

    前言 想要自己实现一个mybatis-generator类似的轮子,目前只实现MySQL部分的方法.利用下班时间,写了一个小项目,实现了这个功能.我准备分成三篇博客来写这个东西. 基类 /** *基类 ...

  3. 214. Spring Security:概述

    前言 在之前介绍过了Shiro之后,有好多粉丝问SpringSecurity在Spring Boot中怎么集成.这个系列我们就和大家分享下有关这方面的知识. 本节大纲 一.什么是SpringSecur ...

  4. 编译安装Python3

    转发https://www.cnblogs.com/resn/p/10135953.html 编译安装Python3 安装依赖 yum install -y ncurses-libs zlib-dev ...

  5. SAML 2.0初始

    一.背景知识: SAML即安全断言标记语言,英文全称是Security Assertion Markup Language.它是一个基于XML的标准,用于在不同的安全域(security domain ...

  6. element-ui Form表单校验

    使用element-ui自带的表单校验,注意几个点: 1.el-form通过rules属性,绑定校验规则 2.el-form-item的prop属性,设置为需要校验的字段名 3.提交后二次校验 sav ...

  7. 把一个syn报文给rst掉

    下面展示一个极其简单的例子,看如何使用netfilter来将一个指定端口的syn报文给rst掉. //************************************************* ...

  8. 使用mysqldump以分隔文本格式转储数据

    1.使用mysqldump以分隔文本格式转储数据 mysqldump --tab=/tmp/data --fields-terminated-by=, --fields-enclosed-by=&qu ...

  9. [Flutter] Windows/MacOS Flutter 环境走一遍

    Windows Install 1.系统需要:> win7 > 400M磁盘空间 Windows PowerShell(Windows 搜索框中找) Git for Windows 2.x ...

  10. Oracle 11gR2 客户端windows 10安装后PL/SQL配置

    操作系统:windows 10 软件:Oracle 11gR2 客户端 (64 bit) PLSQL Developer 13 (64 bit) 注意:PLSQL与oracle客户端版本要一致 1. ...