很多服务器端设计者,很少会考虑到服务器永久存活或热替换的问题,貌似真的很少

其中永久存活最大的理论支持就是,我们如何真正的保证一组服务器持续的存在,即便宕机?

其实没有人能保证自己写的代码那么完美无瑕,因为它的存在就是必须去崩溃,必须暴露更多的错误才能更加完美无瑕,所以除了自己有大量的测试代码外,其实对于程序本身的测试很多是无法达到的,那么我们就需要更多的外部支持,那么在实际运营中,最好的就是Daemon这样的系统。

1、什么是Daemon

其实Daemon是一种进程守护者(守护进程),他保护你的系统免于遭受外部或异常错误而导致的崩溃,并在最短的时间内使其迅速恢复的一种机制或系统。

当然我在这里可不是教你怎么去写一种Daemon,因为对很多团队,那个成本很没必要(我们有更省钱的做法)。

那就是 http://libslack.org/ 的自制软件Daemon,它将自动保护任意进程,并保证程序持续稳定运行,直到你将其KILL或Stop掉,前提自然是要关闭掉Daemon本身。

2、安装Daemon

首先直接从地址:http://libslack.org/daemon/download/daemon-0.6.4.tar.gz 中下载Daemon的最新源码。

然后上传至Linux服务器

tar -xvf daemon-0.6.4.tar.gz

cd daemon-0.6.4

注意:在这一步是不可以配置Daemon的安装路径的,它将被默认安装至 /usr/local/bin 中,但会创建全局快捷方式,即可直接使用 daemon来运行程序。

./config

make -j8

make install-daemon

注意:这一步是为了安装Daemon的配置文件 默认被安装至 /etc/daemon.conf

make install-daemon-conf

3、配置Daemon以及参数说明

其实Daemon本身的参数是可以直接放入 /etc/daemon.conf 中的,那么基本上配置文件使用起来是非常容易的。

打开远端的daemon.conf

其配置文件格式为

配置名称(配置名称与参数列表间,使用空格分隔) 参数列表(多参数使用 英文字母 逗号分隔),例如:

test_server respwan

参数说明(部分):

-h, --help                - 打印帮助信息

-V, --version             - 打印版本信息

-v, --verbose[=level]     - 设置冗余级别

-d, --debug[=level]       - 设置调试级别

-C, --config=path         - 指定特殊的配置文件路径,默认为:/etc/daemon.conf

-N, --noconfig            - 将不读取任何配置文件信息即不读取 /etc/daemon.conf

-n, --name=name           - 配置项目的名称,将载入目标名称参数信息

-X, --command=cmd         - 定义特殊的后缀参数,例如需要参数启动的话

-D, --chdir=path          - 改变运行目录

-m, --umask=umask         - 改变目标执行程序的MASK

-U, --unsafe              - 运行无安全状态执行程序

-S, --safe                - 运行安全执行程序

-c, --core                - 生成核心文件,用于调试

-r, --respawn             - 当程序关闭时,是否重新启动程序

-f, --foreground          - 前台运行程序

-p, --pty[=noecho]        - Allocate a pseudo terminal for the client

-l, --errlog=spec         - 定义DAEMON的目标错误日志位置

-b, --dbglog=spec         - 调试日志位置

-o, --output=spec         - 输出运行程序的日志

-O, --stdout=spec         - 输出运行程序的输出

-E, --stderr=spec         - 输出运行程序的错误日志

--running             - 检测此名称的程序是否已经运行

--restart             - 重新启动此程序名称程序

--stop                - 结束此名称的程序

4、开始使用Daemon

使用时,首先配置目标程序的参数,默认情况下,会添加参数 respawn 用于检测当程序关闭时重新启动程序,例如daemon.conf中增加此选项

test_server respwan,chdir=/home/test_server

例如此时我要启动test_server那么,直接在shell中输入

daemon --name=test_server /home/test_server/test_server

此进程将被守护,直到整个运行周期完成。

此处启动的是位于:/home/test_server 下的 test_server 程序

5、应用场合以及扩展探索

此系统非常适合应用于需要强力保护的程序,如配合其他异常捕捉系统,将可以很好的保证整个服务器的运行以及崩溃BUG的修复情况。

也可以通过其他外部程序,控制或监控daemon的运行情况,可以合理的控制整个系统的开启以及结束,太棒了这东西

