首页 > 代码库 > centos 7 中的 systemd

centos 7 中的 systemd

systemd的服务管理程序

systemctl是最主要的工具。它融合 service 和chkconfig的功能于一体。你可以使用它永久性或只在当前会话中启用/禁用服务。

下面命令用于列出正在运行的服务或其他: systemctl

更多详细信息请参考手册页(man systemctl)。systemd-cgls以树形列出正在运行的进程。它可以递归显示给定控制组内容。详情请参阅systemd-cgls手册页。

如何启动/关闭、启用/禁用服务?

运行一个服务:

systemctl start foo.service 关闭一个服务:

systemctl stop foo.service 重启一个服务:

systemctl restart foo.service

显示一个服务(无论运行与否)的状态: systemctl status foo.service

在开机时启用一个服务: systemctl enable foo.service

在开机时禁用一个服务: systemctl disable foo.service

查看服务是否开机启动: systemctl is-enabled iptables.service;echo $?

修改运行级别:

systemd使用比sysvinit的运行级更为自由的 target 概念作为替代。

第 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

你也可以使用下面的命令切换到“运行级 5 ”:

systemctl isolate graphical.target (or)

systemctl isolate runlevel5.target

如何改变默认运行级别?

systemd使用链接来指向默认的运行级别。在创建新的链接前,你可以通过下面命令删除存在的链接: rm /etc/systemd/system/default.target

默认切换到运行级 3 :

ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

默认切换到运行级 5 :

ln -sf /lib/systemd/system/graphical.target/etc/systemd/system/default.target 

systemd不使用/etc/inittab文件。 如何查看当下运行级别? 

runlevel命令在systemd下仍然可以工作。你可以继续使用它,尽管systemd使用 ‘target‘ 概念(多个的 ‘target‘ 可以同时激活)替换了之前系统的runlevel。

等价的systemd命令是

systemctl list-units --type=target

 

CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,还是存在系统服务里吧,即:/usr/lib/systemd/system目录下

每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install],我写的这个服务用于开机运行Node.js项目,具体内容如下:

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. [Unit]  
  2. Description=xiyoulibapi  
  3. After=network.target remote-fs.target nss-lookup.target  
  4.    
  5. [Service]  
  6. Type=forking  
  7. PIDFile=/node.js/pid  
  8. ExecStart=/usr/local/bin/forever start /node.js/xiyoulib/bin/www  
  9. ExecReload=/usr/local/bin/forever restart /node.js/xiyoulib/bin/www  
  10. ExecStop=/usr/local/bin/forever stop /node.js/xiyoulib/bin/www  
  11. PrivateTmp=true  
  12.    
  13. [Install]  
  14. WantedBy=multi-user.target  

 

 

[Unit]部分主要是对这个服务的说明,内容包括Description和After,Description用于描述服务,After用于描述服务类别

[Service]部分是服务的关键,是服务的一些具体运行参数的设置,这里Type=forking是后台运行的形式,PIDFile为存放PID的文件路径,ExecStart为服务的具体运行命令,ExecReload为重启命令,ExecStop为停止命令,PrivateTmp=True表示给服务分配独立的临时空间,注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!

[Install]部分是服务安装的相关设置,可设置为多用户的

 

服务脚本按照上面编写完成后,以754的权限保存在/usr/lib/systemd/system目录下,这时就可以利用systemctl进行配置了

首先,使用systemctl start [服务名(也是文件名)]可测试服务是否可以成功运行,如果不能运行则可以使用systemctl status [服务名(也是文件名)]查看错误信息和其他服务信息,然后根据报错进行修改,直到可以start,如果不放心还可以测试restart和stop命令。

接着,只要使用systemctl enable xxxxx就可以将所编写的服务添加至开机启动即可。

 

我的脚本编写方法参照了nginx的编写方法,也可以根据其他功能类似的程序。

 

这样看来,虽然systemctl比较陌生,但是其实比init.d那种方式简单不少,而且使用简单,systemctl能简化的操作还有很多,现在也有不少的资料,看来RHEL/CentOS比其他的Linux发行版还是比较先进的,此次更新也终于舍弃了Linux 2.6内核,无论是速度还是稳定性都提升不少。

centos 7 中的 systemd