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

 更新时间:2025年08月30日 15:10:00   作者:「已注销」  
本文介绍如何在Linux中创建自定义服务,通过编写systemd服务文件,配置[Unit]、[Service]和[Install]部分,使用绝对路径定义启动/停止命令,并设置开机自启

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 服务名

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Linux环境下完整搭建GitLab私有代码仓库的详细流程

    Linux环境下完整搭建GitLab私有代码仓库的详细流程

    在现代软件开发中,代码版本控制是团队协作的基石,GitLab 作为一款功能强大、开源免费的 DevOps 平台,无疑是私有代码仓库的最佳选择之一,本文将带你从零开始,在 Linux 环境下完整搭建 GitLab 私有代码仓库,需要的朋友可以参考下
    2026-04-04
  • 解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题

    解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题

    这篇文章主要介绍了解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够的问题,需要的朋友可以参考下
    2019-09-09
  • 基于Linux中vnc配置端口号的修改方法

    基于Linux中vnc配置端口号的修改方法

    今天小编就为大家分享一篇基于Linux中vnc配置端口号的修改方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • centos6编译及安装ZLMediaKit解析

    centos6编译及安装ZLMediaKit解析

    这篇文章主要介绍了centos6编译及安装ZLMediaKit,需要的朋友可以参考下
    2019-11-11
  • 在Ubunt16.04上安装LAMP的方法

    在Ubunt16.04上安装LAMP的方法

    这篇文章主要介绍了在Ubunt16.04上安装LAMP的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 在Ubuntu中格式化U盘的几种常用方法

    在Ubuntu中格式化U盘的几种常用方法

    本文介绍了在Ubuntu系统中格式化U盘的两种方法:使用图形界面和使用终端命令,通过这些方法,可以解决U盘格式化被写入保护的问题,文章有详细的代码示例供大家参考,需要的朋友可以参考下
    2025-10-10
  • linux下查找文件及完整文件路径实现方式

    linux下查找文件及完整文件路径实现方式

    文章介绍了Linux中查找指令文件、文件名及文件内容的方法,通过which/type定位指令路径,whereis/locate快速搜索文件名,find进行深度磁盘查找,grep按内容递归搜索,强调不同命令的适用场景与效率差异
    2025-09-09
  • Linux systemctl命令用法及使用说明

    Linux systemctl命令用法及使用说明

    systemctl是Linux中用于管理系统服务的工具,提供了启动、停止、重启和查看服务状态等功能,通过systemctl命令,用户可以方便地管理各种服务
    2026-03-03
  • 详解CentOs设置静态IP的方法

    详解CentOs设置静态IP的方法

    这篇文章主要介绍了详解CentOs设置静态IP的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Linux系统下部署项目的设置方法

    Linux系统下部署项目的设置方法

    这篇文章主要介绍了Linux系统下部署项目的教程详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10

最新评论