前言

服务是应用程序存在的一种形式,静态的程序(即代码)运行成为进程运行于后台,从而执行规定的业务逻辑,对于后端程序而言通常是监听端口以处理来自客户端的请求。但这并非是一个服务,而只是一个运行于后台的守护进程罢了。服务是对这个进程进行管理,通过服务配置文件中设定好的一些命令和配置参数,可以对进程的生命周期进行管理和监控。

使用

服务配置文件(即.service文件)书写格式:

[Unit]
#服务的描述信息
Description=xxx daemon
#本服务依赖的服务,启动本服务前会检查并启动依赖的服务,且只有依赖的服务全都成功启动,本服务才能启动
Requires=aaa.service bbb.service
#同Requires,本服务需要在指定的服务都启动之后才能启动
After=111.service 222.service
#本服务需要在指定的服务启动之前启动
Before=AAA.service BBB.service[Service]
#服务的启动类型,idle是后台方式启动
Type=idle
#服务启动命令和停止命令的超时时间,即服务启动命令和停止命令超时时间都为10s,若不设置超时时间或设置为0,则表示没有限定超时时间,下同
#TimeoutSec=10s
#服务启动命令的超时时间
TimeoutStartSec=10s
#启动命令的前置命令
ExecStartPre=/bin/echo "starting service"
#服务管理的应用程序的启动命令
ExecStart=/usr/local/bin/dophin
#启动命令的后置命令
ExecStartPost=/bin/echo "start done"
#服务停止命令的超时时间
TimeoutStopSec=10s
#服务管理的应用程序的停止命令($MAINPID是服务管理的应用程序的进程ID,下同)
ExecStop=/bin/kill -9 $MAINPID
#停止命令的后置命令
ExecStopPost=/bin/echo "stop done"
#服务重启命令
ExecReload=/bin/kill -1 $MAINPID
#服务重启方式,no表示不重启,always表示总是尝试重启(只有在服务意外挂掉的时候会重启)
Restart=always
#服务重启前的等待时间
RestartSec=1s
#停止服务杀死进程的方式,process表示只杀死主进程,即服务管理的应用程序
KillMode=process[Install]
#设置只有系统是多用户的运行方式下才能启动本服务
WantedBy=multi-user.target

上面就是编写.service配置文件常见的一些配置参数,并非所有的都需要,根据需要进行设定即可。

编写完.service之后需要将该配置文件放到/etc/systemd/system目录下,然后将服务设置为开机启动

#假设服务配置文件命令dophin.service
#将服务设置为开机启动
systemctl enable dophin.service
#关闭服务开机启动
systemctl disable dophin.service
#查看服务的状态
systemctl status dophin.service
#启动服务,对应dophin.service中的ExecStart
systemctl start dophin.service
#重启服务,对应dophin.service中的ExecReload
systemctl restart dophin.service
#停止服务,对应dophin.service中的ExecStop
systemctl stop dophin.service
#后台进程重新加载配置(相当于重启)
systemctl daemon-reload

启动服务,查看服务状态,然后尝试使用服务管理的应用程序,如果是后端程序的话直接发请求看看能不能成功处理并返回。

#查看运行日志(记录了服务的运行日志,可以用于服务启动失败时的错误定位)
journalctl -xe

FAQ

Q:同一个应用程序被不同的服务进行管理?(即不同服务的启动命令操作的是同一个应用程序)
A:报错如下:

解决方案:修改.service让应用程序只被一个服务管理即可。

