Linux系统服务(daemon)
一、SystemV的init管理机制(脚本式启动)
1.服务启动分类
stand alone 独立启动模式
super daemon 总管程序
2.服务的启动、关闭与观察
/etc/init.d/daemon [start|stop|status|restart]
3.特点
手动解决依赖性服务
4.执行等级
0~7
/etc/rc.d/rc[0~7].d
1:单人模式
3:文字模式
5:文字+图形模式
5.设定开机预设启动命令
# chkconfig daemon on
# chkconfig daemon off
# chkconfig --list daemon
6.相关命令
# /etc/init.d/daemon [start|stop|status|restart]
# service daemon [start|stop|status|restart]
# chkconfig daemon [on|off]
# chkconfig --list daemon
二、Systemd机制
<一> 概论
CentOS7之后
1.优势
(1)平行处理所有服务
(2)systemd常驻内存
(3)服务依赖性的自我检查
(4)将多个daemons集合成target
(5)向下兼容init服务脚本
2.缺点
(1)运行等级上仅有1,3,5对应到systemd某些target类型当中
(2)systemctl不可自定参数
(3)无法侦测root手动执行(不是用systemctl)启动的服务
(4)systemd机制不支持与标准输入互动
3.systemd配置文件目录[优先级逐渐增高]
/usr/lib/systemd/system/ 类似于 /etc/init.d/daemon
/run/systemd/system/
/etc/systemd/system/ 类似于 /etc/rc.d/rc[0~6].d/
4.服务类型单位[unit]分类
unit:将过去daemon执行的脚本称为一个服务单位
.service
.target:执行环境类型
.mount
.automount
.socket
.timer:循环执行的服务
.path:侦测特定文件或目录类型
5.参数
systemctl status atd.service
atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled)
Active: active (running) since Mon 2015-08-10 19:17:09 CST; 5h 42min ago
Main PID: 1350 (atd)
CGroup: /system.slice/atd.service
└─1350 /usr/sbin/atd -f
<二>通过systemctl管理服务
# systemctl [command] [unit]
-start
-status
-stop
-restart
-reload:重读配置文件
-enable:下次开机时,会被启动
-disable:下次开机时,不会被启动
# systemctl [command] [--type=TYPE] [--all]
观察系统上服务
command
-list-units:列出所有的启动的unit
-list-unit-file:列出/usr/lib/systemd/system/,将所有文件列表说明
type
service
socket
target
e.g查出系统上是否有以CPU为名的服务
# systemctl list-units --type=service --all | grep -i cpu
# systemctl [command] [unit.target]
通过systemctl管理不同的操作环境
command
get-default:取得目前的target
set-default:设定后面跟定的target为默认target
isolate:切换到后面接的模式
unit.target
graphical.target
multi-user.target
... ...
# systemctl list-dependencies [unit] [ --reverse]
--reverse:反向追踪谁使用这个unit
分析各服务之间的依赖性
# systemctl list-dependencies multi-user.target
<三>重要目录
/usr/lib/systemd/system/
使用CentOS官方提供的软件安装后,预设的启动脚本配置文件都在此目录
/run/systemd/system/
执行过程中,所产生的脚本。优先级高于/usr/lib/systemd/system/
/etc/systemd/system
根据主机系统需求,建立的执行脚本。执行优先级高于/run/systemd/system/
/etc/sysconfig/*
几乎所有服务都会将初始化的设定参数写入这个目录,如/etc/sysconfig/network-scripts/
/var/lib/
一些会产生数据的服务会写入此目录,如Mariadb
/run/
daemon暂存文件,包括lock file,pid file
三、根据systemd机制,制作一个服务
##################backup.sh#######################
#!/bin/bash
source = "/etc /home /root /var/lib /var/spool/{cron,at,mail}"
target = "/backups/backup-system-$(date + %Y-%m-%d).tar.gz"
[! -d /backups] && mkdir /backups
tar -zxvf ${target} ${source} &> /backups/backup.log
##################backup.sh#######################
##################backup.service####################
[Unit]
Description=backup my server
Requires=atd.service
[Service]
Type=simple
ExecStart=/bin/bash -c "echo /backps/backup.sh | at now"
[Install]
WantedBy=multi-user.target
##################backup.service####################
timers.target
功能类似crond 、atd
详见鸟哥的Linux私房菜第十七章
补充命令
# systemctl show timers.target
# 什么意思,敲出来看看吧。