【参考文章】:Systemd 入门教程:实战篇

【参考文章】:linux systemctl命令详解

1. 简介

  将程序注册为系统服务后,可通过 systemctl 和 service 系统命令启动,查看,停止程序,并可以将程序设置为开机自启动等等。

  将程序注册为系统服务,需要编辑xxx.service文件,并将文件存储到 /usr/lib/systemd/system/ 目录下

2. 常用命令

  命令格式:systemctl 动作    服务名,service   服务名  动作, 两个命令效果一样

  systemctl  status  xxx  查看服务状态

  systemctl  start  xxx    启动服务

  systemctl  stop  xxx         停止服务

  systemctl  restart  xxx      重启服务

  systemctl  enable  xxx     启用服务开机自启动

  systemctl  disable  xxx    禁止服务开机自启动

  systemctl  list-units  --type=service  查看所有已启动的服务

  修改xxx.service文件后,需要执行 systemctl daemon-reload 重新加载文件;

3. service 文件格式

  vim /usr/lib/systemd/system/sshd.service

[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd() man:sshd_config()
After=network.target sshd-keygen.service
Wants=sshd-keygen.service [Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
PrivateTmp=true [Install]
WantedBy=multi-user.target

3.1 Unit

 此区块信息用于描述当前服务的简单描述:

  Description:服务描述信息;

  Documentation:文档相关信息;

  下面四个选项只涉及启动顺序,不涉及依赖关系;

  After:定义sshd服务应该在哪些服务之后启动;

  Before:定义sshd服务应该在哪些服务之前启动;

  Requires:表示强依赖关系,如果sshd服务启动失败或异常退出,则Requires配置的服务也必须退出;

  Wants:表示若依赖关系,如果sshd服务启动失败或异常退出,不影响Wants配置的服务;

3.2 Service

此区块定义如何启动当前服务

3.2.1 启动类型

 type 字段定义启动类型 

  simple:默认值,ExecStart字段启动的进程为主进程,如果启动脚本中 以 nohup & 形式启动进程时,此时启动脚本后会自动 kill 当前服务;

  forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程;

  oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务,表明这个服务只要运行一次就行;

  dbus:类似于simple,但会等待 D-Bus 信号后启动

  notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务

  idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合

3.2.2 启动,停止,重启命令

  EnvironmentFile:环境参数配置文件,文件内部配置参数形式为key=value键值对,可以在service文件中以$key的形式引用配置项;

  ExecStart:启动服务时执行的命令;

  ExecReload:重启服务时执行的命令;

  ExecStop:停止服务时执行的命令;

  ExecStartPre:启动服务之前执行的命令;

  ExecStartPost:启动服务之后执行的命令;

  ExecStopPost:停止服务之后执行的命令;

3.2.3 停止模式

  KillMode 表示停止服务时的方式

  control-group:默认值,当前控制组里面的所有子进程,都会被杀掉

  process:只杀主进程

  mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号

  none:没有进程会被杀掉,只是执行服务的 stop 命令

3.2.4 PrivateTmp

  该字段用于设置服务是否使用私有的 tmp目录;

  该目录在 /tmp目录下,目录名格式如下:

  /tmp/systemd-private-66ae5e5313ba4417b83b427fddb36e47-xxx.service-s65dIw/

  服务启动时创建一个目录,服务停止时删除临时目录;

  启用该属性后,写临时文件时可能会写到这个目录下,需要注意一下

  php-fpm临时文件路径问题(Sytemd PrivateTmp的坑)

  Systemd Unit文件中PrivateTmp字段详解-Jason.Zhi

3.3 Install

  定义如何安装配置文件;

  WantedBy:表示服务所在的服务组;

  WantedBy=multi-user.target 表示 sshd服务属于 multi-user.target 用户组;

  multi-user.target 组里的所有服务都将开机启动;

  执行 systemctl enable sshd.service 时将把 sshd.service 文件的一个符号链接保存到 /etc/systemd/system 目录下的 multi-user.target.wants 子目录中;

4. service文件模板

  最简化的service模板

[Unit]
Description=simulator [Service]
Type=simple
ExecStart=/home/chenfan/simulator/start.sh
ExecStop=/home/chenfan/simulator/stop.sh [Install]
WantedBy=multi-user.target

  

  

Linux:注册系统服务的更多相关文章

  1. linux中注册系统服务—service命令的原理通俗

    能够使用service命令进行操作的,就是已经注册成为linux的系统服务了.window中也可以注册成为系统服务的办法. service命令用的次数真不少,就是比较多的关联点,用了很多次了,还是有些 ...

  2. linux服务开机自启动&注册系统服务

    首先先看下linux系统开机启动顺序,如下图 对,要解决Linux CentOS 和 Red Hat Linux 系统中设置服务自启动有两种方式,就是从图中圈出的两个步骤下手. 一.修改 /etc/r ...

  3. Linux(CentOS6.5)下Nginx注册系统服务(启动、停止、重启、重载等)&设置开机自启

    本文地址http://comexchan.cnblogs.com/ ,作者Comex Chan,尊重知识产权,转载请注明出处,谢谢! 完成了Nginx的编译安装后,仅仅是能支持Nginx最基本的功能, ...

  4. linux写系统服务的方法

    linux写系统服务的方法 2.1 首先编写demo程序:hello.c<pre>#include <stdio.h> # chkconfig: 2345 10 90 main ...

  5. 基于xposed实现android注册系统服务,解决跨进程共享数据问题

    昨花了点时间,参考github issues 总算实现了基于xposed的系统服务注入,本文目的是为了“解决应用之间hook后数据共享,任意app ServiceManager.getService就 ...

  6. linux注册服务教程

    该说明是项目完成很久之后,整理资料时的偶然发现,当时所操作的linux为中标麒麟,需要对项目进行开机自启,对llinux还不熟悉,找不到linux中的服务自启设置.辗转多次才找到了解决方案.记录以供参 ...

  7. linux备忘录-系统服务daemon

    服务(daemon)及其分类 Linux中的服务被称为daemon(daemon是守护神,恶鬼的意思哦).这些daemon会常驻在内存当中,从而对我们的系统和任务等进行一些辅助性的工作.实际上,dae ...

  8. linux初学者-系统服务的控制

      linux系统中系统服务的控制是比较重要的一部分,这也直接影响到计算机的使用,以下将会介绍一些系统服务的控制. 1.系统服务命令 系统的初始化程序是系统开始的第一个进程,pid为1.可以通过以下命 ...

  9. linux 注册一个 PCI 驱动

    为了被正确注册到内核, 所有的 PCI 驱动必须创建的主结构是 struct pci_driver 结构. 这个结构包含许多函数回调和变量, 来描述 PCI 驱动给 PCI 核心. 这里是这个结构的一 ...

随机推荐

  1. 负载均衡框架 ribbon 二

    Ribbon 负载均衡机制 官方文档地址:https://github.com/Netflix/ribbon/wiki/Working-with-load-balancers 1. Ribbon 内置 ...

  2. nes 红白机模拟器 第4篇 linux 手柄驱动支持

    小霸王学习机的真实手柄,实测CPU 占用 80% 接线图: 手柄读时序: joypad.c 驱动: 普通的字符设备驱动. #include <linux/module.h> #includ ...

  3. ReentrantLock源码探究

    ReentrantLock是一种可重入锁,可重入是说同一个线程可以多次获取同一个锁,内部会有相应的字段记录重入次数,它同时也是一把互斥锁,意味着同时只有一个线程能获取到可重入锁. 1.构造函数 pub ...

  4. 利用mnist数据集进行深度神经网络

    初始神经网络 这里要解决的问题是,将手写数字的灰度图像(28 像素 x28 像素)划分到 10 个类别中(0~9).我们将使用 MINST 数据集,它是机器学习领域的一个经典数据集,其历史几乎和这个领 ...

  5. 工具之scroolToIndex

    需求定位:导航中实现子元素滚动到父元素的最左侧 解决方案:查找该子元素的offsetLeft值,然后让父元素滚动offsetLeft,parenDom.scrollLeft = childDom.of ...

  6. (转)C++中的new

    转载自:http://blog.csdn.net/sparkliang/article/details/3650324 C++中的new其实是一个很糊弄人的术语,它有两种不同的含义,new运算符(ne ...

  7. vue 接口 对象数组的传入传出

    数组传入 对象的话用{...obj} <selectFile :tableData="[...tableData]" @uploadSuccess="data =& ...

  8. Axure 文本框去掉边框 富文本 粘贴文字图标

    在今天做原型的过程中,碰到两个问题: 1 文本框该如何去掉边框 2 富文本粘贴文字图标 第一个问题:首先是思路错了,又跑到元件上面找边框,跑到style里面去border的线,结果是不成功. 正解:属 ...

  9. Centos7安装Elasticsearch和Kibana

    这里使用的6.6.0版本,ES需要JDK环境,对应1.8 Elasticsearch安装: 1.下载:https://elasticsearch.cn/download/ 2.解压: 3.修改配置:j ...

  10. ADO.NET 的使用(一)

    一.ADO.NET概要 ADO.NET 是一组向 .NET Framework 程序员公开数据访问服务的类. ADO.NET 为创建分布式数据共享应用程序提供了一组丰富的组件. 它提供了对关系数据.X ...