Linux使用systemctl配置程序自启动服务

 

1. 关于systemctl

Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。

Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。

在Linux生态系统中,Systemd被部署到了大多数的标准Linux发行版中,只有为数不多的几个发行版尚未部署。Systemd通常是所有其它守护进程的父进程,但并非总是如此。

2. 如何使用systemctl

2.1 创建并编写系统服务文件

使用vim在/etc/systemd/system/创建服务文件文件,例如:

sudo vim /etc/systemd/system/appname.service

其中appname应填入你想添加自动启动的服务的名字。

按下i键进入systemctl进入vim的插入模式,appname.server文件内的内容可以参考以下内容编写:

[Unit]

#服务描述,写有意义的内容,便于识别

Description=appname service

[Service]

Type=simple

#下文中appname_path为你启动脚本的运行环境

#设置应用的工作目录(这里填写你启动脚本的实际存储目录)

WorkingDirectory=/appname_path

#启动服务的命令(这里填写你启动脚本的完整路径)

ExecStart=/appname_path/start.sh

ExecStop=/bin/kill -s TERM $MAINPID

[Install]

WantedBy=multi-user.target

按下esc键退出vim的插入模式并输入:wq保存退出当前配置文件。

如果后续配置文件被修改过,需要执行下列命令用于刷新systemctl。

sudo systemctl daemon-reload

2.2 查看系统服务文件是否被识别

输入以下指令查询当前编写服务能否被systemctl识别。

sudo systemctl list-unit-files|grep appname

系统将会返回以下内容:

appname.service disabled

至此,系统服务文件编写完成。

2.3 编写程序启动脚本

使用vim在/appname_path/创建服务启动脚本文件。

sudo vim /appname_path/start.sh

按i进入vim的编辑模式,输入以下脚本头并按顺序输入你启动服务的命令。

#!/bin/bash

按下esc键退出vim的插入模式并输入:wq保存退出当前启动脚本文件。

接下来输入以下命令授予启动脚本可执行权限:

sudo chmod +x /appname_path/start.sh

3.测试系统服务

3.1 启动服务

sudo systemctl start appname 

3.2 停止服务

sudo systemctl stop appname 

3.3 重启服务

sudo systemctl restart appname 

3.4 查看服务状态

sudo systemctl status appname 

3.5 将服务设置为自启动

sudo systemctl enable appname 

3.6 关闭服务自启动

sudo systemctl disable appname 

你可以使用以下命令检查自启动是否成功,enable 即为开启,disable 即为关闭。

sudo systemctl list-unit-files|grep appname

3.7 查看服务的控制台日志

sudo journalctl -flu appname

4.可能碰到的203错误

ExecStart参数指定启动脚本路径不正确,会提示203错误。

解答:修改为正确的启动脚本路径。
启动程序脚本(.sh文件)中未指定脚本解析器,会提示203错误。

解答:在文件开头添加:

#!/bin/bash

启动程序脚本(.sh文件)没有执行权限,会提示203错误。

解答:执行授权命令:

sudo chmod +x /appname_path/start.sh