systemd的运行级别与服务管理命令简介(2)

After=network.target remote-fs.target nss-lookup.target

[Service]

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

[Install]

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-}"

else

DIR_SUFFIX=

整个文件一共有410行。

你可以检查unit文件的依赖关系,我常常被这些复杂的依赖关系给吓到:

$ systemctl list-dependencies httpd.service

cgroups

cgroups,或者叫控制组,在Linux内核里已经出现好几年了,但直到systemd的出现才被真正使用起来。The kernel documentation中是这样描述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的学习材料。Here We Go Again, Another Linux Init: Intro to systemdUnderstanding and Using Systemd 是不错的入门材料,这两份文档里会链接到更多其他资源。

Linux 引导方式systemd upstart sysV

为什么systemd会被如此迅速的采用?

systemd 与 sysVinit 彩版对照表

Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务

太有用了!用systemd命令来管理Linux系统! 

浅析 Linux 初始化 init 系统,第 3 部分: Systemd 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/17105.html