文档章节

Linux的Service/Daemon你真的懂了吗?

j
 jims
发布于 2016/10/01 15:24
字数 1429
阅读 2
收藏 0
点赞 0
评论 0

一 service与一般的程序的区别

service(也称为daemon)表示后台运行的程序,一般随系统的启动自动地启动且在用户logoff后仍然能够继续运行。该daemon进程一般在启动后需要与父进程断开关系,并使进程没有控制终端(tty)。因为daemon程序在后台执行,不需要于终端交互,通常就关闭STDIN、STDOUT和STDER。daemon无法输出信息,可以使用syslog或自己的日志系统进行日志处理。

 

可以使用/etc/rc.d/init.d/functions脚本中的daemon函数来将一般的程序启动为daemon,例如nfs daemon的启动:

echo -n $"Starting NFS daemon: "
daemon rpc.nfsd $RPCNFSDARGS $RPCNFSDCOUNT
ETVAL=$?
echo

[ $RETVAL -ne 0 ] && exit $RETVAL

 

 

二 跟 service相关的目录和文件

/etc/init.d -> /etc/rc.d/init.d : /etc/rc.d/init.d 下包含了所有的service的控制脚本,/etc/init.d 是 /etc/rc.d/init.d 的链接。

/etc/rc*.d -> /etc/rc.d/rc*.d : /etc/rc.d/rc*.d 下包含了所有的service的自动启动选项的配置,/etc/rc*.d 是 /etc/rc.d/rc*.d 的链接。

/etc/rc.d/rc*.d/ 下的脚本是对 /etc/rc.d/init.d 下的脚本的链接,只是名字增加K或S前缀,用来表示自动启动或自动停止。

 

所有的service相关的目录树结构如下:

/etc
|-- init.d -> rc.d/init.d
|-- rc -> rc.d/rc
|-- rc.d
| |-- init.d
| | |-- NetworkManager
| | |-- network
| | |-- nfs
| | |-- xinetd
| | |-- ... ...
| |-- rc
| |-- rc.local
| |-- rc.sysinit
| |-- rc3.d
| | |-- K02NetworkManager -> ../init.d/NetworkManager
| | |-- K20nfs -> ../init.d/nfs
| | |-- S10network -> ../init.d/network
| | |-- S56xinetd -> ../init.d/xinetd
| | |-- ... ...
|-- rc.local -> rc.d/rc.local
|-- rc.news
|-- rc.sysinit -> rc.d/rc.sysinit
|-- rc0.d -> rc.d/rc0.d
|-- rc1.d -> rc.d/rc1.d
|-- rc2.d -> rc.d/rc2.d
|-- rc3.d -> rc.d/rc3.d
|-- rc4.d -> rc.d/rc4.d
|-- rc5.d -> rc.d/rc5.d
|-- rc6.d -> rc.d/rc6.d

 

 

三 一个service的组成和部署

一个service通常包含一个可执行的文件和一个service控制脚本。 作为service程序本身的可执行程序一般存储在/usr/bin下;作为控制service的脚本一般存储在/etc/rc.d/init.d下,且控制service的脚本的格式相对固定,至少支持start,stop,status参数。 例如smb的service控制脚本为:

#!/bin/sh
#
# chkconfig: - 91 35
# description: Starts and stops the Samba smbd and nmbd daemons \
# used to provide SMB network services.
#
# pidfile: /var/run/samba/smbd.pid
# pidfile: /var/run/samba/nmbd.pid
# config: /etc/samba/smb.conf


# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 1
fi

# Avoid using root's TMPDIR
unset TMPDIR

# Source networking configuration.
. /etc/sysconfig/network

if [ -f /etc/sysconfig/samba ]; then
. /etc/sysconfig/samba
fi

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 1

# Check that smb.conf exists.
[ -f /etc/samba/smb.conf ] || exit 6

RETVAL=0


start() {
KIND="SMB"
echo -n $"Starting $KIND services: "
daemon smbd $SMBDOPTIONS
RETVAL=$?
echo
KIND="NMB"
echo -n $"Starting $KIND services: "
daemon nmbd $NMBDOPTIONS
RETVAL2=$?
echo
[ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/smb || \
RETVAL=1
return $RETVAL
}

stop() {
KIND="SMB"
echo -n $"Shutting down $KIND services: "
killproc smbd
RETVAL=$?
echo
KIND="NMB"
echo -n $"Shutting down $KIND services: "
killproc nmbd
RETVAL2=$?
[ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/smb
echo ""
return $RETVAL
}

restart() {
stop
start
}

reload() {
echo -n $"Reloading smb.conf file: "
killproc smbd -HUP
RETVAL=$?
echo
return $RETVAL
}

rhstatus() {
status smbd
RETVAL=$?
status nmbd
RETVAL2=$?
if [ $RETVAL -ne 0 ] ; then
return $RETVAL
fi
if [ $RETVAL2 -ne 0 ] ; then
return $RETVAL2
fi
}


# Allow status as non-root.
if [ "$1" = status ]; then
rhstatus
exit $?
fi

# Check that we can write to it... so non-root users stop here
[ -w /etc/samba/smb.conf ] || exit 4

 

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
reload
;;
status)
rhstatus
;;
condrestart)
[ -f /var/lock/subsys/smb ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status|condrestart}"
exit 2
esac

exit $?

 

四 service的管理工具/sbin/service

可以使用工具/sbin/service来查看和管理系统上的所有的service,例如查看所有的service的状态使用/sbin/service --status-all, 或者启动停止或重启某个service为/sbin/service XXX start/stop/restat。

 

打开/sbin/service脚本,我们可以看到其实service命令实现很简单,就是遍历/etc/init.d (-> /etc/rc.d/init.d)下的所有的service控制脚本,执行相应service控制脚本中的操作。

 

