在Centos7以前的版本中,系统管理员都是通过把bash脚本放到/etc/init.d/目录下来控制服务状态,比如启动start、停止stop,重启restart等。而在CentOS7版本中,就不在采用这种方法,而是采用了Unit配置文件来管理服务。接下来我们通过例子来简单讲述一下systemd service编写方法。
学过用过Centos7的朋友,都知道Systemd服务主要内容为:控制单元[unit]的定义、服务[service]的定义、安装[install]部分。
我们先写个脚本如下:
[root@localhost ~]# cat systemd_test.sh
#!/bin/bash
while true
do
echo `date`>> /root/systemd_test.txt
sleep 2
done
在脚本执行的时候,会循环(每2秒)把系统时间写入到/root/system_test.txt文件中,脚本不做过多的解释了,太简单了,执行程序的监控此文件即可。
编写systemd service,文件放到/etc/systemd/system目录下。文件内容如下:
[root@localhost ~]# cat /usr/lib/systemd/system/systemd_test.service
[Unit]
Description=date daemon
[Service]
ExecStart=/root/systemd_test.sh
Restart=always
Type=simple
[Install]
WantedBy=multi-user.target
执行运行命令:
systemctl start systemd_test.service
systemctl status systemd_test.service
tail -f /root/systemd_test.txt文件如下:
停止该服务:
systemctl stop systemd_test.service
清空systemd_test.txt内容:
> systemd_test.txt
设置该服务为开机自启动,然后重启电脑:
systemctl enable systemd_test.service
启动后查看服务运行状态,以及systemd_test.txt文件内容截图如下,表明开机自启动配置成功。
取消开机自启动命令:
systemctl disable systemd_test.service
systemd配置文件说明:
控制单元[Unit]:记录unit文件的通用信息
Description:单元的描述,内容可以任意书写,
服务[Service]:记录service的信息
ExecStart:服务启动时执行的命令,通常是服务的主体。若服务类型不是oneshot,那么它只接受一个命令,参数不限制。如果是多个命令用分号隔开。
Restart:定义服务何种情况下重启。
Type:service的种类,simple(默认):启动的程序是主体程序,这个程序退出那么一切都退出;forking:标准 Unix Daemon 使用的启动方式。启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程;oneshot:就是启动,完成,没进程。
安装[Install]:安装信息
WantedBy:任何情况下,服务被启用。
WantedBy =multi-user.target,多用户环境下启用
这是最简单systemd编写,还有很多东西没有涉及,请大家自行学习。