Linux创建service服务
标签搜索
侧边栏壁纸
  • 累计撰写 4 篇文章
  • 累计收到 18 条评论

Linux创建service服务

admin
2021-12-16 / 3 评论 / 13,501 阅读 / 正在检测是否收录...
指令 作用
systemctl start 服务名开启服务
systemctl stop 服务名关闭服务
systemctl status 服务名显示状态
systemctl restart 服务名重启服务
systemctl enable 服务名开机启动服务
systemctl disable 服务名禁止开机启动
systemctl list-dependencies 服务名查看系统中服务的依赖关系
systemctl mask 服务名冻结服务
systemctl unmask 服务名解冻服务
systemctl list-units查看系统中所有正在运行的服务
systemctl list-unit-files查看系统中所有服务的开机启动状态
systemctl set-default multi-user.target开机时不启动图形界面
systemctl set-default graphical.target开机时启动图形界面
systemctl daemon-reload重新加载服务配置文件
journalctl -fu 服务名查看即时 log,当程式有 bug 挂掉的时候,输入这个指令就会看到报错

例子:

[Unit]
Description=Admin Web服务

[Service]
WorkingDirectory=/www/wwwroot/admin
ExecStart=/usr/bin/dotnet5 /www/wwwroot/admin/Admin.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=AdminNet-Log
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://0.0.0.0:10001
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

这个脚本分为3个部分: UnitServiceInstall

Unit部分

Unit表明该服务的描述,类型描述。我们称之为一个单元。

Description - 关于这个 service 的说明

比较典型的情况是单元A要求在单元B启动之后再启动。这种设置是通过Unit下面的Requires、After、Before、Wants来调整的。比如上述场景的编写可以这样(在A中编写):

Requires=B
After=B

这段设置表明了A的启动依赖于B,同时有要求在B启动之后启动自己。设置十分简介。需要注意的是,依赖关系通常用在服务(Service)而不是目标(Target)上

Service部分

Service是脚本的关键部分,这一部分用于设置一些关键参数:

WorkingDirectory=/www/wwwroot/admin
ExecStart=/usr/bin/dotnet5 /www/wwwroot/admin/Admin.dll
Restart=always
RestartSec=10
StartLimitInterval=0
KillSignal=SIGINT
SyslogIdentifier=dotnet-admin-api
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://0.0.0.0:80;https://0.0.0.0:443
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
WorkingDirectory

程序运行文件夹,如果设定使用了workingdirectory,但是在systemctl start之前没有创建该目录,将会无法正常启动。一般我会把它指向 /www/wwwroot/admin 工作目录)

ExecStart

当服务启动的时候(systemctl start youservice.service),会执行这个选项的值,这个值一般是“ExecStart=指令 参数”的形式。当Type=oneshot的时候,只有一个指令可以并且必须给出。原因是oneshot只会被执行一次。

ExecStartPre、ExecStartPost

顾名思义,这两个设置的意义在于ExecStart被执行之前和之后被执行。

ExecReload

服务重启时执行。

ExecStop

服务停止时执行。

StartLimitInterval

重启重试次数,默认是10秒内如果重启超过5次则不再重启,设置为0表示不限次数重启

RestartSec

服务重启间隔的秒数。

ExecStopPost

服务停止后执行。

Restart

重启条件。这边我们设定一直尝试重启,若要设定不重启,可以设为no。

KillSignal

设定收到什么信号时结束这个进程,SIGINT 是中断信息,也就是 ctrl + c。

SyslogIdentifier

这个 service 在系统 log 中的识别名称。

User

指定以哪个Linux用户执行这个service。

Environment

环境变量。这里我们设定了三个环境变量参数:
(1) 在 Production 模式下执行程序。
(2) 指定监听 80 端口的 http 连接 和 443 端口的 https 连接。
(3) 我现在都还 google 不到一个觉得合理的解释,就暂时跟着 官网 留着它

