在linux下创建自定义service服务
三个部分
这个脚本分为3个部分:[Unit] [Service] [Install]。
Unit
Unit表明该服务的描述,类型描述。我们称之为一个单元。比较典型的情况是单元A要求在单元B启动之后再启动。这种设置是通过Unit下面的Requires、After、Before、Wants
来调整的。比如上述场景的编写可以这样(在A中编写):
Requires=B`
`After=B
这段设置表明了A的启动依赖于B,同时有要求在B启动之后启动自己。设置十分简介。需要注意的是,依赖关系通常用在服务(Service)而不是目标(Target)上。
Service
Service是脚本的关键部分,这一部分用于设置一些关键参数:
Type=forking
: 后台运行模式PIDFile=/xxx/xxx.xxx
: 存放PID文件的位置ExecStart=/bin/echo xxx
: 这是服务运行的具体执行命令ExecReload=/bin/echo xxx
: 这是服务重启的执行命令EexcStop=/bin/echo xxx
: 这是服务停止的执行命令
Service的启动方式,在Service段中,启动方式使用Type指定。具体可以参考man systemd.service
。
值得注意的是,在脚本中关于服务启动、重启、关闭的指令需要使用绝对路径,否则会出现无法识别的情况。
当完成一个服务脚本后,我们就可以使用systemctl start|stop|restart xxx.service等指令了。若要开机启动这个服务我们使用如下的指令:
systemctl enable xxx.service
若要关闭开机启动:
systemctl disable xxx.service
当我们需要查看服务信息的使用可以使用如下指令:
systemctl list-units --type=service
: 列出正在运行的服务
在service片段中有几个概念很重要,这直接影响到实践中创建自定义服务的最终结果。以下内容根据linux系统
中man systemd.service
用户手册说明经过翻译和整理而得。
service配置之Type
首先是Type配置,在service片段中有Type的配置,这个配置给当前的服务单元用于设置进程的启动类型。
Type有如下几种可选项:
simple
forking
oneshot
dbus
notify
idel
simple,这是默认的Type,当Type和BusName配置都没有设置,指定了ExecStart设置后,simple就是默认的Type设置。simple使用ExecStart创建的进程作为服务的主进程。在此设置下systemd会立即启动服务,如果该服务要启动其他服务(simple不会forking),它们的通讯渠道应当在守护进程启动之前被安装好(e.g. sockets,通过sockets激活)。
forking,如果使用了这个Type,则ExecStart的脚本启动后会调用fork()函数创建一个进程作为其启动的一部分。当一切初始化完毕后,父进程会退出。子进程会继续作为主进程执行。这是传统UNIX主进程的行为。如果这个设置被指定,建议同时设置PIDFile选项来指定pid文件的路径,以便systemd能够识别主进程。
oneshot,onesh的行为十分类似simple,但是,在systemd启动之前,进程就会退出。这是一次性的行为。可能还需要设置RemainAfterExit=yes,以便systemd认为j进程退出后仍然处于激活状态。
dbus,这个设置也和simple很相似,该配置期待或设置一个name值,通过设置BusName=设置name即可。
notify,同样地,与simple相似的配置。顾名思义,该设置会在守护进程启动的时候发送推送消息(通过sd_notify(3))给systemd。
Service其他配置节点
RemainAfterExit
:默认值no
默认值为no,这个设置采用booleean值,可以是0、no、off、1、yes、on等值。它表明服务是否应当被视为激活的,即便当它所有的进程都退出了。简言之,这个设置用于告诉systemd服务是否应当是被视为激活状态,而不管进程是否退出。当为true时,即便服务退出,systemd依然将这个服务视为激活状态,反之则服务停止。
GuessMainPID
采用boolean值指定systemd在无法确切的查明服务的时候是否需要猜测服务的main pid。除非Type=forking
被采用并且PIDFile没有被设置,否则这个选项会被忽略。因为当设置为Type的其他选项,或者显示的指定了PID文件后,systemd总是能够知道main pid。
PIDFile
采用一个绝对路径的文件名指定守护进程的PID文件。当Type=forking被设置的时候,建议采取这个设置。当服务启动后,systemd会读取守护进程的主进程id。systemd不会对该文件写入数据。
BusName
使用一个D-Bus的总线名称,作为该服务的可访问名称。当Type=dbus
的时候,该设置被强制使用。
BusPolicy
如果该选项被指定,一个自定义的kdbus终结点将会被创建,并且会被指定为默认的dbus节点安装到服务上。这样的自定义终结点自身持有一个策略规则集合。这些规则将会在总线范围内被强制指定。该选项只有在kdbus被激活时有效。
ExecStart
当服务启动的时候(systemctl start youservice.service
),会执行这个选项的值,这个值一般是“ExecStart=指令 参数”
的形式。当Type=oneshot
的时候,只有一个指令可以并且必须给出。原因是oneshot只会被执行一次。
ExecStartPre
、ExecStartPost
顾名思义,这两个设置的意义在于ExecStart
被执行之前和之后被执行。
ExecReload
服务重启时执行。
ExecStop
服务停止时执行。
ExecStopPost
服务停止后执行。
在linux下创建自定义service服务相关推荐
- 关于ubuntu自定义service服务时找不到/usr/lib/systemd/system目录的问题
关于ubuntu自定义service服务时找不到/usr/lib/systemd/system目录的问题 问题 我们知道在 systemd 取代了 init 而成为广大 Linux 系统中 PID 为 ...
- linux sftp创建多用户,Linux 下创建 sftp 用户并限定目录
Linux 下创建 sftp 用户并限定目录 1.创建 sftpUser 用户组 [root@XXX ~]# groupadd sftpUser 2.创建 sftpUser 用户并指定目录 [root ...
- linux postgresql 创建数据库,Linux下创建Postgresql数据库的方法步骤
Linux下创建Postgresql数据库的方法步骤 前言 PostgreSQL (也叫 Postgres)是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行. ...
- linux在vi创建文件,Linux下创建文本文件(vi/vim命令使用详解)
vi test.txt 或者 vim test.txt 再或者 touch test.txt vim是vi的升级版,指令更多,功能更强. 下面是收集的vim用法,当在vim里面要实现退出,首先要做的是 ...
- Linux下yum安装SVN服务端
Linux下yum安装SVN服务端 1.查看yum是否安装 2.安装svn 3.创建目录并配置 4.用户密码passwd配置 5.权限控制authz配置 6.服务svnserve.conf配置 7.启 ...
- linux下搭建vsftp锁定根目录,Linux下创建ftp用户并锁定根目录
[root@d vsftpd]# vi /etc/vsftpd/chroot_list 加入要锁定根目录的ftp用户名(一行只能一个用户) [root@ vsftpd]# vi /etc/vsftpd ...
- linux下安装配置redis服务
2019独角兽企业重金招聘Python工程师标准>>> linux下安装配置redis服务 2016年03月25日 15:39:31 coding_everyday 阅读数:3530 ...
- linux80端口检查,Linux下基于端口的服务检查脚本
Linux下基于端口的服务检查脚本 #!/bin/bash #program:Usingtostudythe[if...then...fi]program #dsk2007/10/83:00 #con ...
- linux下创建svn仓库及用户
1 Linux下创建svn仓库 1.1 启动SVN服务 svnserve -d -r /SVNRootDirectry 其中SVNRootDirectry是你的SVN 根目录,例如192.85.1. ...
最新文章
- centos 7 安装nfs 服务
- docker+jenkins+maven+svn
- Nutch关于robot.txt的处理
- UML造型——使用EA时序图工具的开发实践和经验
- 《Docker进阶与实战》——3.3节Docker image的组织结构
- 计科1501韩猛实验8
- 二、python_base
- (单层)感知机学习规则
- Linux中的ps命令
- Gephi可视化(二)——Gephi Toolkit叫板Prefuse
- 使用微信模板消息时,使发送的文本消息换行展示
- win10不自带扫雷,想玩扫雷怎么办?自己造一个扫雷
- 各种编程语言的适用范围
- ReactNative实现仿微信或者通讯录快速索引功能
- EndNote使用教程
- 提高计算机软件速度的方法,小白看过来!提高电脑速度8种实用方法
- SpringBoot下结合使用Cacheable、CacheEvict和Scheduled注解轻松实现可过期本地缓存
- 深入浅出React和Redux-程墨
- 一款可以排查重复照片,清理多余照片的照片管理软件,使用PowerPhotos的图像浏览器快速查看照片
- 【通俗易懂的解释】HttpSession session = request.getSession(false);中的false是什么意思