目录

编写systemctl自启动服务

目录
警告
本文最后更新于 2022-07-01,文中内容可能已过时。

摘要

每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。

Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。

systemctl enable命令用于在上面两个目录之间,建立符号链接关系。

1
2
3
systemctl enable clamd@scan.service
# 等同于
ln -s '/usr/lib/systemd/system/clamd@scan.service' '/etc/systemd/system/multi-user.target.wants/clamd@scan.service'

如果配置文件里面设置了开机启动,systemctl enable命令相当于激活开机启动。

与之对应的,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。

1
systemctl disable clamd@scan.service

配置文件的后缀名,就是该 Unit 的种类,比如sshd.socket。如果省略,Systemd 默认后缀名为.service,所以sshd会被理解成sshd.service

有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system目录下.

每一个服务以.service结尾,一般会分为3部分:[Unit][Service][Install]

  • [Unit]部分主要是对这个服务的说明,内容包括Description和After,Description 用于描述服务,After用于描述服务类别
  • [Service]部分是服务的关键,是服务的一些具体运行参数的设置。 Type=forking是后台运行的形式 User=users是设置服务运行的用户 Group=users是设置服务运行的用户组 PIDFile为存放PID的文件路径 ExecStart为服务的具体运行命令 ExecReload为重启命令 ExecStop为停止命令 PrivateTmp=True表示给服务分配独立的临时空间 注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!
  • [Install]部分是服务安装的相关设置,可设置为多用户的

limits.conf这里的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。systemd默认非root用户的最大进程数为4096。

在[Service]部分添加以下参数

1
2
LimitNOFILE=100000
LimitNPROC=100000

例:elastic脚本

1
vi /usr/lib/systemd/system/elastic.service
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[Unit]
Description=elasticsearch server
[Service]
Type=simple
User=elastic
Group=elastic
LimitNOFILE=100000
LimitNPROC=100000
ExecStart=/usr/local/elasticsearch-6.5.3/bin/elasticsearch
[Install]
WantedBy=multi-user.target

保存后执行

1
systemctl daemon-reload