通常.socket 负责监听(启动) cups.service和.path(未启动) 此时当有服务请求的时候 socket再唤醒service 和path 所以需要关闭cups服务的时候 需要同时关闭三个服务 不能仅仅关闭service 。
systemctl + poweroff
reboot
suspend 暂停模式将文件保存在内存中 然后关闭大部分硬件
hibernate 休眠模式将状态保存到硬盘中 完毕后 将电脑关机
rescue
emergency
5.通过systemctl分析各个服务之间的依赖关系
语法:systemctl list-dependencies [unit] [--reverse]
reverse 反向追踪谁使用此unit的意思
树的形式列出想依赖关系 正向为根节点用到下面的各个服务 向下
reverse反向:为根节点被下面的叶子节点用到
6.与systemd的daemon运行过程相关的目录简介
除了/usr/lib/systemd/system/和/etc/systemd/system/目录下 还有与daemon相关的文件
/usr/lib/systemd/system/ 发行版 预设的启动脚本原始位置 尽量不修改 如果需要修改用/etc/systemd/system
/run/systemd/system/ 系统执行过程中产生的服务脚本 优先级比上面的高
/etc/systemd/system/ 根据主机要求自定义的执行脚本
/etc/sysconfig/* 几乎所有的系统服务都会初始化的选项放在此目录下 例如网络的设定目录为network- scripts
/var/lib/ 产生数据的服务都会讲数据写入/var/lib的目录中 例如数据库管理系统mariadb的数据 默认写入/var/lib/mysql中
/run/ 放置很多的daemon的缓存文件 包括lock file以及PID file等等
7. 网络服务与端口对应
/etc/services 此文件列出了每个协议服务的端口
观察网络服务的端口 netstat -tlunp
例如ssh的服务应该加上防火墙 有些则可以不用 有些不了解的监听网络服务 可以关闭
systemctl针对service类型的设定文件
1.目录简介
/usr/lib/systemd/system/vsftpd.service 发行版 给出的原始默认设置文件 建议不动
/etc/systemd/system/vsftpd.service.d/custom.conf
在/etc/systemd/system底下建立与配置文件相同名的目录 然后加上.d的扩展名 然后在该目录下建立配置文件即 可,配置文件最好文件名取名为.comf 此目录下的文件设置会追加到/usr/lib/systemd/system/vsftpd.service 里
/etc/systemd/system/vsftpd.service.wants/* 此目录内的文件为链接文件 设置相依赖服务的链接,意思是启动了 vsftpd.service之后,最好再加上这个目录下的建议的服务
/etc/systemd/system/vsftpd.service.requires/* 链接文件,设置相依性服务的链接 意思是启动vsftpd.service之前 需要先启动哪些服务
2.systemctl配置文件的项目简介
大约有一下几个项目
unit unit本身的说明 以及与其他想依赖的daemon的设定
service socket timer mount path不同的unit type就得要使用相对应的设定
install 此unit安装到哪个target里面
重复设置的项目 后面会覆盖前面
布尔值判定 可以使用1 yes true on来代表启动
0 no false off代表关闭
空白航 开头为#或者;的哪一行 代表注解
execstart 实际执行此daemon的指令或脚本 也可以使用execstartpre之前以及execstartpost之后两个设定项目来实际启动服务前,进行额外的指令行为
实例
3.举例两个vsftpd服务 两个端口一个555另一个21
先建立需要的配置文件
cd /etc/vsftpd
cp vsftpd.conf vsftpd2.conf
讲第一个监听的端口改为555
diff vsftpd.conf vsftpd2.conf 检测不同内容
开始处理启动脚本
cd /etc/systemd/system
cp /usr/lib/systemd/system/vsftpd.service vsftpd2.service
vim vsftpd2.service
更改描述的信息
description=.....
execstart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf
重新载入systemd的脚本配置文件
systemctl daemon-reload
systemctl list-unit-files --all | grep vsftpd
systemctl restart vsftpd.service vsftpd2.service
systemctl enable vsftpd.service vsftpd2.service
systemctl status vsftpd.service vsftpd2.service
netstat -tlnp
4.多重的重复设置方式 getty 为例
agetty 程序管控 getty
主要管理文件为getty.target 这个unit 实际产生的tty1~tty6的则是由getty@.service 所提供的
先查看/usr/lib/systemd/system/getty@.service
其中重要的信息为
execstart=-/sbin/agetty --noclear %I $TERM
其中的@原因需要看 getty@.service上面的文件 getty.target
systemctl show getty.target
文中会有显示:after=getty@tty1.service getty@tty2.service ......
在启动完getty.target服务之后会要求持续启动getty1.target getty2.target getty3.target...
所以可以判断 systemd的运行方式
a 先看/usr/lib/systemd/system/ /etc/systemd/system/ 下面有没有getty@tty1.service的设置 ,如有就 执行,如过没有就执行下一步
b 找getty@.service 的设置 如过有就将@后面的资料带入成%I的变量 进入getty@.service 执行。
原始文件:执行服务名@.service
执行文件:执行服务名@范例名称.service
5.更改tty数量
vim /etc/systemd/logind.conf
NAutoVTs=4
ReserveVT=0
之后重启 systemctl stop getty@tty5.service getty@tty6.service
systemctl restart systemd-logind.service
6.重新打开一个全新的终端
systemctl start getty@tty8.service
7.新增vsftpd到新的端口2121
cat /usr/lib/systemd/system/vsftpd@.service
其中 execstart=/usr/sbin/vsftpd /etc/vsftpd/%i.conf %i或者%I 代表@后面接的范例文件的名称
a 建立vsftpd3.conf文件 通过此文件来启动新服务
cd /etc/vsftpd
cp vsftpd.conf vsftpd3.conf
vim vsftpd3.conf
listen_port=2121
b 暂时启动这个服务 不要永久启动
systemctl start vsftpd@vsftpd3.service
systemctl status vsftpd@vsftpd3.service
netstat -tlunp
所以vsftpd@vsftpd3.service 代表要使用的配置文件在/etc/vsftpd/vsftpd3.conf 的意思
*****注意在增加的端口小于1024的时候 需要root的权限 如过端口大于1024则 不需要root的权限 但是 同样危险
8.自己的服务自己作 模拟一个可以备份自己系统的服务
a 服务文件放在/backups 文件夹下
vim /backups/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 -zcvf ${target} ${source} &> /backups/backup.log
chmod a+x /backups/backup.sh
ll /backups/backup.sh
b 接下来 需要设计一只名称为backup.service的启动脚本
vim /etc/systemd/system/backup.service
[unit]
description=backup my server
requires=atd.service
[service]
type=simple
execstart=/bin/bash -c "echo /backups/backup.sh | at now"
[install]
wantedby=multi-user.target 因为需要at这个命令 所以 atd.service 是必须启动的服务
测试命令
systemctl daemon-reload
systemctl start backup.service
systemctl status backup.service
再出现的结果显示中 出现的inactive 原因是执行完成就完毕了 不会继续存在内存当中
systemctl针对timer的配置
原来的at和crond这个服务
systemd.timer 的优点
所有systemd服务产生的信息都会被记录 log 所以比crond在debug上面更清楚
各个timer的工作可以跟systemd的服务相结合
各个timer的工作可以跟control group (cgroup 用来取代/etc/secure/limit.conf 结合)来限制该工作的资源利用
缺点timer没有email的功能 但是可以自己写脚本 时间单位可以精确到ms
任务需求
必要条件
系统的timer.target 一定要启动
需要sname.service的服务存在 sname是自定义的名称
需要sname.timer的时间启动服务存在
sname.timer的设定值
你可以到/etc/systemd/system底下去建立这个*.timer文件
onactivesec timer.target启动多久之后才执行此unit
onbootsec 开机完成多久之后才执行
onstartupsec systemd第一次启动之后多久才执行
onunitactivesec 此timer设定文件所管理的那个unit服务在最后一次启动后,隔多久后再执行一次的意思
onunitinactivesec 此timer设定文件所管理的那个unit服务在最后一次停止后,隔多久后再执行一次的意思
oncalendar 用实际时间启动服务
unit 名称
persistent 使用oncalendar设定时,指定该功能不需要持续进行
如何使用oncalendar的时间
如果想要从crontab转成这个timer功能 需要了解timer的时间格式
语法:英文周名 YYYY-MM-DD HH:MM:SS
范例:THU 2015-08-13 13:40:00
英语口语:now today tomorrow hourly daily weekly monthly +3h10m 2015-08-16
实例:
需求:开机后2小时开始执行一次这个backup.service
自从第一次执行后,未来我每两天要执行一次 backup.service
vim /etc/systemd/system/backup.timer
[unit]
description=backup my server timer
[timer]
onbootsec=2hrs
onunitactivesec=2days
[install]
wantedby=multi-user.target
systemctl daemon-reload
systemctl enable backup.timer
systemctl restart backup.timer
systemctl list-unit-files | grep backup
systemctl show timers.target
systemctl show backup.service
systemctl show backup.timer
一个固定日期运行的案例
需求 星期天凌晨2点运行这个备份程序一遍 名称为backup2.timer
vim /etc/systemd/system/backup2.timer
[unit]
description=backup my server timer2
[timer]
oncalendar=sun *-*-* 02:00:00
persistent=true
unit=backup.service
[install ]
wantedby=multi-user.target
systemctl daemon-reload
systemctl enable backup2.timer
systemctl start backup2.timer
systemctl show bakcup2.timer
出现的执行时间nextelapseusecrealtime是与unix标准时间的比较值 1970-01-01 00:00:00
centos 7.x预设启动的服务简易说明
常见的服务 daemon
abrtd 登录出错时的机制 根据此服务进行错误克服
accounts-daemon 可关闭 使用accountsservice计划 账号管理, 可关闭
alsa-x可关闭 音效 不开图形界面 可关闭
atd 单一的例行性工作排程 at服务
auditd selinux相关
avahi-daemon 可关闭 用户端服务通过zeroconf自动的分析与管理网络 常用在笔记本电脑上
brandbot rhel-* 大多数用于开机过程中需要的各种侦测环境的脚本 同时也提供界面的启动与关闭
chronyd
ntpd
ntpdate 网络校正时间的服务
cpupower cpu运行情况
crond 定时服务 与at类似 周期性
cups 可关闭 打印机服务
dbus d-bus的方式在不同的应用程序之间传送信息 应用程序之间的信息传递,每个使用者登录时提供的信息 资料等
dm-event multipathd 系统监控对应表 device mapper的主要服务 不能关
dmraid-activation mdmonitor 用来启动软raid的重要服务 尽量不关闭
dracut-shutdown 处理initramfs的相关行为 与开机流程相关性较高
ebtables 系统或网络服务类似iptables的防火墙规则 设定如果没有使用虚拟化或者使用了firewalld 此服务可禁用
emergency
rescue 进入紧急模式或者是救援模式的服务
firewalld 系统或网络 此为防火墙 替代以前的iptables等的防火墙机制 搭配firewall-cmd指令 可以快 速的建制好防火墙系统
gdm gnome的登入管理员 就是图形界面上一个很重要的登录管理服务
getty@ 本机系统产生文字界面 tty登入的服务
hyper*
ksm*
libvirt*
vmtoolsd 跟虚拟机相关的服务 如果不用虚拟机 可以关闭
irqbalance 如果硬件为多核心的硬件 则需要启动 可以自动分配系统终端IRQ 之类的硬件资源
iscsi 网络磁盘服务 如果没有挂载 则可以关闭
kdump 可关闭 主要用在 linux核心出错的时候 ,用来记录内存数据的服务 可以关闭
lvm2-* 跟lvm相关性较高的许多服务 不可关闭
microcode intel的cpu指令集 如果没有下载intel的相关指令文件 则可以不启动
modemmanager
network
networkmanager* 数据,网络设定等服务 建议使用networkmanager搭配nmcli指令来处理网络设置
quotaon 启动quota要用到的服务
rc-local /etc/rc.d/rc.local 需要具有x的执行权限
rsyslog 记录系统产生的日志信息 包括/var/log/messages内的几个重要的登录文件
smartd 自动检测硬盘状态 报告管理员
sysstat sar的指令记录 某时间点 系统的资源使用情况 包括cpu io输入出等 当此服务启动后 这些记录的数 据会写入log中
sysstemd-* 系统运行过程中需要的服务
plymount*
upower 与图形界面相关的服务 可关闭
上面的服务为centos7中默认启动的
注意管理员应该使用man systemd.unit man systemd.service man systemd.timer查询/etc/systemd/system/目录下设定文件的语法 然后使用systemctl daemon-reload载入后 再自行编写服务于管理服务