linux常驻进程与非常驻进程,Daemontools和Supervisor管理linux常驻进程

linux主要使用supervise来管理常驻进程。基于supervise的两个比较重要的工具是Daemontools和Supervisor。

实际上,supervise也算Daemontools的一个工具。Daemontools是svscanboot,svscan,supervise,svc,svok,svstat等一系列工具的合集。

安装

执行安装后,所有的命令都放到了/command目录,并软链到/usr/local/bin/下面。

并且新建了/service目录来放置常驻脚本。

关系

安装完后,可以看到两个进程启动了。

root 199070.00.01936508?Ss17:120:00/bin/sh /command/svscanboot root 199090.00.01880376?S 17:120:00svscan /service

svscanboot启动svscan监视/service目录,svscan则为/service的每个进程都启动一个supervise服务。

supervise s 执行./s/run,如果s/down文件存在,则需要使用svc手动启用。(机器重启的时候防止自动启用)

如果往/service下面加入服务脚本,则可以在后台看到下面的进程。

root@test2:/opt/tiger/graphite_client/tsar-client_run# ps aux|grep superviseroot 39450.00.0393240?S 20130:00supervise location_search_8920 root 39460.00.0393228?S 20130:00supervise fenci_run root 39520.00.0393276?S 201344:04supervise tsar-client_run root 39530.00.0393252?S 20130:00supervise sentinel_run root 39540.00.0393220?S 20130:00supervise qiuzu_solr

supervise的状态信息以2进制的形式存放在s/supervise下面,并且提供了下面的工具来操作:

svstat: 读取状态信息

svc: 启动/停止/挂起等

svok: 检查是否运行成功

svscan:可靠的启动/service目录下的服务。如果某个服务加入后,没有启动,可以调用此命令,强制启动。

加入一个新服务

最简单的方式是建立一个文件夹

testsvc

├──main.py └──run

写入文件内容:

yijingping@yjp-pc:~/testsvc$ cat main.py #!/usr/bin/pythonimporttime importlogging whileTrue:time.sleep(1)logging.info('sleep 1 second')logging.error('sleep 1 second')yijingping@yjp-pc:~/testsvc$ cat run #!/bin/shexec./main.py 1>/var/log/main.py.log 2>&1

然后在/service目录下建立软链接

$ sudo ln -s /path/to/testsvc

这个时候可以检查一下服务是否正在运行:

yijingping@yjp-pc:~$ sudo svstat /service/testsvc /service/testsvc:up (pid 4204)962seconds yijingping@yjp-pc:~$ ps aux|grep supervise root 42030.00.01716248?S 09:370:00supervise testsvc 100056310.00.03784792pts/3S+09:540:00grep supervise yijingping@yjp-pc:~$ tree /service/testsvc /service/testsvc ├──main.py ├──run └──supervise [error opening dir]1directory,2files

上面这种方式的坏处是必须以root用户运行,如果想以其他用户运行,则需要做如下改进,假设用户为tiger,id为1001:

tigersvc

├──main.py ├──real_run └──run

文件内容:

tiger@yjp-pc:~/tigersvc$ cat run #!/bin/shwho=$(id -u)if[$who -eq 0];thenexec/usr/local/bin/setuidgid tiger ./real_run elif[$who -eq 1001];thenexec./real_run elseecho "neither root nor tiger"fitiger@yjp-pc:~/tigersvc$ cat real_run #!/bin/shexec./main.py 1>/var/log/tiger/main2.py.log 2>&1

加入服务后,查看后台进程以tiger为用户在运行:

yijingping@yjp-pc:/service$ ps aux|grep main.py tiger 246820.00.170523924?S 13:470:00/usr/bin/python ./main.py

管理服务

使用svstat来查看服务

yijingping@yjp-pc:/service$ sudo svstat testsvc testsvc:down 20seconds,normally up yijingping@yjp-pc:/service$ sudo svstat tigersvc tigersvc:up (pid 25046)230seconds

使用svc来管理服务

command mnemonic signal action

svc -u up bring service up

svc -d down put service down (stays down)svc -o once run service once (don't restart) svc -k kill SIGKILL send service KILL signal

如果要重启,必须先svc -d s,再svc -u s。

其他工具

log工具:

The readproctitle program

The multilog program

The tai64n program

The tai64nlocal program

环境工具:

The setuidgid program

The envuidgid program

The envdir program

The softlimit program

The setlock program

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值