Linux系统编写Systemd Service实践

Linux系统编写Systemd Service实践

Systemd 服务是一种以 .service 结尾的单元(unit)配置文件,用于控制由Systemd 控制或监视的进程。简单说,用于后台以守护精灵(daemon)的形式运行程序。Systemd 广泛应用于新版本的RHEL、SUSE Linux Enterprise、CentOS、Fedora和openSUSE中,用于替代旧有的服务管理器service。

开始

Systemd 服务的内容主要分为三个部分,控制单元(unit)的定义、服务(service)的定义、以及安装部分。服务的路径位于/etc/systemd/system目录(系统的服务位于/usr/lib/systemd/system),以 .service 结尾的单元(unit)配置文件,这篇文章以创建nginx service为例,这里假设您已经自行编译安装好了nginx,下面我们来创建一个nginx service

#创建一个nginx.service文件
vi /etc/systemd/system/nginx.service

内容如下:

[Unit]
Description=Nginx - high performance web server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

输入命令systemctl daemon-reload来加载刚刚创建的nginx服务,这样我们就可以用Systemd的方式来管理nginx了,命令如下:

#启动nginx
systemctl start nginx
#重载nginx
systemctl reload nginx
#停止nginx
systemctl stop nginx
#重启nginx
systemctl restart nginx
#如果需要开机启动
systemctl enable nginx
#如果需要取消开机启动
systemctl disable nginx

定义控制单元 [Unit]

从上面的例子中我们看到Unit内容如下:

[Unit]
Description=Nginx - high performance web server
After=network.target

定义服务本体 [service]

上面的Service中服务本体内容为:

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop

其实服务本体中还有更多的参数,这里在额外列举一些常用的参数:

安装服务 [install]

上面例子中安装服务内容为:

[Install]
WantedBy=multi-user.target

总结

Systemd Service 是一种替代/etc/init.d/下脚本的更好方式,它可以灵活的控制你什么时候要启动服务,一般情况下也不会造成系统无法启动进入紧急模式。所以如果想设置一些开机启动的东西,可以试着写 Systemd Service。当然了,前提是你使用的Linux发行版是支持它的才行。


Revision #1
Created 14 August 2020 06:05:02 by 吴壮壮
Updated 14 August 2020 06:18:41 by 吴壮壮