你可以使用命令cat /sbin/service 来查看/sbin/service的实现。

 

 

五 service的自动启动控制工具/sbin/chkconfig

当你实现你的service且部署到/etc/init.d下后,你的脚本已经可以手动地启动和关闭,但是要实现在系统启动的时候你的service自动地启动,还需要做简单的配置。我们知道/etc/rc.d/rc*.d下的脚本是对/etc/rc.d/init.d下的service控制脚本的一个连接,用来控制service的自动启动选项的。例如在/etc/rc.d/rc3.d下lrwxrwxrwx 1 root root 16 2009-05-20 S12syslog -> ../init.d/syslog ,此连接文件以S开头表示了在runlevel为3下syslog service将会与系统一起自动地启动。

 

手动地在/etc/rc.d/rc*.d下创建连接文件来配置service是否自动地启动,实在是有点麻烦,我们可以使用工具/sbin/chkconfig来简化service启动选项的配置。/sbin/chkconfig工具要求service的控制脚本的前几行必须包含如下的类似信息: 

#
# chkconfig: - 91 35
# description: Starts and stops the Samba smbd and nmbd daemons \
# used to provide SMB network services.
#

 

 

使用chkconfig的实例如下:

chkconfig --list 用来查看所有的service的启动选项的配置;

chkconfig network 用来查看network service的启动选项的配置;

 

 

更多查看:6个Linux chkconfig命令实例 - 增加,删除,查看和修改services的自动启动选项

 

 

六xinetd

xinetd本身是一个service,他的作用是监听所有的端口,根据配置对不同的端口启动不同的应用。 对于有些需要在后台运行的程序,可以选择设置为service在后台一直运行,也可以选择使用xinetd来配置此程序根据需要激活。

 

对于需要频繁访问的服务,需要在/etc/rc.d/init.d下配置为service;

对于不是频繁访问的服务,可以使用xinetd来激活,从而节约服务器的资源;

总之service与xinetd,选一即可。 

 

七 参考: 在Linux下编写Daemon


完!

本文转载自:http://www.cnblogs.com/itech/archive/2011/08/22/2149684.html

共有 人打赏支持
j
粉丝 4
博文 169
码字总数 29707
作品 0
合肥
linux下安装loadrunner(LoadGenerator)

在HP的官方网站上下载LoadRunner9.5 的Linux安装程序[T7177-15009.iso],安装文档[hp_man_LRIG9.50_01_pdf.pdf]; 安装程序包括Hp、Ibm、Linux、Solaris系统的支持(LR9.0对应安装文件为[TL...

jeffsui
2013/04/24
0
0
Android之旅[1] - Architecture

本文只要是阅读Anatomy-Physiology-of-an-Android的随笔记录。 Anatomy意为解剖,是一种静态视角。Physiology意为生理,是一种动态视角。原文就是通过这两种角度来分析Android的。 Android基...

开源中国驻成都办事处
2012/11/19
0
0
如何优雅地运行一个 Daemon

Daemon 是运行在后台的进程,俗称守护进程,常见的 apache, nginx 和 mysql 等都是以守护进程的形式运行。本文主要介绍其的原理以及如何优雅地运行一个 daemon。 The theory Advanced Progra...

koala bear
2015/10/18
0
0
写博客的好处--摘自大棚Linux

你觉得自己懂了未必真的懂了。写作是自我反省,自我提升的一个过程。 2. 让别人懂才是真的懂。写作是强迫你给别人讲懂知识。 3. 看似浪费时间,实则节省时间。知识总会遗忘,实验证实阅读自己...

aust_niuroutan
04/20
0
0
daemon函数结合脚本实现start, stop, restart

daemon函数 Daemon程序是一直运行的服务端程序,又称为守护进程。通常在系统后台运行,没有控制终端不与前台交互,Daemon程序一般作为系统服务使用。Daemon是长时间运行的进程,通常在系统启...

小灰灰Blog
2014/08/29
0
0
LVS 服务器集群三种实现模式配置

LVS (Linux Virtual Server) Linux 服务器集群 LVS服务器集群中基于IP的负载均衡技术,有3种实现模式:VS/NET模式,VS/TUN模式(IP隧道模式),VS/DR模式(直接路由模式) 一,【VS/NET 模式...

jianbo-zh
2014/01/13
0
1
jsvc将tomcat配置成服务

1、在/usr/share/tomcat8/bin中有commons-daemon-native.tar.gz 压缩包 2、解压commons-daemon-native.tar.gz #tar -zxvf commons-daemon-native.tar.gz 3、解压完成,出现commons-daemon-1.......

北天_
2015/08/12
0
0
使用二进制安装包部署kubernetes v1.9.8集群的参考手册

一、使用二进制方式部署k8s的Master节点 more /usr/lib/systemd/system/kube-apiserver.service more /usr/lib/systemd/system/kube-controller-manager.service more /usr/lib/systemd/sys......

watermelonbig
05/24
0
0
DenyHosts安装及配置防止ssh暴力破解

DenyHosts(项目主页:http://denyhosts.sourceforge.net/)是运行于Linux上的一款预防SSH暴力破解的软件,可以从http://sourceforge.net/projects/denyhosts/files/进行下载,然后将下载回来...

fzxu_05
2015/01/16
0
0
在Linux下用LVS和Ipvsadm做Web负载均衡

在Linux下用LVS和Ipvsadm做Web负载均衡,如果想对负载均衡有一个全面、宏观上的理解,可以看:服务器负载均衡技术的原理及应用。 一、简介及环境配置 在 Linux下用LVS和Ipvsadm做Web负载均衡...

脚本爱好者
2012/06/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部