Ubutun16.04安装和使用daemontools

1.前期准备工作     

  •     说明:与任何其他软件一样,daemontools不提供担保。
  •     系统要求: daemontools只能在UNIX下工作。
  •     下载流程(root权限下):
 mkdir -p /package
 chmod 1755 /package
 cd /package

2.下载和安装

  • 进入到package后,下载daemontools 的安装包:

wget https://cr.yp.to/daemontools/daemontools-0.76.tar.gz             #目前的下载地址是这个,不保证后续还是这个 !

解压: tar -zxvf daemontools-0.76.tar.gz

rm -rf daemontools-0.76.tar.gz

cd admin/daemontools-0.76

package/install                               #注意这里的package是admin/daemontools-0.76目录下面的package

  • 出错
./load envdir unix.a byte.a
/usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in envdir.o
/lib64/libc.so.6: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [envdir] Error 1
  • 解决办法
vim src/conf-cc
# 在gcc 一行末尾增加
-include /usr/include/errno.h
# 更改后
gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings -include /usr/include/errno.h
  • 从新执行 package/install   就成功了。此时成功安装daemontools。

3.daemontools与Ubuntu开机启动程序

Ubuntu16.04开机启动程序的命令是写在 /etc/rc.local文件中的。关于这块不懂的,请自行百度。

在步骤2中,我们通过package/install 安装成功以后,会在/etc/rc.local中写入下面一行命令:

csh -cf '/command/svscanboot &'

经过反复测试,发现这句话有问题,将其修改为:(这里也有可能与系统有关,可以自己先测试下)

/command/svscanboot &

特别注意:如果在/etc/rc.local中 有 exit 0 ,所有指令 都需要 写在 exit 0 前面。

  • 新问题:

这些都完成以后,我reboot了系统,使用命令ps -ef | grep svscan,发现系统中并没有运行daemontools。

最后发现问题出现在文件/etc/rc.local文件上。

在使用package/install安装完成后,daemontools删除了/etc/rc.local文件的执行权限。

使用命令 chmod 755 /etc/rc.local(root权限下),给/etc/rc.local添加执行权限。

reboot重启系统

ps -ef | grep svscan   现在就可以看到系统中运行了  daemontools。

4.daemontools的简单使用

daemontools的官方手册讲了很多东西,这里不详细说明。毕竟我们只是需要用daemontools来托管我们的程序,使其成为守护进程。

  • 创建需要托管的程序

mkdir /home/test/daemontools

touch test1.c       

gcc test1.c -o mytest

这里的test1.c,我写的是一个循环休眠程序:

#include 

int main( void ){
        while( 1 ){
                sleep(20);
        }
        return 0;
}
  • 将创建的程序交给daemontools托管

安装好daemontools以后,会在/目录下生成一个service目录。

cd /service

mkdir mytest

在/service目录下创建的mytest目录中,自动会生成一个supervise目录,这个我们不需要管它。

在mytest目录下,执行touch run

vim run

#!/bin/bash
MY_RUN_PATH=/home/test/daemontools    #设置程序所在的目录
cd $MY_RUN_PATH
ulimit -c unlimited                   #开启core文件
exec setuidgid test ./mytest          #这里的mytest就是我生成的可执行程序,test是我登录系统时,
#使用的账户,如果你登录系统使用的用户是xxx,那这里就是xxx  

chmod u+x run

到这里,就算成功了,此时daemontools 已经启动了mytest程序。

可以使用 ps -ef | grep mytest  进行查看,可以看到mytest已经在后台运行了。

5.daemontools关闭和重启托管的程序

因为daemontools会自动,周期性的运行在/service中定义的run文件,所以如果你想使用kill -9 进程号,去"杀死"某个进程,会失败。

  • 正确的关闭程序的指令是:  sudo svc -d /service/*

这里会关闭所有交给 daemontools 进行托管的程序。

如果只需要关闭我们之前创建的mytest程序可以使用命令:  sudo svc -d /service/mytest/

  • 重新启动程序的指令:  sudo svc -du /service/*

同理,如果只需要重启我们之前创建的mytest程序可以使用命令:  sudo svc -du /service/mytest/

 

 

 

 

 

 

 

你可能感兴趣的:(Ubuntu,daemontools,ubuntu)