Linux添加自定义服务(service文件)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Linux添加自定义服务(service文件)

Linux系统中也有“服务”这一说法,通过服务我们可以便捷地管理一些程序功能,也可以作为程序开机自启的一个手段之一。今天我来分享一下如何创建自己简易的Linux服务。

1,新建服务文件

每一个服务在Linux有它自己的对应的配置文件,这个文件可以通过文本编辑器编辑,扩展名为xxx.servive(xxx为服务名称)。这些文件位于/usr/lib/systemd/system目录下。

在这个目录下新建service文件即可创建我们的服务。文件的内容结构如下:

[Unit]
Description=服务描述
After=服务依赖(再这些服务后启动本服务)
[Service]
Type=服务类型
ExecStart=启动命令
ExecStop=终止命令
ExecReload=重启命令
[Install]
WantedBy=服务安装设置

可见服务配置文件分为[Unit][Service][Install]三大部分。

一般来说有些值是固定的,没有特殊需要我们直接套用即可。例如[Unit]After的值一般是:network.target remote-fs.target nss-lookup.target

[Install]WantedBy一般是multi-user.target

[Service]中是主要内容。

Type的值有以下几个:

  • simple:这是默认的值,指定了ExecStart设置后,simple就是默认的Type设置除非指定Type。simple使用ExecStart创建的进程作为服务的主进程,在此设置下systemd会立即启动服务。
  • forking:如果使用了这个值,则ExecStart的脚本启动后会调用fork()函数创建一个进程作为其启动的一部分。当初始化完成,父进程会退出。子进程会继续作为主进程执行。
  • oneshot:类似simple,但是在systemd启动之前,进程就会退出。这是一次性的行为。可能还需要设置RemainAfterExit=yes,以便systemd认为j进程退出后仍然处于激活状态。
  • dbus:也和simple很相似,该配置期待或设置一个name值,通过设置BusName=设置name即可。
  • notify:同样地,与simple相似的配置。顾名思义,该设置会在守护进程启动的时候发送推送消息。

其实常用的就是simpleforking了。一般来说我们的程序是应用程序前台使用就用simple,后台/守护进程一般是forking

然后就是启动/停止/重启命令,注意这个命令里面调用的程序必须全部使用绝对路径。

例如,我的服务器上的redis的Service配置:

[Unit]
Description=Redis-Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/opt/Redis-6.2.1/redis-server /root/RedisData/redis-conf.conf
ExecStop=kill -9 $(pidof redis-server)
ExecReload=kill -9 $(pidof redis-server) && /opt/Redis-6.2.1/redis-server /root/RedisData/redis-conf.conf
[Install]
WantedBy=multi-user.target

因为redis一般作为后台程序运行所以Type填forking。kill -9 $(pidof redis-server)命令的意思是:先用pidof命令获取指定名称进程的pid再把这个结果传给kill命令终止对应进程。平时终止特定名称的进程时也可以这么写。

其实除此之外,service文件还有很多配置项,这里只写出了常用必要的,满足日常需求,其余可以自行搜索学习,这里不再过多赘述。

2,启动/停止/重启我们的服务

刚刚建立好了我们的服务配置,现在就可以使用了!在此之前需要先使用下列命令让系统重新读取所有服务文件:

systemctl daemon-reload

然后通过以下命令操控服务:

# 启动服务service 服务名 start# 终止服务service 服务名 stop# 重启服务service 服务名 restart

那么注意服务名就是我们刚刚创建的服务配置文件service文件的文件名(不包括扩展名),例如我的服务文件是redis-server.service,那么我的服务名是redis-server

其实我们执行启动服务命令时,就会执行我们刚刚配置文件中ExecStart的值的命令,同样终止、重启会对应执行配置文件中ExecStopExecReload的值的命令。

3,启用/禁用开机自启

通过以下命令启用/禁用开机自启动:

# 启用开机自启systemctl enable 服务名
# 禁用开机自启systemctl disable 服务名


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6天前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
25 5
linux系统服务二!
|
6天前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
25 3
linux系统服务!!!
|
6天前
|
网络协议 Linux
linux系统重要文件目录
本文介绍了Linux系统中的重要目录及其历史背景,包括根目录、/usr、/etc、/var/log和/proc等目录的结构和功能。其中,/etc目录下包含了许多关键配置文件,如网卡配置、DNS解析、主机名设置等。文章还详细解释了各目录和文件的作用,帮助读者更好地理解和管理Linux系统。
24 2
|
5天前
|
缓存 监控 Linux
|
9天前
|
Linux Shell 数据库
文件查找是Linux用户日常工作的重要技能介绍了几种不常见的文件查找方法
文件查找是Linux用户日常工作的重要技能。本文介绍了几种不常见的文件查找方法,包括使用`find`和`column`组合、`locate`和`mlocate`快速查找、编写Shell脚本、使用现代工具`fd`、结合`grep`搜索文件内容,以及图形界面工具如`Gnome Search Tool`和`Albert`。这些方法能显著提升文件查找的效率和准确性。
29 2
|
11天前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
61 3
|
11天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
58 3
|
12天前
|
Linux 数据库
linux 全局搜索文件
在 Linux 系统中,全局搜索文件常用 `find`、`locate` 和 `grep` 命令。`find` 根据文件名、类型、大小、时间戳等条件搜索;`locate` 通过预构建的数据库快速查找文件;`grep` 在文件中搜索特定文本,常与 `find` 结合使用。选择合适的命令取决于具体需求。
|
Oracle 关系型数据库 MySQL
|
17天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
59 4