upstart重新唤起php进程

最近项目中有个php脚本进程自己偶尔挂掉了,每次都需要手动重启,用upstart可以轻松解决此问题

说到upstart之前,我先来说下linux的启动过程,分为5个阶段 内核的引导–》运行init–》系统初始化–》建立终端–》用户登录
upstart重新唤起php进程_第1张图片
而init程序的类型有

  • SysV: init, CentOS 5之前, 配置文件: /etc/inittab
  • Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system0
  • Uptart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf
    Ubutu从6.10就开始用upstart()代替原来的sysVint,centos也用systemd 代替sysvint,对服务进程的管理

Upstart作业的10种状态:

   waiting: 初始状态。
  starting: 作业开始启动。
  pre-start: 运行pre-start配置节。
  spawned: 运行script或exec节。
  post-start: 运行post-start节。
  running: 运行完post-start节之后的临时状态,表示作业正在运行(但可能没有关联的PID)。
  pre-stop:运行pre-stop节。
  stopping:运行完pre-stop节之后的临时状态。
  killed: 作业要被终止。
  post-stop: 运行post-stop节。
  
  作业的状态可通过inictl status命令输出的中status域来显示给用户。

因为upstart启动会自动加载/etc/init/ 目录下所有的*.conf文件,所以我在该目录下编辑文件
vim /etc/init/async_user_regist.conf


description "async user register"
author "sunny"
start on startup
stop on shutdown
respawn
script
   /usr/local/php7/bin/php -f /home/ubuntu/work/heyhou-backend/script/async_user_register.php
end script
pre-start script
    exec echo sync_user_register pre-start >> /home/ubuntu/upstart.txt
end script
post-start script
    exec echo async_user_register post-start >> /home/ubuntu/upstart.txt
end script
pre-stop script
    exec echo async_user_register pre-stop >> /home/ubuntu/upstart.txt
end script
post-stop script
    exec echo async_user_register post-stop >> /home/ubuntu/upstart.txt
end script

这个地方需要注意下。当sudo start async_user_regist 切换成了root用户,与当前用户ubuntu所在的环境不同,php最好写全路径/usr/local/php7/bin/php
initctl是一个具有root权限的管理员可以使用init进程管理控制工具,可以通过这个工具和Upstart init daemon进行通信。initctl可以用来启动或终止作业、列表作业、以及获取作业的状态、发出事件、重启init 进程等等。比如initctl list让您可以通过标识作业状态来深入了解系统操作,它告诉您目前正在等待哪些服务以及哪些服务目前是活动的。initctl工具还可以显示用于调试而接收的事件
initctl基本用法 

initctl help
作业 commands:
  start                       Start job.
  stop                        Stop job.
  restart                     Restart job.
  reload                      Send HUP signal to job.
  status                      Query status of job.
  list                        List known jobs.

保存 退出
sudo initctl start async_user_regist 或者sudo start async_user_regist 重点内容

你可能感兴趣的:(linux)