Type

Service的启动方式,在Service服务中,启动方式使用Type指定,这个配置给当前的服务单元用于设置进程的启动类型。
有如下几种可选项: simple、forking、oneshot、dbus、notify、idel

  • simple ,这是默认的Type,当Type和BusName配置都没有设置,指定了ExecStart设置后,simple就是默认的Type设置。simple使用ExecStart创建的进程作为服务的主进程。在此设置下systemd会立即启动服务,如果该服务要启动其他服务(simple不会forking),它们的通讯渠道应当在守护进程启动之前被安装好(e.g. sockets,通过sockets激活)。
  • forking ,如果使用了这个Type,则ExecStart的脚本启动后会调用fork()函数创建一个进程作为其启动的一部分。当一切初始化完毕后,父进程会退出。子进程会继续作为主进程执行。这是传统UNIX主进程的行为。如果这个设置被指定,建议同时设置PIDFile选项来指定pid文件的路径,以便systemd能够识别主进程。
  • oneshot ,onesh的行为十分类似simple,但是,在systemd启动之前,进程就会退出。这是一次性的行为。可能还需要设置RemainAfterExit=yes,以便systemd认为j进程退出后仍然处于激活状态。
  • dbus ,这个设置也和simple很相似,该配置期待或设置一个name值,通过设置BusName=设置name即可。
  • notify ,同样地,与simple相似的配置。顾名思义,该设置会在守护进程启动的时候发送推送消息(通过sd_notify(3))给systemd。
RemainAfterExit: 默认值no

默认值为no,这个设置采用booleean值,可以是0、no、off、1、yes、on等值。它表明服务是否应当被视为激活的,即便当它所有的进程都退出了。简言之,这个设置用于告诉systemd服务是否应当是被视为激活状态,而不管进程是否退出。当为true时,即便服务退出,systemd依然将这个服务视为激活状态,反之则服务停止。

GuessMainPID

采用boolean值指定systemd在无法确切的查明服务的时候是否需要猜测服务的main pid。除非Type=forking被采用并且PIDFile没有被设置,否则这个选项会被忽略。因为当设置为Type的其他选项,或者显示的指定了PID文件后,systemd总是能够知道main pid。

PIDFile

采用一个绝对路径的文件名指定守护进程的PID文件。当Type=forking被设置的时候,建议采取这个设置。当服务启动后,systemd会读取守护进程的主进程id。systemd不会对该文件写入数据。

BusName

使用一个D-Bus的总线名称,作为该服务的可访问名称。当Type=dbus的时候,该设置被强制使用。

BusPolicy

如果该选项被指定,一个自定义的kdbus终结点将会被创建,并且会被指定为默认的dbus节点安装到服务上。这样的自定义终结点自身持有一个策略规则集合。这些规则将会在总线范围内被强制指定。该选项只有在kdbus被激活时有效。

Install部分

这个段中的配置与 Unit 有几分相似,但是这部分配置需要通过 systemctl enable 命令来激活,并且可以通过 systemctl disable 命令禁用。另外这部分配置的目标模块通常是特定启动级别的 .target 文件,用来使得服务在系统启动时自动运行。

WantedBy

指定这个 service 在哪个 RunLevel 被启动。这个水有点深,笔者到现在仍是不太了解,一样跟着 官网 范例。有兴趣的可以参考这篇文章

0

评论 (3)

取消
  1. 头像
    lahatzdvyh
    Windows 10 · Google Chrome

    《侦探米娜》海外剧高清在线免费观看:https://www.jgz518.com/xingkong/23846.html

    回复
  2. 头像
    kvyzwdohmz
    Windows 10 · Google Chrome

    真好呢

    回复
  3. 头像
    dkljitrqbt
    Windows 10 · Google Chrome

    你的文章内容非常精彩,让人回味无穷。 http://www.55baobei.com/6rUGRgWgMV.html

    回复