Linux系统编写Systemd Service实践

发布时间 - 2025-07-18 00:00:00    点击率:

systemd 服务是一种以 .service 结尾的单元文件,用于管理由systemd 监控或控制的进程。简而言之,它用于后台以守护进程(daemon)的形式运行程序。systemd 广泛应用于新版本的rhel、suse linux enterprise、centos、fedora和opensuse中,作为旧有的服务管理器service的替代品。

Systemd 服务的配置文件主要分为三个部分:控制单元(unit)的定义、服务(service)的定义以及安装部分。服务文件通常存放在/etc/systemd/system目录下(系统自带的服务文件位于/usr/lib/systemd/system),以 .service 结尾。本文将以创建nginx服务为例进行说明,假设您已经自行编译安装了nginx,接下来我们将创建一个nginx服务。

首先,创建一个名为nginx.service的文件,路径为/etc/systemd/system/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

创建服务文件后,使用以下命令重新加载Systemd以识别新服务:

# 重新加载Systemd以识别新服务
systemctl daemon-reload

然后,您可以使用以下命令来管理nginx服务:

# 启动nginx
systemctl start nginx

重载nginx

systemctl reload nginx

停止nginx

systemctl stop nginx

重启nginx

systemctl restart nginx

启用nginx开机自启动

systemctl enable nginx

禁用nginx开机自启动

systemctl disable nginx

接下来,我们详细解释一下nginx.service文件中的各个部分。

控制单元 [Unit]

[Unit]
Description=Nginx - high performance web server
After=network.target
  • Description:描述整个单元,可以根据需要任意填写。
  • Before/After:指定启动顺序。network.target表示有网络可用,network-online.target表示已连接的网络。

服务本体 [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
  • Type:服务的类型,常见类型如下:

    • simple:默认类型,最简单的服务类型。主程序启动后,程序退出则服务结束。
    • forking:标准Unix Daemon的启动方式。启动程序后会调用fork()函数,设置好必要的通信频道后,父进程退出,留下守护进程的子进程。
    • oneshot:适用于一次性执行的任务或命令,运行完成后便无痕迹。通常需要设置RemainAfterExit=yes,表示即使没有进程存在,Systemd也认为服务启动成功。支持多条命令,用;分隔,换行用\
    • dbus:程序启动时需要获取一块DBus空间,必须与BusName=一起使用,只有成功获得DBus空间后,依赖它的程序才会被启动。
  • ExecStart:在输入命令为start时执行的命令,必须使用绝对路径,例如/sbin/arp而不是简单的arp

  • ExecStop:在输入命令为stop时执行的命令,同样要求使用绝对路径。

  • ExecReload:非必需,如果不设置则服务不支持restart命令。ExecStartExecStop是必需的。

此外,服务本体中还有其他常用参数:

  • User:指定运行服务的用户。
  • Group:指定运行服务的用户组。
  • WorkingDirectory:指定进程的工作目录,在执行前会切换到这个目录。

安装服务 [Install]

[Install]
WantedBy=multi-user.target
  • WantedBy:设置服务被哪个目标装载,通常设置为multi-user.target

总结来说,Systemd Service 是一种比/etc/init.d/下的脚本更好的服务管理方式,它可以灵活控制服务的启动时间,并且通常不会导致系统无法启动进入紧急模式。如果您想设置一些开机启动的服务,可以尝试编写Systemd Service。当然,前提是您使用的Linux发行版支持Systemd。


# nginx  # linux  # centos  # ai  # unix  # 创建一个  # 是一种  # 加载  # 放在  # 才会  # 主程序  # 适用于  # 您可以  # 服务管理  # 它可以 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 网站制作报价单模板图片,小松挖机官方网站报价?  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  如何在阿里云虚拟主机上快速搭建个人网站?  Linux系统命令中tree命令详解  如何快速查询网站的真实建站时间?  如何解决hover在ie6中的兼容性问题  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  详解jQuery停止动画——stop()方法的使用  如何快速登录WAP自助建站平台?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  如何快速搭建FTP站点实现文件共享?  利用vue写todolist单页应用  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何快速生成凡客建站的专业级图册?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  如何在服务器上三步完成建站并提升流量?  python中快速进行多个字符替换的方法小结  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  如何在云虚拟主机上快速搭建个人网站?  油猴 教程,油猴搜脚本为什么会网页无法显示?  如何正确选择百度移动适配建站域名?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何在Ubuntu系统下快速搭建WordPress个人网站?  利用python获取某年中每个月的第一天和最后一天  微信小程序 input输入框控件详解及实例(多种示例)  Laravel如何处理CORS跨域请求?(配置示例)  历史网站制作软件,华为如何找回被删除的网站?  如何在服务器上配置二级域名建站?  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Python3.6正式版新特性预览  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  如何快速选择适合个人网站的云服务器配置?  详解MySQL数据库的安装与密码配置  使用C语言编写圣诞表白程序  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  如何用VPS主机快速搭建个人网站?  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel如何实现一对一模型关联?(Eloquent示例)  详解jQuery中基本的动画方法  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  高防服务器租用如何选择配置与防御等级?