使用 systemd 来管理启动项 启动序列( 二 )

通过查看服务状态来确认服务单元文件能如期运行 。如有任何语法问题,这里会显示错误 。
[root@testvm1 ~]# systemctl status hello.service● hello.service - My hello shell script     Loaded: loaded (/etc/systemd/system/hello.service; disabled; vendor preset: disabled)     Active: inactive (dead)[root@testvm1 ~]#你可以运行这类 “oneshot”(单发)类型的服务多次而不会有问题 。此类服务适用于服务单元文件启动的程序是主进程,必须在 systemd 启动任何依赖进程之前完成的服务 。
共有 7 种服务类型,你可以在 systemd.service(5)的手册页上找到每一种(以及服务单元文件的其他部分)的详细解释 。(你也可以在文章末尾的资料中找到更多信息 。)
出于好奇,我想看看错误是什么样子的 。所以我从 Type=oneshot这行删了字母 “o”,现在它看起来是这样Type=neshot,现在再次执行命令:
[root@testvm1 ~]# systemctl status hello.service● hello.service - My hello shell script     Loaded: loaded (/etc/systemd/system/hello.service; disabled; vendor preset: disabled)     Active: inactive (dead)May 06 08:50:09 testvm1.both.org systemd[1]: /etc/systemd/system/hello.service:12: Failed to parse service type, ignoring: neshot[root@testvm1 ~]#执行结果明确地告诉我错误在哪,这样解决错误变得十分容易 。
需要注意的是即使在你将 hello.service文件保存为它原来的形式之后,错误依然存在 。虽然重启机器能消除这个错误,但你不必这么做,所以我去找了一个清理这类持久性错误的方法 。我曾遇到有些错误需要systemctl daemon-reload命令来重置错误状态,但是在这个例子里不起作用 。可以用这个命令修复的错误似乎总是有一个这样的声明,所以你知道要运行它 。
然而,每次修改或新建一个单元文件之后执行 systemctl daemon-reload确实是值得推荐的做法 。它提醒 systemd 有修改发生,而且它可以防止某些与管理服务或单元相关的问题 。所以继续去执行这条命令吧 。
在修改完服务单元文件中的拼写错误后,一个简单的 systemctl restart hello.service命令就可以清除错误 。实验一下,通过添加一些其他的错误至hello.service文件来看看会得到怎样的结果 。
启动服务现在你已经准备好启动这个新服务,通过检查状态来查看结果 。尽管你可能之前已经重启过,你仍然可以启动或重启这个单发服务任意次,因为它只运行一次就退出了 。
继续启动这个服务(如下所示),然后检查状态 。你的结果可能和我的有区别,取决于你做了多少试错实验 。
[root@testvm1 ~]# systemctl start hello.service[root@testvm1 ~]# systemctl status hello.service● hello.service - My hello shell script     Loaded: loaded (/etc/systemd/system/hello.service; disabled; vendor preset: disabled)     Active: inactive (dead)May 10 10:37:49 testvm1.both.org hello.sh[842]: ######### Hello World! ########May 10 10:37:49 testvm1.both.org hello.sh[842]: ###############################May 10 10:37:49 testvm1.both.org systemd[1]: hello.service: Succeeded.May 10 10:37:49 testvm1.both.org systemd[1]: Finished My hello shell script.May 10 10:54:45 testvm1.both.org systemd[1]: Starting My hello shell script...May 10 10:54:45 testvm1.both.org hello.sh[1380]: ###############################May 10 10:54:45 testvm1.both.org hello.sh[1380]: ######### Hello World! ########May 10 10:54:45 testvm1.both.org hello.sh[1380]: ###############################May 10 10:54:45 testvm1.both.org systemd[1]: hello.service: Succeeded.May 10 10:54:45 testvm1.both.org systemd[1]: Finished My hello shell script.[root@testvm1 ~]#

推荐阅读