在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只会被执行一次。

  • ExecStartPreExecStartPost

顾名思义,这两个设置的意义在于ExecStart被执行之前和之后被执行。

  • ExecReload

服务重启时执行。

  • ExecStop

服务停止时执行。

  • ExecStopPost

服务停止后执行。

作者:万岁爷
链接:https://www.jianshu.com/p/92208194d700
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

原文地址:https://www.cnblogs.com/mafeng/p/10316351.html

时间: 2024-11-05 12:32:37

在linux下创建自定义service服务的相关文章

一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务

一.掌握Samba服务的配置原理二.在linux下配置samba共享服务(匿名共享.身份验证.账户映射.访问控制)Samba介绍:Samba是运行在Linux与Unix之上的免费共享服务的软件,是典型服务器/客户端模式,它有两个进程,一个是smbd,主要是用来管理共享文件的进程,另一个是nmbd,用来实现主机名到IP地址的转换(相当于Windows下的NetBIOS的功能),smbd运行在TCP的139.445端口,nmbd则运行在UDP的137.138端口(运行samba服务后可以用如:net

linux下创建svn仓库及用户

1 Linux下创建svn仓库 1.1 启动SVN服务 svnserve -d -r  /SVNRootDirectry 其中SVNRootDirectry是你的SVN 根目录,例如192.85.1.2上的是:/SVN.-d 表示以后太服务方式执行,-r就表示root 1.2 创建仓储 1.2.1 在SVN根目录下建立版本仓库 svnadmin create study 命令 :svnadmin create  msm 其中msm是版本仓库的名字,仓库建立好了以后会有出现一个仓库名字的文件夹,文

Linux下的两种服务:RPM包默认安装的服务和源码包安装的服务

有些软件安装到电脑上后就会有一个或多个服务出现在系统服务管理里面,比如Apache,VMware软件等就会出现在计算机服务里面,可以随系统的启动而启动,当然也可以设置不启动,等要用了的时候再去启动,(可以在运行里面输入services.msc直接打开服务列表),但是有些软件安装到电脑后不会有什么服务生成,比如我们的聊天工具QQ. Linux下有两种服务,一种是RPM包默认安装的服务,一种是源码包安装的服务. RPM默认安装的服务在/etc/rc.d/init.d/文件下,执行service sm

转载: linux下创建svn代码库

linux下创建svn代码库 1.安装svn客户端 2.创建svn代码库 1.安装svn客户端 1.1.使用命令安装 1)CentOS $ yum install subversion 2)ubuntu sudo apt-get install subversion 1.2.源码安装 http://www.cnblogs.com/fengbohello/p/4142810.html 2.开启svn服务进程 2.1.我的习惯是把代码仓库放在/opt/svn目录下,所以先创建目录/opt/svn $

两种在linux下创建应用程序快捷方式的方法

两种在linux下创建应用程序快捷方式的方法: A. 在桌面上创建快捷方式 B. 在应用程序菜单中添加快捷方式 在桌面上创建快捷方式 这是最简单的一种方法,在桌面上单击鼠标右键,会有一个“创建启动器”栏.这里我以为mplayer创建快捷方式为例说明: 名称-mplayer(或者你喜欢的任何名称,这个名称会出现在快捷图标的 下方) 命令-/usr/bin/gmplayer(这个是mplayer的gui应用程序的执行文件,跟 安装路径相关,可以通过which gmplayer找到) 图标-一般应用程

4.windows和Linux下创建oracleusername表空间,表,插入数据,用户管理表等操作

进入超级管理员,运行下面命令 Window下创建数据库.表空间,用户,插入数据等操作 -- 01 创建表空间 -- 注意表空间的路径 依据实际安装环境进行调整 CREATE TABLESPACE ts_myscott LOGGING DATAFILE 'F:/app/to-to/oradata/orcl/ts_myscott.dbf' SIZE 10M EXTENT MANAGEMENT LOCAL; CREATE TABLESPACE ts_myscott2 LOGGING DATAFILE

4.windows和Linux下创建oracle用户名表空间,表,插入数据,用户管理表等操作

进入超级管理员,执行以下命令 Window下创建数据库,表空间,用户,插入数据等操作 -- 01 创建表空间 -- 注意表空间的路径 根据实际安装环境进行调整 CREATE TABLESPACE ts_myscott LOGGING DATAFILE 'F:/app/to-to/oradata/orcl/ts_myscott.dbf' SIZE 10M EXTENT MANAGEMENT LOCAL; CREATE TABLESPACE ts_myscott2 LOGGING DATAFILE

linux下创建用户

linux下创建用户(一) Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问:另一方面也可以帮助用户组织文件,并为用户提供安全性保护.每个用户账号都拥有一个惟一的用户名和各自的口令.用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录. 实现用户账号的管理,要完成的工作主要有如下几个方面: · 用户账

Linux下创建和删除用户

在Linux下创建用户和删除用户,必须在root用户下,如果你当前不是用根用户登录,你可以打开终端,输入"su root"命令,再输入根口令,就可以进入root用户模式下,如下所示: 创建用户(useradd): (1)用useradd命令创建用户创建用户: 语法: useradd [所要创建的用户名] ,回车 (2)用passwd命令为该用户创建密码: 语法: passwd [用户名]  ,回车 (3)输入密码:一般密码至少要有六个字符,这里输入的密码是看不见的,所以看到屏幕没显示,