Ubuntu 安装与使用supervise

supervisedaemontools的一个工具,可以用来监控管理Unix下的应用程序运行情况,在应用程序出现异常时,supervise可以重新启动指定程序。

安装

  1. root身份安装:
    apt install daemontools
root@VM-0-15-ubuntu:~# apt install daemontools
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  amd64-microcode intel-microcode iucode-tool libmysqlclient20 libssl-dev zlib1g-dev
Use 'apt autoremove' to remove them.
Suggested packages:
  daemontools-run | runit
The following NEW packages will be installed:
  daemontools
0 upgraded, 1 newly installed, 0 to remove and 231 not upgraded.
Need to get 57.7 kB of archives.
After this operation, 308 kB of additional disk space will be used.
Get:1 http://mirrors.tencentyun.com/ubuntu bionic/universe amd64 daemontools amd64 1:0.76-6.1 [57.7 kB]
Fetched 57.7 kB in 0s (1,509 kB/s)
Selecting previously unselected package daemontools.
(Reading database ... 101900 files and directories currently installed.)
Preparing to unpack .../daemontools_1%3a0.76-6.1_amd64.deb ...
Unpacking daemontools (1:0.76-6.1) ...
Setting up daemontools (1:0.76-6.1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
  1. 检查安装
root@VM-0-15-ubuntu:~# supervise
supervise: usage: supervise dir
root@VM-0-15-ubuntu:~#
root@VM-0-15-ubuntu:~/supervise_test# which supervise
/usr/bin/supervise
root@VM-0-15-ubuntu:~/supervise_test#

使用示例

  1. 在/home/ubuntu/目录下创建文件夹supervise_test:
cd /home/ubuntu/
mkdir supervise_test
cd supervise_test/
  1. 在文件夹supervise_test下创建要执行的脚本sup_test.sh:
root@VM-0-15-ubuntu:~/supervise_test# vim sup_test.sh
#!/bin/bash

while true
do
  echo "This is a supervise test!"
  sleep 2
done

esc、:wq保存。添加可执行权限:

chmod +x sup_test.sh
  1. 在文件夹supervise_test下创建run文件:
root@VM-0-15-ubuntu:~/supervise_test# vim run
#!/bin/bash

/home/ubuntu/supervise_test/sup_test.sh >>/home/ubuntu/supervise_test/test.log

esc、:wq保存。添加可执行权限:

chmod +x sup_test.sh

run启动要执行的脚本sup_test.sh,并把输出重定向到test.log中。

  1. 使用supervise启动sup_test.sh:
supervise /home/ubuntu/supervise_test/ &

注意:supervise后面的参数为run文件所在的文件夹的路径。

查看sup_test.sh是否启动:

root@VM-0-15-ubuntu:~/supervise_test# ps -ef | grep sup_test.sh | grep -v grep
root       403   402  0 15:15 pts/0    00:00:00 /bin/bash /home/ubuntu/supervise_test/sup_test.sh

sup_test.sh的PID为403,父进程ID为402
查看sup_test.sh的日志:

root@VM-0-15-ubuntu:~/supervise_test# tail -f test.log
This is a supervise test!
This is a supervise test!
This is a supervise test!
This is a supervise test!
This is a supervise test!
This is a supervise test!
This is a supervise test!
This is a supervise test!

上面说到父进程ID为402,查看ID为402的进程:

root@VM-0-15-ubuntu:~/supervise_test# ps -ef | grep 402 | grep -v grep
root       402   401  0 15:15 pts/0    00:00:00 /bin/bash ./run
root       403   402  0 15:15 pts/0    00:00:00 /bin/bash /home/ubuntu/supervise_test/sup_test.sh

进程402/bin/bash ./run,它的父进程ID为401,查看ID为401的进程:

root@VM-0-15-ubuntu:~/supervise_test# ps -ef | grep 401 | grep -v grep
root       401 29070  0 15:15 pts/0    00:00:00 supervise /home/ubuntu/supervise_test/

进程401就是刚刚执行的supervise指令。

由此可见,supervise /home/ubuntu/supervise_test/执行了/home/ubuntu/supervise_test下的run文件,run文件继而执行了sup_test.sh。

另外,执行supervise指令后,在/home/ubuntu/supervise_test/文件夹下,
自动生成了一个名为supervise的文件夹:

root@VM-0-15-ubuntu:~/supervise_test# ls -lh
total 56K
-rwxr-xr-x 1 root root   95 Jul  5 15:13 run
drwx------ 2 root root 4.0K Jul  5 15:19 supervise
-rwxr-xr-x 1 root root   80 Jul  5 15:12 sup_test.sh
-rw-r--r-- 1 root root  39K Jul  5 16:06 test.log
root@VM-0-15-ubuntu:~/supervise_test#
root@VM-0-15-ubuntu:~/supervise_test# ll ./supervise
total 12
drwx------ 2 root root 4096 Jul  5 15:19 ./
drwxr-xr-x 3 root root 4096 Jul  5 15:35 ../
prw------- 1 root root    0 Jul  5 15:15 control|
-rw------- 1 root root    0 Jul  5 15:15 lock
prw------- 1 root root    0 Jul  5 15:15 ok|
-rw-r--r-- 1 root root   18 Jul  5 15:19 status
root@VM-0-15-ubuntu:~/supervise_test#

测试

测试supervise能否起到守护进程的作用。

  1. 停止sup_test.sh:
root@VM-0-15-ubuntu:~/supervise_test# kill -9 403
root@VM-0-15-ubuntu:~/supervise_test# ./run: line 3:   403 Killed                  /home/ubuntu/supervise_test/sup_test.sh >> /home/ubuntu/supervise_test/test.log

root@VM-0-15-ubuntu:~/supervise_test# ps -ef | grep sup_test.sh | grep -v grep
root      1395  1394  0 15:19 pts/0    00:00:00 /bin/bash /home/ubuntu/supervise_test/sup_test.sh
  1. 查看sup_test.sh是否被重新执行:
root@VM-0-15-ubuntu:~/supervise_test# ps -ef | grep sup_test.sh | grep -v grep
root      1395  1394  0 15:19 pts/0    00:00:00 /bin/bash /home/ubuntu/supervise_test/sup_test.sh

可以看到,sup_test.sh被重新执行了,进程ID为1395,父进程ID为1394。查看父进程:

root@VM-0-15-ubuntu:~/supervise_test# ps -ef | grep 1394 | grep -v grep
root      1394   401  0 15:19 pts/0    00:00:00 /bin/bash ./run
root      1395  1394  0 15:19 pts/0    00:00:00 /bin/bash /home/ubuntu/supervise_test/sup_test.sh

父进程依旧是 ./run,不过,父进程ID不再是402,但是父进程的父进程ID仍然为401。

由此可见,sup_test.sh的进程实例被停止之后,/bin/bash ./run被重新执行,进而创建一个新的sup_test.sh的进程实例,以此达到守护sup_test.sh的目的。

参考链接:The supervise program

【完】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值