[原创]Linux下使用Daemon实现服务器永久存活的更多相关文章

  1. linux下安装配置svn服务器

    linux下安装配置svn服务器 1. svn服务器安装 将subversion-1.4.0.tar.gz和subversion-deps-1.4.0.tar.gz传到服务器. tar xfvz su ...

  2. Linux下配置一个VNC服务器

    在Linux下配置一个VNC服务器,并设置2个用户,要求其中一个用户登录时不需要输入密码. 然后在客户端使用ssh+vncview的方式访问. 1确认vnc安装 2配置vncserver 3测试vnc ...

  3. linux下搭建svn本地服务器

    在linux下搭建svn本地服务器可以很好的管理自己的代码,具体过程如下: # mkdir svn_local # cd svn_local  # svnadmin create led_diplay ...

  4. [原创]Linux下网络性能测试Netperf工具介绍及安装

    [原创]Linux下网络性能测试Netperf工具介绍及安装 1 官方网站 http://www.netperf.org/netperf/ 2 Netperf介绍 Netperf是一种网络性能的测试工 ...

  5. Linux下如何部署FTP服务器

    FTP 是 File Transfer Protocol 的缩写,即文件传输协议,它通过网络在服务器和客户端之间传输文件,现在已经成为一种广泛使用的标准工具 vsftpd 是 very secure ...

  6. 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。

    ajax跨域请求对于前端开发者几乎在任何一个项目中都会用到,众所周知,跨域请求有三种方式: jsonp; XHR2 代理: jsonp: 这种应该是开发中是使用的最多的,最常见的跨域请求方法,其实aj ...

  7. Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍

    一.http_load程序非常小,解压后也不到100Khttp_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把 ...

  8. Linux下几种并发服务器的实现模式

    Linux下的几种并发服务器的设计模式 1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发. ...

  9. (原创)linux下Microsoft/cpprestsdk支持https(server)

    原创,转载请标明源地址 之前看网上一堆的资料说Microsoft/cpprestsdk不支持https或者说只支持window下的https,差点就被误导了,没办法,只好自己去翻了下源代码 先说明下l ...

随机推荐

  1. Java-Runoob-高级教程:Java 实例

    ylbtech-Java-Runoob-高级教程:Java 实例 1.返回顶部 1. Java 实例 本章节我们将为大家介绍 Java 常用的实例,通过实例学习我们可以更快的掌握 Java 的应用. ...

  2. 深入 innodb

    深入innodbInnoDB表为IOT,采用了B+树类型,故每个页面至少要存储2行数据,如果行过大则会产生行溢出:理论上InnoDB表中varchar可存储65535字节,但对于InnoDB其实际上限 ...

  3. USB驱动程序之USB设备驱动程序2鼠标用作键盘学习笔记

    1.usbmouse.c (1)probe函数 在这个probe函数后判断是不是一个鼠标,先得到usb_host_interface结构体,除了端点0外,端点个数如果不是1,返回错误,表示不是自己能支 ...

  4. Java对象和它的内存管理

    java中的内存管理分为两个方面: 内存分配:指创建java对象时JVM为该对象在堆空间中所分配的内存空间. 内存回收:指java 对象失去引用,变成垃圾时,JVM的垃圾回收机制自动清理该对象,并回收 ...

  5. centos 安装php7

    yum安装php7 删除之前的版本 # yum remove php* rpm 安装 Php7 相应的 yum源 CentOS/RHEL 7.x: # rpm -Uvh https://dl.fedo ...

  6. 24_java之转换流和缓冲流

    01转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节 * 将字符串按照指 ...

  7. 爬虫中urllib库

    一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...

  8. angularjs之级联菜单

    原理: 1.ng-options中val.id as val.name for val in cascading 将id的值赋给 mg-modelone2.在通过ng-change传给函数3.当一级下 ...

  9. 语义分析:C语言表达式的语法树生成——Python实现

      令狐冲慢慢走近,那汉子全身发抖,双膝一屈,跪倒在雪地之中.令狐冲怒道:“你辱我师妹,须饶你不得.”长剑指在他咽喉之上,心念一动,走近一步,低声问道:“写在雪人上的,是些什么字?”   那汉子颤声道 ...

  10. C语言清空输入缓冲区的N种方法对比(转)

    C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); //获取行系列 ...