Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux系统编写Systemd Service实践

Linux系统编写Systemd Service实践

作者头像
星哥玩云
发布于 2022-08-13 08:31:02
发布于 2022-08-13 08:31:02
1.2K00
代码可运行
举报
文章被收录于专栏:开源部署开源部署
运行总次数:0
代码可运行

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

开始

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#创建一个nginx.service文件
vi /etc/systemd/system/nginx.service

内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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了,命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#启动nginx
systemctl start nginx
#重载nginx
systemctl reload nginx
#停止nginx
systemctl stop nginx
#重启nginx
systemctl restart nginx
#如果需要开机启动
systemctl enable nginx
#如果需要取消开机启动
systemctl disable nginx

定义控制单元 [Unit]

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Unit]
Description=Nginx - high performance web server
After=network.target
  • Description:代表整个单元的描述,可根据需要任意填写。
  • Before/After:指定启动顺序。
  • network.target代表有网路,network-online.target代表一个连通着的网络。

定义服务本体 [service]

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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
  • Type:服务的类型,各种类型的区别如下所示
    • simple:默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切皆休。
    • forking:标准 Unix Daemon 使用的启动方式。启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程。
    • oneshot:适用于那些被一次性执行的任务或者命令,它运行完成后便了无痕迹。因为这类服务运行完就没有任何痕迹,我们经常会需要使用 RemainAfterExit=yes。意思是说,即使没有进程存在,Systemd 也认为该服务启动成功了。同时只有这种类型支持多条命令,命令之间用;分割,如需换行可以用\。
    • dbus:这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName= 一起用。只有它成功获得了 DBus 空间,依赖它的程序才会被启动。
  • ExecStart:在输入的命令是start时候执行的命令,这里的命令启动的程序必须使用绝对路径,比如你必须用/sbin/arp而不能简单的以环境变量直接使用arp。
  • ExecStop:在输入的命令是stop时候执行的命令,要求同上。
  • ExecReload:这个不是必需,如果不写则你的service就不支持restart命令。ExecStart和ExecStop是必须要有的。

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

  • User:指定用户运行
  • Group:指定用户组运行
  • WorkingDirectory:进程工作目录,也就是说在执行前会先切换到这个目录

安装服务 [install]

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Install]
WantedBy=multi-user.target
  • WantedBy:设置服务被谁装载,一般设置为multi-user.target

总结

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

此文部分内容参考了:如何编写一个Systemd Service

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux系统服务神器:systemctl的简单配置与使用
以前使用Ubuntu和CentOS,一般使用SysV init(就是以前使用的service)进行进程的开机自启和进程守护。
Mintimate
2022/04/08
7K1
Linux系统服务神器:systemctl的简单配置与使用
centos7上systemd详解 原
CentOS 7继承了RHEL 7的新的特性,如强大的systemd, 而systemd的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变, 也大幅提高了系统服务的运行效率。但服务的配置和以往也发生了极大的不同,同时变的简单而易用了许多。
拓荒者
2019/04/19
1.1K0
Linux系统管理-crond、chkconfig、systemd、unit、target
语法: crontab [options] Options: -e:=edit 编辑用户的计时器设置 -l:=list 列出用户的计时器设置 -r:=remove 删除用户的计时器设置 -u:=user 指定设定计时器的用户
阿dai学长
2019/04/03
1.1K0
Systemd 进程管理工具实战教程
systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理。所以从CentOS 7开始也由systemd取代了init作为默认的系统进程管理工具。
民工哥
2021/03/15
5430
Systemd 进程管理工具实战教程
自启动文件编写。
vim /lib/systemd/system/nginx.service 文件内容:
@凌晨
2020/05/28
1.2K0
systemd进程管理工具实战教程
systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理。所以从CentOS 7开始也由systemd取代了init作为默认的系统进程管理工具。
子润先生
2021/06/17
7280
Linux系统-systemd
作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2024/11/01
1030
Linux系统-systemd
linux系统管理及安全管理——systemctl/systemd
该脚本使用于启动多个mysql实例的环境,如果想管理单个MySQL进程,只需要将“%i”换成具体的参数就好(mysql单实例管理可参考:http://blog.csdn.net/shen2308/article/details/78492460)。
阿dai学长
2019/04/03
5.6K0
linux如何设置nginx、mysql开机自启动
有很多小伙伴都没有一个统一的设置nginx和mysql开机自启动的方式,今天我就将我的统一开机自启动格式分享给大家
Hunter@Miracle
2022/08/26
8K0
linux添加开机启动脚本 原
0——关机, 1——单用户,就是我们之前修改root账户密码的模式, 2——多用户模式,但比3模式少了一个nfs服务 3——多用户命令行模式,最常用 4——保留级别暂时没用, 5——图形模式, 6——重启
晓歌
2018/09/28
1.7K0
linux添加开机启动脚本
                                                                            原
Nginx封装为CentOS7的服务
编译安装好nginx后,正常启动方式 例如我的安装目录是/usr/local/nginx 修改配置后重新加载生效 /usr/local/nginx/sbin/nginx -s reload 重新打开日志文件 /usr/local/nginx/sbin/nginx -s reopen 测试nginx配置文件是否正确 /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf 启动nginx /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 快速停止nginx /usr/local/nginx/sbin/nginx -s stop 完整有序的停止nginx /usr/local/nginx/sbin/nginx -s quit 注:stop和quit的区别在于 quit是一个优雅的关闭方式,Nginx在退出前完成已经接受的连接请求 Stop 是快速关闭,不管有没有正在处理的请求。
飞狗
2018/09/10
6400
CentOS6/7 配置守护进程
CentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。
Chester Chen
2022/12/19
1K0
Linux Systemd 实战
对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。
为为为什么
2022/08/06
1.7K0
【笔记】Linux安装Nginx相关步骤,备忘
本来尝试了Docker的,但是由于一些原因,不太方便,还是选择原生 的nginx安装
无道
2021/07/19
3170
【Linux】自启动配置
自启动配置是确保系统服务在启动时能够自动运行的关键步骤。在Linux系统中,systemd是一个先进的初始化系统和服务管理器,它通过配置单元文件(unit files)来定义服务的启动行为,包括依赖关系和启动顺序。以下是关于自启动配置的一些关键概念和步骤:
人不走空
2024/02/21
4220
systemd设置nginx开机自启动
服务器每次重启,都需要手动启动一些服务,这不是一个程序员可以忍受的,难怪大家都喜欢写脚本。CentOS7之后已不再使用chkconfig管理启动项,而是使用systemd。
胡齐
2020/08/11
7.1K1
systemd 使用教程【转】
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
保持热爱奔赴山海
2019/09/18
1.1K0
systemd 使用教程【转】
编写一个服务systemd的启动方式
工作中遇到了一个问题,开发人员编写了一个程序,想要开机自启动,一开始还想偷点懒直接把启动命令直接写到rc.local,后来发现毛病太多,索性直接编写一个systemd文件来控制启动
dgds
2023/08/02
5230
Centos8上安装Nginx
  命令: wget http://nginx.org/download/nginx-1.20.2.tar.gz
Se7eN_HOU
2021/11/24
8490
Centos8上安装Nginx
centos7如何添加开机启动项?
1.系统服务管理命令,如果是通过yum安装的软件,开机启动脚本,已经自动创建好了,直接执行如下命令
超蛋lhy
2019/06/05
2.5K0
相关推荐
Linux系统服务神器:systemctl的简单配置与使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验