开启辅助访问 切换到窄版

打印 上一主题 下一主题

在linux系统中怎么编写SystemdService

[复制链接]
作者:你不防 
版块:
嵌入式操作系统 linux 发布时间:2020-9-23 05:51:50
21610
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在Centos7以前的版本中,系统管理员都是通过把bash脚本放到/etc/init.d/目录下来控制服务状态,比如启动start、停止stop,重启restart等。而在CentOS7版本中,就不再采用这种方法,而是采用了Unit配置文件来管理服务。接下来我们通过例子来简单讲述一下systemd service编写方法。
学过用过Centos7的朋友,都知道Systemd服务主要内容为:控制单元的定义、服务的定义、安装部分。
我们先写个脚本如下:
# 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目录下。文件内容如下:
# cat /usr/lib/systemd/system/systemd_test.service
Description=date daemon
ExecStart=/root/systemd_test.sh
Restart=always
Type=simple
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文件的通用信息
Description:单元的描述,内容可以任意书写,
服务:记录service的信息
ExecStart:服务启动时执行的命令,通常是服务的主体。若服务类型不是oneshot,那么它只接受一个命令,参数不限制。如果是多个命令用分号隔开。
Restart:定义服务何种情况下重启。
Type:service的种类,simple(默认):启动的程序是主体程序,这个程序退出那么一切都退出;forking:标准 Unix Daemon 使用的启动方式。启动程序后会调用 fork 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程;oneshot:就是启动,完成,没进程。
安装:安装信息
WantedBy:任何情况下,服务被启用。
WantedBy =multi-user.target,多用户环境下启用
这是最简单systemd编写,还有很多东西没有涉及,请大家自行学习。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表