1. 下载
  2. 安装
    1
    2
    3
    tar xvzf daemontools-0.76.tar.gz
    cd admin/daemontools-0.76
    package/install

若报错/usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in envdir.o, 则修改代码admin/daemontools-0.76/src/error.h中的extern int errno;替换为#include

  1. 启动

使用命令svscanboot &来启动svscan工具

查看进程ps -aux | grep svscan

自启动配置参考: http://cr.yp.to/daemontools/start.html

在完成后会自动在/etc/inittab中添加SV:123456:respawn:/command/svscanboot,若重启机器后svscan未启动则需要删除该行并在/etc/init目录下创建svscan.conf并添加内容

1
2
3
4
start on runlevel [123456]
stop on runlevel [^123456]
respawn
exec /command/svscanboot

对于centos系统可参考:[http://www.productionmonkeys.net/guides/qmail-server/daemontools] (http://www.productionmonkeys.net/guides/qmail-server/daemontools)

  1. 配置

创建服务目录并配置启动文件

1
2
3
4
5
6
7
mkdir /opt/svc/servername
cat /opt/svc/servername/run

#!/bin/sh
exec /home/server_image_bin

ln /opt/svc/servername/ /service/

  1. 命令使用
    svc -u /service/servername
    svc -d /service/servername
    svc -dx /service/servername && rm /service/servername

svstat services

注意:
使用daemontools管理的进程不能以daemon方式运行

背景:主机统计按每5分钟create一个进程进行统计最近24小时的日志,统计host数据,然后存在到host_all里面,在host_all里面主要记录host, create_time(首次发现host的时间), lastupdate_time(最后一次发现host的时间)

经过调试发现在主机统计中index或者update 文档时速度比较慢(每次提交差不多1-2秒才结束),导致统计在5分钟内未完成,导致多个进程同时进行主机统计,由于多个进程导致host_all中的host不唯一

目前主要修改
1.将统计结果在存储es时使用的index和update修改为bulk
2.在pyes进行matchall时,每次查询size为10,将其设置为1000

目前统计基本在20s左右完成

需要注意的是:
1.在使用bulk时,如果有update的内容,需要注意在调用flush_bulk(forced=True)方法时如果提交数据会发生异常,原因时,pyes会对提交返回的数据进行检查,而在检查结果中不支持update方法(见pyes.models 212行函数)
可以通过设置bulk对象的raise_on_bulk_item_failure为False,不进行结果检查
2.注意在创建pyes.ES也有raise_on_bulk_item_failure参数,在调用create_bulker是也使用该属性初始化bulk对象,但是有bug(见pyes.es 395行函数),返回值错误
3.设置pyes进行matchall的时使用pyes.search(pyes.Search(filter=pyes.MatchAllFilter(), bulk_read=1000), indices=index_name, doc_type=doc_type_name)

4.在index后可以返回document id,若需要时用该id做去重之类的工作,可以使用flush_bluk后返回的结果,注意flush_bluk可能返回None,如果提交数据行数未达到400行(可设置),也可以使用flush_bluk(True)强制提交数据到es,根据返回结果中的id,可通过mget获取提交的文档内容(注意需要在下次使用该数据之前强制更新数据到es)

在使用pyes.search指定返回的fields时, 在返回的数据中每个field对应的值都为list, 可以通过list[0]获取到对应的数据

1
2
3
def _get_value(doc, key):
_rs = doc.get(key, None)
return _rs[0] if type(_rs) == list and len(_rs) > 0 else _rs

在centos6.7 x64上编译安装mesos 0.24.0时需要使用gcc 4.8以上版本, 此处记录编译方法

  1. 通过GCC镜像下载
  2. 解压tar.gz文件: tar -zvxf gcc-4.8.5.tar.gz 并cd到解压目录
  3. 下载依赖包, 执行脚本: ./contrib/download_prerequisites
  4. 创建编译目录: mkdir build && cd build
  5. 生成从makefile文件录: ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
  6. make程序: make -j4
  7. 执行测试用例: make check/test
  8. 安装: make install

注意:
在编译过程中可能出现报错: gnu/stubs.h: No such file or directory, 需要安装glibc-devel.i686包, 命令: yum install glibc-devel.i686

背景

在linux下编辑了shell文件后移植到linux后报错: -bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or director

解决方法

  1. 在linux下使用vi打开文件
  2. 查看文件格式: :set ff 显示: ff=doc
  3. 设置文件个格式: :set ff=unix

现在执行应该就ok了