Linux系统设置systemctl自动启动
# Linux 系统设置 systemctl
# 文件配置
这里以设置 redis 为例,其他的也是一样的
-
打开路径 /etc/systemd/system
1
cd /etc/systemd/system
-
使用 vim 编辑 redis.service,添加如下内容
1
2
3
4
5
6
7
8
9
10
11
12
13[Unit]
Description=Redis
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis-stable/src/redis-server /usr/local/redis-stable/redis.conf
ExecReload=/usr/local/redis-stable/src/redis-server -s reload
ExecStop=/usr/local/redis-stable/src/redis-server -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target -
重新读取 systemctl 文件:
1
systemctl daemon-reload
-
使用指令查看是否配置成功:
1
systemctl status redis
如果正常显示,那么就配置完成了,可以使用 start,stop,enable 等命令进行控制
# 文件内容解读
# Unit
Unit 主要是对该服务的说明,以及配置与其他服务的关系:
- Description:对 Unit 的描述,通常为简短的一句话
- After:指在什么运行之后执行,设置为 network.target 表示网络运行后启动
- Before:与 After 相反
- Documentation:指定服务的文档
- Requires:依赖的其他 Unit 列表,列在其中的 Unit 模块会在这个服务启动的同时被启动,如果其中任意一个启动失败,则该服务也将被终止
- Wants:与 Requires 类似,但只是在启动时调用其他 Unit 模块,不考虑被调用的模块是否启动成功
- Conflicts:冲突模块,如果列出的模块已经运行,则该模块不能运行
- OnFailure:当该模块启动失败时,启动 OnFailure 列出的模块
- PartOf:该参数仅作用于单元的停止或重启。当停止或重启列出的某个 Unit 时,该 Unit 也会被停止。反之,当该 Unit 被停止时,并不影响该参数中的 Unit
# Service
Service 是服务 (Service) 类型的 Unit 文件 (后缀为.service) 特有的,用于定义服务的具体管理和执行操作:
- Type:设置进程的启动类型。必须设置为 simple、exec、forking、oneshot、dbus、notify、idle 之一,默认为 simple 类型,适用于大多数场景。如果服务程序启动后会通过 fork 系统调用创建子进程,然后关闭应用程序本身进程的情况,则应该将 Type 的值设置为 forking,否则 systemd 将不会跟踪子进程的行为,而是认为服务已经退出。
- Environment:为服务添加环境变量
- EnvironmenFile:指定加载一个包含服务所需的环境参数的文件,文件中每一行都是一个环境变量的定义
- ExecStart:指定服务启动的主要命令,每个配置文件中只能使用一次。需要使用绝对路径
- ExecStartPre:指定在启动执行 ExecStart 的命令前的准备工作,可以有多个,所有命令会按照书写顺序依次执行
- ExecStartPost:指定在启动执行 ExecStart 的命令后的收尾工作,也可以有多个
- ExecStop:停止服务所需要执行的主要命令。需要使用绝对路径
- ExecStopPost:指定在 ExecStop 命令执行后的收尾工作,也可以有多个
- ExecReload:重新加载服务文件所需要执行的主要命令。需要使用绝对路径
- Restart:这个值用于指定在什么情况下需要重启服务进程,如下表所示:
退出原因 | no | always | on-success | on-failure | on-abnormal | on-abort | on-watchdog |
---|---|---|---|---|---|---|---|
正常退出 | X | X | |||||
退出码不为 "0" | X | X | |||||
进程被强制杀死 | X | X | X | X | |||
systemd 操作超时 | X | X | X | ||||
看门狗超时 | X | X | X | X |
- RestartSec:如果服务需要被重启,这个参数的值为服务被重启前的等待秒数。该参数仅在上述 Restart 自动重启的情况有效,如果是手动执行
systemctl restart
命令,则该参数无效。 - Nice:服务的进程优先级,值越小优先级越高,默认为 0、-20 为最高优先级、19 为最低优先级
- WorkingDirectory:指定服务的工作目录
- RootDirectory:指定服务进程的根目录,如果配置了该参数,服务将无法访问指定目录以外的任何文件
- User:指定运行服务的用户,会影响服务对本地文件系统的访问权限
- Group:指定运行服务的用户组,会影响服务对本地文件系统的访问权限
- PrivateTmp:是否给服务分配独立的临时空间(true/false)
# Install
Install 是服务的安装信息,它不再 systemd 的运行期间使用,只在使用 systemctl enable
和 systemctl disable
命令启用 / 禁用服务时有用,所有 Unit 文件通用,用来定义如何启动,以及是否开机启动:
- WantedBy:它的值时一个或多个 target,执行 enable 命令时,符号链接会放入
/etc/systemd/system
目录下以 target 名 +.wants 后缀构成的子目录。WantedBy=multi-user.target
表示当系统以多用户方式 (默认的运行级别) 启动时,这个服务需要被自动运行。需要用systemctl enable
激活 - RequireBy:依赖当前服务的模块。它的值时一个或多个 target,执行 enable 命令时,符号链接会放入
/etc/systemd/system
目录下以 target 名 +.required 后缀构成的子目录中 - Alias:当前 Unit 可用于启动的别名
- Also:当前 Unit 被
enable/disable
时,会被同时操作的其他 Unit
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ailzr's Blog!
评论