PHP程序员玩转Linux系列 使用supervisor实现守护进程
<p>PHP程序员玩转Linux系列文章:</p>
<p>
1.PHP程序员玩转Linux系列-怎么安装使用CentOS</p>
<p>
2.PHP程序员玩转Linux系列-lnmp环境的搭建</p>
<p>
3.PHP程序员玩转Linux系列-搭建FTP代码开发环境</p>
<p>
4.PHP程序员玩转Linux系列-备份还原MySQL</p>
<p>
5.PHP程序员玩转Linux系列-自动备份与SVN</p>
<p>
6.PHP程序员玩转Linux系列-Linux和Windows安装nginx</p>
<p>
7.PHP程序员玩转Linux系列-nginx初学者引导</p>
<p>
8.PHP程序员玩转Linux系列-Nginx中的HTTPS</p>
<p>
首先遇到的问题是,部署nodejs的博客程序时,我把执行nodejs的命令放到后台,使用加&和nohup命令</p>
<p>
如:<span>nodejs index.js & <span>或者</span> nohup nodejs index.js &</span></p>
<p>
&这个使用是当退出此次终端会话的时候就会停止, nohup这个命令理论上是可以后台一直执行的,但是当出现某些异常的时候,还是会退出.</p>
<p>
<strong>进程的基础概念</strong></p>
<p>
进程是执行程序的过程.unix系统的老祖宗内核进程的ppid都是是0,比如:init进程的pid是1,ppid是0;其他进程都是从init进程的基础上fork出来的,使用<span><strong>pstree</strong></span>命令可以看到进程树</p>
<p>
<img title="PHP程序员玩转Linux系列 使用supervisor实现守护进程" alt="PHP程序员玩转Linux系列 使用supervisor实现守护进程" src="https://zhuji.jb51.net/uploads/img/202305/14302e065a8930124bc041f14945a69a.jpg"></p>
<p>
测试使用&实现一个后台进程,并把后台进程再转回到前台,下面是把进程放到后台,这个是job的号</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_688939">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">ping</code> <code class="bash plain">baidu.com > xx.txt &</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<img title="PHP程序员玩转Linux系列 使用supervisor实现守护进程" alt="PHP程序员玩转Linux系列 使用supervisor实现守护进程" src="https://zhuji.jb51.net/uploads/img/202305/7c6326090ddbd90d39cfb4588dc5cdcf.jpg"></p>
<p>
把后台进程重新转到前台,%1的那个数字就是上面的job号</p>
<p>
<span>fg %1</span></p>
<p>
<strong>如何使用nohup这个命令 </strong></p>
<p>
nohup命令,这个命令是使进程忽略SIGHUP挂起(hangup)信号,测试如下:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_134972">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">nohup</code> <code class="bash functions">ping</code> <code class="bash plain">baidu.com > xx.txt &</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
进程信号如下:</p>
<p>
01 SIGHUP 挂起(hangup)<br>
02 SIGINT 中断,当用户从键盘按^c键或^break键时<br>
03 SIGQUIT 退出,当用户从键盘按quit键时<br>
04 SIGILL 非法指令<br>
05 SIGTRAP 跟踪陷阱(trace trap),启动进程,跟踪代码的执行<br>
06 SIGIOT IOT指令<br>
07 SIGEMT EMT指令<br>
08 SIGFPE 浮点运算溢出<br>
09 SIGKILL 杀死、终止进程<br>
10 SIGBUS 总线错误<br>
11 SIGSEGV 段违例(segmentation violation),进程试图去访问其虚地址空间以外的位置<br>
12 SIGSYS 系统调用中参数错,如系统调用号非法<br>
13 SIGPIPE 向某个非读管道中写入数据<br>
14 SIGALRM 闹钟。当某进程希望在某时间后接收信号时发此信号<br>
15 SIGTERM 软件终止(software termination)<br>
16 SIGUSR1 用户自定义信号1<br>
17 SIGUSR2 用户自定义信号2<br>
18 SIGCLD 某个子进程死<br>
19 SIGPWR 电源故障 </p>
<p>
<strong> 使用supervisor实现守护进程</strong></p>
<p>
守护进程,就是一直运行的收存周期很长的进程.使用supervisor可以实现这样的进程,该进程并且会在被杀掉的时候自动再次重启.</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_652402">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments">#安装supervisor</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">yum </code><code class="bash functions">install</code> <code class="bash plain">supervisor</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
在配置文件(/etc/supervisord.conf)配置一下:</p>
<p>
program:nodejsblog 这里:后面的是个名字,可以随便起<br>
command= 这里是要执行的命令<br>
user= 这里是执行用户</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_565775">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code>
</div>
<div class="line number2 index1 alt1">
<code class="bash functions">command</code><code class="bash plain">=</code><code class="bash plain">/usr/bin/nodejs</code> <code class="bash plain">/var/www/html/nblog</code> <code class="bash plain">index.js</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">user=root</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
开启<span> supervisord -c /etc/supervisord.conf </span></p>
<p>
此时nodejs的守护进程也会随着启动了可以使用ps命令去查看一下,并且在你kill该进程的时候,会自动重启.</p>
<p>
例如我这个例子中测试部署的nodejs网站http://nblog.qingguow.cn</p>
<p>
与此相关的博文:</p>
<p>
nodejs开发个人博客(七)后台登陆</p>
<p>
nodejs开发个人博客(六)数据分页</p>
<p>
nodejs开发个人博客(五)分配数据</p>
<p>
nodejs开发个人博客(四)数据模型</p>
<p>
nodejs开发个人博客(三)载入页面</p>
<p>
nodejs开发个人博客(二)入口文件</p>
<p>
nodejs开发个人博客(一)准备工作</p>
<p>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。</p>
<p>
原文链接:http://www.cnblogs.com/taoshihan/p/6693762.html</p>
頁:
[1]