Linux service之自定义服务相关推荐

  1. factory service provide自定义服务

    1.factory factory , 就是你提供一个方法, 该方法返回一个对象的实例, 对于 AngularJS 的 factory 来说, 就是先定义一个对象, 给这个对象添加属性和方法, 然后返 ...

  2. 在linux下创建自定义service服务

    三个部分 这个脚本分为3个部分:[Unit] [Service] [Install]. Unit Unit表明该服务的描述,类型描述.我们称之为一个单元.比较典型的情况是单元A要求在单元B启动之后再启 ...

  3. linux之systemctl设置自定义服务

    1 问题 在linux系统上设置自定义服务,或者让我的服务开机就运行起来,比如我们就以tomcat服务为例子 /usr/local/tomcat/bin/startup.sh 启动tomcat的脚本 ...

  4. linux远程日志rsyslog服务端和客户端安装(亲测)--自定义接收日志格式

    linux远程日志rsyslog服务端和客户端安装 用rsyslog的缘由:  1.防止系统崩溃无法获取系统日志分享崩溃原因,用rsyslog可以把日志传输到远程的日志服务器上  2.使用rsyslo ...

  5. Android11(RK3568)自定义服务制作(2)-Service制作

    上一篇介绍了如何在android中制作kernel驱动,并在驱动中留下了dev和sys两种接口供应用程序调用. Android11(RK3568)自定义服务制作(1)-Kernel驱动 一,驱动测试 ...

  6. Service 服务详解 及自定义服务模板

    文章目录 1.服务简介 2.服务的生命周期 1) Service 的 启动 停止 2).服务的生命周期的方法 3.使用startService 启动后服务的生命周期 1).文件结构 2) activi ...

  7. linux 下的 service 和systemctl 服务管理方式

    linux 下的 service  和systemctl 服务管理方式 man service 得到:执行一个system V 风格的启动脚本 service - run a System V ini ...

  8. linux命令:FTP服务

    FTP:file transfer protocol 文件传输协议 端口:21/tcp 文件共享服务: NFS:network file system (RPC: Remote procedure c ...

  9. linux服务器开机管理,Linux服务器开机自动启动服务或脚本的方法

    由于种种原因我们需要重启服务器或断电重启,服务都得手动一个一个启动太过麻烦,所以专门了解开机自启脚本的设置方法. 方式一: 直接在脚本/etc/rc.d/rc.local(和/etc/rc.local ...

最新文章

  1. 非二叉树 UVA297 四分树 Quadtrees
  2. WebSockets[翻译]
  3. vue学习笔记(WebStorm安装)
  4. 八、Flume的构架,安装和基本使用
  5. 飞鸽传书2012是否发布了?
  6. 信息学奥赛一本通 1924:【03NOIP普及组】栈 | 洛谷 P1044 [NOIP2003 普及组] 栈
  7. XML NameSpace
  8. spark报错: Yarn application has already ended! killed or unable to launch application master
  9. linux-2.6.
  10. ObjectDataSource自定义分页
  11. 天秀,Excel居然还可以制作二维码
  12. python爬取数据教程_python爬虫爬取网页数据并解析数据
  13. python/Matplotlib绘制复变函数图像
  14. 【论文笔记】Neural Machine Translation by Jointly Learning to Align and Translate
  15. 使用js+css样式实现淘宝详情页图片放大镜的效果
  16. GitHub个人Blog完全攻略
  17. 作业4: 用户体验分析——以 “师路南通网站” 为例
  18. Android 实现企业微信自动打卡任务同时支持钉钉急速打卡模式
  19. java 组织机构代码_JAVA实现社会统一信用代码较验
  20. 【已解决】error: conflicting declaration ‘typedef struct LZ4_stream_t LZ4_stream_t’ typedef struct { long

热门文章

  1. android版本9是什么,安兔兔:81.9%的用户升级到了Android 9,你的手机是什么版本呢?...
  2. 《恐怖电脑》技术支持
  3. IOS开发之延时执行的几种方法
  4. 和平精英有了氪金系统,玩家再也不敢开挂了?网友:你到亚服看看
  5. uploaded php,uploaded.php
  6. matplotlib入门-直方图、饼图、散点图
  7. 口语8000句--(2)生病、受伤时
  8. 计算机辅助英语词汇教学,计算机与网络辅助大学英语词汇教学
  9. Java笔试/面试题
  10. Huffman 编码的实现(C语言)