如何在Linux系统上综合管理服务系统Systemd服务

Linux系统管理命令 - systemd的常见应用 - 简书
Linux系统管理命令 - systemd的常见应用
systemd是一个启动管理程序,系统运行后由他来管理一系列进程和服务,即进程树的根。
systemd工具中最常用的是systemctl命令
操作的对象称为单元(unit),常见的unit后缀有
.target(启动目标,类似于旧的运行级别)
.service(服务,守护进程,Deamons)
.timer(定时器,可以部分替代systemd)
我们可以通过$ man 5 systemd.unit来查看systemd的所有单元
控制服务运行(.service)
服务(Services)也叫守护进程(Deamons)
# systemctl start httpd.service
启动httpd服务
# systemctl restart httpd.service
重启httpd服务
# systemctl stop httpd.service
关闭httpd服务
# systemctl reload httpd.service
重新加载httpd服务配置
# systemctl enable sshd.service 设置ssh服务为开机启动
# systemctl disable sshd.service 禁止ssh服务开机启动
# systemctl mask gdm.service 屏蔽对ssh服务的调用
# systemctl umask
gdm.service 取消对ssh服务的屏蔽
注意:由于systemd不输入单元后缀名默认为.service,故上述后缀也可以省略,同时,systemd的单元文件是可以通过bash或者zsh的tab键补全的
切换运行级别(.target)
假设用户处于图形界面环境下,想切换到纯TTY环境,已减少图形界面对资源的占用,可以通过Ctrl + Alt + F1 - F6切换到另一个TTY中输入
# systemctl isolate multi-user.target
即可关闭所有图形界面下的程序,并腾出TTY
后续可以通过
# systemctl isolate graphical.target
回到图形界面
或者直接启用Display Manager
# systemctl start gdm
(Gnome桌面)
# systemctl start sddm
# systemctl start lxdm
(LXDE桌面)
因此,后续如果不满意发行版的Gnome设定,我们可以直接禁用GDM服务,使得开机不自动启用图形界面
# systemctl mask graphical.target
# systemctl disable gdm
之后通过相反的命令恢复即可
# systemctl umask graphical.target
# systemctl enable gdm
信息安全本科在读,专注Linuxsystemd 为什么会有那么大的争议? - 知乎1007被浏览68199分享邀请回答426 条评论分享收藏感谢收起281 条评论分享收藏感谢收起查看更多回答1 个回答被折叠()systemd的运行级别与服务管理命令简介_Linux教程_Linux公社-Linux系统门户网站
你好,游客
systemd的运行级别与服务管理命令简介
来源:Linux中国&
作者:Linux
从很久很久以前我们就在使用静态运行级别。而systemd提供了更为动态灵活的机制,来管控你的系统。
在开始介绍systemd命令前,让我们先简单的回顾一下历史。在Linux世界里,有一个很奇怪的现象,一方面Linux和自由软件(FOSS)在不断的向前推进,另一方面人们对这些变化却不断的抱怨。这就是为什么我要在此稍稍提及那些反对systemd所引起的争论的原因,因为我依然记得历史上有不少类似的争论:
软件包(Pacakge)是邪恶的,因为真正的Linux用户会从源码构建他所想要的的一切,并严格的管理系统中安装的软件。
解析依赖关系的包管理器是邪恶的,真正的Linux用户会手动解决这些该死的依赖关系。
apt-get总能把事情干好,所以只有Yum是邪恶的。
简直就是Linux中的微软。
好样的,!
滚蛋吧,Ubuntu!
诸如此类...就像我之前常常说的一样,变化总是让人沮丧。这些该死的变化搅乱了我的工作流程,这可不是一件小事情,任何业务流程的中断,都会直接影响到生产力。但是,我们现在还处于计算机发展的婴儿期,在未来的很长的一段时间内将会持续有快速的变化和发展。想必大家应该都认识一些因循守旧的人,在他们的心里,商品一旦买回家以后就是恒久不变的,就像是买了一把扳手、一套家具或是一个粉红色的火烈鸟草坪装饰品。就是这些人,仍然在坚持使用Windows Vista,甚至还有人在使用运行Windows 95的老破烂机器和CRT显示器。他们不能理解为什么要去换一台新机器。老的还能用啊,不是么?
这让我回忆起了我在维护老电脑上的一项伟大的成就,那台破电脑真的早就该淘汰掉。从前我有个朋友有一台286的老机器,安装了一个极其老的MS-DOS版本。她使用这台电脑来处理一些简单的任务,比如说约会、日记、记账等,我还用BASIC给她写了一个简单的记账软件。她不用关注任何安全更新,是这样么?因为它压根都没有联网。所以我会时不时给她维修一下电脑,更换电阻、电容、电源或者是CMOS电池什么的。它竟然还一直能用。它那袖珍的琥珀CRT显示器变得越来越暗,在使用了20多年后,终于退出了历史舞台。现在我的这位朋友,换了一台运行Linux的老Thinkpad,来干同样的活。
前面的话题有点偏题了,下面抓紧时间开始介绍systemd。
运行级别 vs. 状态
SysVInit使用静态的运行级别来构建不同的启动状态,大部分发布版本中提供了以下5个运行级别:
单用户模式(Single-user mode)
多用户模式,不启动网络服务(Multi-user mode without network services started)
多用户模式,启动网络服务(Multi-user mode with network services started)
系统关机(System shutdown)
系统重启(System reboot)
对于我来说,使用多个运行级别并没有太大的好处,但它们却一直在系统中存在着。 不同于运行级别,systemd可以创建不同的状态,状态提供了灵活的机制来设置启动时的配置项。这些状态是由多个unit文件组成的,状态又叫做启动目标(target)。启动目标有一个清晰的描述性命名,而不是像运行级别那样使用数字。unit文件可以控制服务、设备、套接字和挂载点。参考下/usr/lib/systemd/system/graphical.target,这是 7默认的启动目标:
Description=GraphicalInterface
Documentation=man:systemd.special(7)
Requires=multi-user.target
After=multi-user.target
Conflicts=rescue.target
Wants=display-manager.service
AllowIsolate=yes
Alias=default.target
现在再看看unit文件长什么样? 我来给大家找个例子。 unit文件存放在下面的两个目录下:
/etc/systemd/system/
/usr/lib/systemd/system/
我们可以修改第一个目录中的文件来进行自定义配置,而第二个目录中的文件是包安装时保存的备份。/etc/systemd/system/的优先级高于/usr/lib/systemd/system/。不错,用户优先级高于机器。下面是Apache Web server的unit文件:
Description=TheApache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd/ $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
KillSignal=SIGCONT
PrivateTmp=true
WantedBy=multi.user.target
就算是对于新手而言,上面的文件也是非常简单易懂的。这可比SysVInit的init文件要简单多了,为了便于比较,下面截取了/etc/init.d/apache2的一个片段:
SCRIPTNAME="${0##*/}"
SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}"
if[-n "$APACHE_CONFDIR"];then
if["${APACHE_CONFDIR##/etc/apache2-}"!="${APACHE_CONFDIR}"];then
DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}"
DIR_SUFFIX=
整个文件一共有410行。
你可以检查unit文件的依赖关系,我常常被这些复杂的依赖关系给吓到:
$ systemctl list-dependencies httpd.service
cgroups,或者叫控制组,在Linux内核里已经出现好几年了,但直到systemd的出现才被真正使用起来。中是这样描述cgroups的:&控制组提供层次化的机制来管理任务组,使用它可以聚合和拆分任务组,并管理任务组后续产生的子任务。&换句话说,它提供了多种有效的方式来控制、限制和分配资源。systemd使用了cgroups,你可以便捷的查看它,使用下面的命令可以展示你系统中的整个cgroup树:
$ systemd-cgls
你可以使用ps命令来进行查看cgroup树:
$ ps xawf -eo pid,user,cgroup,args
常用命令集
下面的命令行展示了如何为守护进程重新装载配置文件,注意不是systemd服务文件。 使用这个命令能够激活新的配置项,且尽可能少的打断业务进程,下面以Apache为例:
# systemctl reload httpd.service
重新装载服务文件(service file)需要完全停止和重新启动服务。如果服务挂死了,用下面的命令行可以恢复它:
# systemctl restart httpd.service
你还可以用一个命令重启所有的守护进程。这个命令会重新装载所有守护进程的unit文件,然后重新生成依赖关系树:
# systemctl daemon-reload
在非特权模式下,你也可以进行重启、挂起、关机操作:
$ systemctl reboot
$ systemctl suspend
$ systemctl poweroff
按照惯例,最后给大家介绍一些systemd的学习材料。 和
是不错的入门材料,这两份文档里会链接到更多其他资源。
Linux 引导方式systemd upstart sysV
为什么systemd会被如此迅速的采用?
systemd 与 sysVinit 彩版对照表
Linux Systemd&&在RHEL/CentOS 7中启动/停止/重启服务
太有用了!用systemd命令来管理Linux系统!&
浅析 Linux 初始化 init 系统,第 3 部分: Systemd&
作者: Carla Schroder 译文: LCTT
译者: coloka
本文永久更新链接地址:
相关资讯 & & &
& (01月22日)
& (09/24/:11)
& (01月28日)
& (12/01/:25)
& (07/12/:17)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款Linux 系统管理(EL7)-Systemd篇 - 为程序员服务
Linux 系统管理(EL7)-Systemd篇
1.1 功能介绍
systemd 是 Linux 下一个与 SysV 和 LSB 初始化脚本兼容的系统和服务管理器。systemd 使用 socket 和 D-Bus 来开启服务,提供基于守护进程的按需启动策略,保留了 Linux cgroups 的进程追踪功能,支持快照和系统状态恢复,维护挂载和自挂载点,实现了各服务间基于从属关系的一个更为精细的逻辑控制,拥有前卫的并行性能。systemd 无需经过任何修改便可以替代 sysvinit官网地址:https://fedoraproject.org/wiki/Systemd/zh-cn
Docs http://0pointer.de/blog/projects/systemd-docs.html
1.2 工程依赖
2 环境搭建
2.1 环境要求
基础系统 EL7,or centos 7 ...
软件包 systemd
2.2 环境搭建
1 systemd服务管理systemctl is-enabled .service #查询服务是否开机启动
sudo systemctl enable .service #开机运行服务
sudo systemctl disable .service #取消开机运行
sudo systemctl start .service #启动服务
sudo systemctl stop .service #停止服务
sudo systemctl restart .service #重启服务
sudo systemctl reload .service #重新加载服务配置文件
systemctl status .service #查询服务运行状态
systemctl --failed #显示启动失败的服务2 开机模块加载/etc/modules-load.d/.conf,相当于原rc.conf中的MODULES变量模块黑名单仍在/etc/modprobe.d/下3 运行级别
第 3 运行级用 multi-user.target 替代。第 5 运行级用 graphical.target 替代。runlevel3.target 和 runlevel5.target 分别是指向 multi-user.target 和 graphical.target 的符号链接
你可以使用下面的命令切换到“运行级 3 ”:systemctl isolate multi-user.target (or) systemctl isolate runlevel3.target默认切换到运行级 3 :ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target4 查看当前运行级别
systemctl list-units --type=targe
ACTIVE SUB
DESCRIPTION
basic.target
loaded active active Basic System
cryptsetup.target
loaded active active Encrypted Volumes
getty.target
loaded active active Login Prompts
graphical.target
loaded active active Graphical Interface
local-fs-pre.target loaded active active Local File Systems (Pre)
local-fs.target
loaded active active Local File Systems
multi-user.target
loaded active active Multi-User System
network.target
loaded active active Network
nfs.target
loaded active active Network File System Server
paths.target
loaded active active Paths
remote-fs.target
loaded active active Remote File Systems
slices.target
loaded active active Slices
sockets.target
loaded active active Sockets
sound.target
loaded active active Sound Card
swap.target
loaded active active Swap
sysinit.target
loaded active active System Initialization
timers.target
loaded active active Timers
2.3 使用文件
文件在里面rootfs.img的存储方式和结构 :[root@]# cat /usr/lib/systemd/system/httpd.service
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target # 新依赖
Type=notify
EnvironmentFile=/etc/sysconfig/httpd #环境文件
ExecStart=/usr/sbin/httpd $OPTIONS –DFOREGROUND #启动命令
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true
WantedBy=multi-user.targ[unit]
unit是由一个与配置文件对应的名字和类型组成的(例如:avahi.service unit 有一个具有相同名字的配置文件,是守护进程 Avahi 的一个封装单元. 。unit 有以下几种类型:
service :守护进程的启动、停止、重启和重载是此类 unit 中最为明显的几个类型。
socket :此类 unit 封装系统和互联网中的一个 socket 。当下,systemd 支持流式、数据报和连续包的 AF_INET、AF_INET6、AF_UNIX socket 。也支持传统的 FIFOs 传输模式。每一个 socket unit 都有一个相应的服务 unit 。相应的服务在第一个“连接”进入 socket 或 FIFO 时就会启动(例如:nscd.socket 在有新连接后便启动 nscd.service)。
device :此类 unit 封装一个存在于 Linux 设备树中的设备。每一个使用 udev 规则标记的设备都将会在 systemd 中作为一个设备 unit 出现。udev 的属性设置可以作为配置设备 unit 依赖关系的配置源。
mount :此类 unit 封装系统结构层次中的一个挂载点。
automount :此类 unit 封装系统结构层次中的一个自挂载点。每一个自挂载 unit 对应一个已挂载的挂载 unit (需要在自挂载目录可以存取的情况下尽早挂载)。
target :此类 unit 为其他 unit 进行逻辑分组。它们本身实际上并不做什么,只是引用其他 unit 而已。这样便可以对 unit 做一个统一的控制。(例如:multi-user.target 相当于在传统使用 SysV 的系统中运行级别5);bluetooth.target 只有在蓝牙适配器可用的情况下才调用与蓝牙相关的服务,如:bluetooth 守护进程、obex 守护进程等)
snapshot :与 target unit 相似,快照本身不做什么,唯一的目的就是引用其他 unit 。
编写自定义的 service 文件时,可以选择几种不同的服务启动方式。启动方式可通过配置文件 [Service] 段中的 Type= 参数进行设置
Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。
Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。
Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
2.4 工程调试
工程调试运行时需要daemon-reload# systemctl daemon-reload
# systemctl restart &单元&
2.5 其他事项
1、 启动过程使用journalctl –b进行定位错误。
2、 注意使用service的type类型。
描述项目研制过程中将采用的其他方面的内容。
基础 分享 安全
原文地址:, 感谢原作者分享。
您可能感兴趣的代码

我要回帖

更多关于 综合管理服务系统 的文章

 

随机推荐