Linux下添加自己的服务脚本(service)

本文介绍了如何在Linux下创建systemd服务脚本,包括文件路径、文件内容的组成结构,如[Unit]、[Service]和[Install]部分的详细说明,并提供了一个示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

systemd服务文件(service file)是用来定义和配置systemd服务的文件,通常以.service为后缀。以下是service文件的详细格式和内容说明:

1 文件路径

  • /etc/systemd/system(供系统管理员和用户使用)系统服务,开机不需要登录就能运行的程序
  • /usr/lib/systemd/system(供发行版打包者使用)用户服务,需要登录后才能运行的程序

2 文件内容

2.1 组成结构

2.1.1 [Unit] 控制单元

Description:代表整个单元的描述,可根据需要任意填写。
Documentation:指示文档位置
Wants:本单元启动了,它“想要”的单元也会被启动,但如果这个单元启动不成功,对本单元没有影响。
Requires: 这个单元启动了,那么它“需要”的单元也会被启动; 它“需要”的单元被停止了,它自己也活不了。
OnFailure:若本单元启动失败了,那么启动这个单元作为折衷。
Before:表示需要在某些服务启动之前启动,After和Before字段只涉及启动顺序,不涉及依赖关系。
After:描述服务类别,表示本服务需要在network服务启动后在启动

2.1.2 [Service] 服务

Type:服务的类型,各种类型的区别如下所示

  • simple:默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切皆休。
  • forking:标准 Unix Daemon 使用的启动方式。表示后台运行模式。
  • oneshot:适用于那些被一次性执行的任务或者命令,它运行完成后便了无痕迹。因为这类服务运行完就没有任何痕迹,我们经常会需要使用 RemainAfterExit=yes。意思是说,即使没有进程存在,Systemd 也认为该服务启动成功了。同时只有这种类型支持多条命令,命令之间用;分割,如需换行可以用\。
  • dbus:这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName= 一起用。只有它成功获得了 DBus 空间,依赖它的程序才会被启动。
  • notify: 类似于simple, 启动结束后会发出通知信号,然后systemd再启动其他服务
  • idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。

ExecStart:在输入的命令是start时候执行的命令,这里的命令启动的程序必须使用绝对路径,比如你必须用/sbin/arp而不能简单的以环境变量直接使用arp。
ExecStop:在输入的命令是stop时候执行的命令,要求同上。
ExecReload:这个不是必需,如果不写则你的service就不支持restart命令。ExecStart和ExecStop是必须要有的。
EnvironmentFile:指定配置文件,和连词号组合使用,可以避免配置文件不存在的异常。后面接多个不同的shell变量。 例如:Environment=DATA_DIR=/data/elk
PrivateTmp=true # 表示给服务分配独立的临时空间
KillMode=control-group # 定义systemd如何停止服务
PIDFile=/usr/local/test/test.pid # 存放PID的绝对路径

2.1.3 [Install] 安装

意义:服务编写完之后还需要被systemd装载

WantedBy:设置服务被谁装载,一般设置为multi-user.target

  • multi-user.target: # 表示多用户命令行状态,这个设置很重要
  • graphical.target: # 表示图形用户状体,它依赖于multi-user.target

Alias:为service设置一个别名,可以使用多个名字来操作服务。
Also:在安装这个服务时候还需要的其他服务

3 示例

文件名:test.service

[Unit]
Description=my test Service
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=root
Group=root
WorkingDirectory=/home/test/path
ExecStart=/etc/init.d/test start
ExecStop=/etc/init.d/test  stop
ExecReload=/etc/init.d/test  restart

[Install]
WantedBy=multi-user.target
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flying_fish79

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值