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
cgroupscgroups,或者叫控制组,在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 systemd 和 Understanding and Using Systemd 是不错的入门材料,这两份文档里会链接到更多其他资源。
Linux 引导方式systemd upstart sysV