今天公司一个项目中为了保护某个进程不因意外死掉,所以需要保护,用supervise的意思是监督是否死掉了,如果死掉了,则通过run脚本启动。新接触这个东西,不会用,上网一搜,额滴神啊,全是那一个,什么test.c的那个。
先说一下我是怎么做的,假设你要保护的进程叫Process,那么一定要将这个程序放到一个名为Process的目录下(对了,就是要文件名和文件夹名一致,因为supervise命令指定的是文件夹),同时和Process文件(不是文件夹)一起还要有一个叫run的文件,就是一个简单的脚本,里边写的是在进程挂掉后执行的动作,通常是再次情动该进程。假如你的文件所在的绝对路径为/root/testdir/Process/Process,那么最简单的run脚本就是
#!/bin/bash
/root/testdir/Process/Process
最主要的是supervise设置,这个东西就是那个test.c用例让我不爽的地方,什么都没说明白,或者说没说全。开始我使用命令supervise /root/testdir/Process/Process 可是这个命令似乎是个死循环(其实不是,只是一直运行不会结束),然后我再打开一个终端,pgrep Process(得到该序的进程号),kill id(id为刚才命令显示的数字),在看pgrep Process,进程号改变了,这说明杀掉了该进程后supervise再次启动了该进程。可是问题是,那个supervise程序一直在运行着啊。如果CTRL+C关掉呢,重复上边检查进程的操作,果然Process不在受supervise保护,这个该怎么办呢。正当我对此无能为力的时候想起了同事的一句话,把文件链接到service以下,开始他说这个我没听懂。这会再试试
ln -s /root/testdir/Process /service/Process
OK!这是我赫然的发现Process进程起来了,可是我没有使用supervise命令啊?全部删除再来一遍,同样Process进程得到了保护。总的来说就是,建立Process文件夹,process文件和run文件,然后做的就是链接。
由于开始是在公司的开发环境上,我不知道是否有其他进程执行了supervise使链接到service下的文件都得到保护还是,哪位朋友如果知道可以告诉我,不胜感激!