前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用systemd在Boot上启动Linux服务

使用systemd在Boot上启动Linux服务

原创
作者头像
陈树丶
发布2018-08-15 10:48:03
1.9K0
发布2018-08-15 10:48:03
举报

什么是systemd?

systemd是最初由Red Hat Linux团队开发的Linux系统工具。它包括许多功能,包括用于启动和管理系统进程的引导系统。它目前是大多数Linux发行版的默认初始化系统。许多常用的软件工具(如SSH和Apache)都附带了systemd服务。

创建一个自定义systemd服务很简单,该服务将运行您选择的任何脚本或进程。虽然在服务器上引导时有多种方法可以运行脚本或启动进程,但自定义systemd服务可以轻松启动,停止或重新启动脚本,并将其配置为在引导时自动启动。systemd提供了使用标准化接口的优势,该接口在支持它的所有Linux发行版中都是一致的。

创建自定义systemd服务

创建服务将管理的脚本或可执行文件。本教程使用简单的Bash脚本作为示例:

test_service.sh

代码语言:txt
复制
1    DATE=`date '+%Y-%m-%d %H:%M:%S'`
2    echo "Example service started at ${DATE}" | systemd-cat -p info
3 
4    while : 
5    do
6    echo "Looping..."; 
7    sleep 30;
8    done

此脚本将记录初始化的时间,然后无限循环以保持服务运行。

将脚本复制到/usr/bin并使其可执行:

代码语言:txt
复制
sudo cp test_service.sh /usr/bin/test_service.sh
sudo chmod +x /usr/bin/test_service.sh

创建一个Unit文件来定义systemd服务:

代码语言:txt
复制
1   [Unit] 
2   Description=Example systemd service. 
3 
4   [Service] 
5   Type=simple
6   ExecStart=/bin/bash /usr/bin/test_service.sh 
7 
8   [Install]
9   WantedBy=multi-user.target

这定义了一个简单的服务。关键部分是ExecStart指令,它指定将运行以启动服务的命令。

有关单元文件及其可用配置选项的更多信息,请参阅systemd文档

启动并启用服务

获得单元文件后,即可测试该服务:

代码语言:txt
复制
sudo systemctl start myservice

检查服务的状态:

代码语言:txt
复制
sudo systemctl status myservice

如果服务正确运行,则输出应类似于以下内容:

代码语言:txt
复制
● myservice.service - Example systemd service.
Loaded: loaded (/lib/systemd/system/myservice.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-05-01 18:17:14 UTC; 4s ago
Main PID: 16266 (bash)
Tasks: 2
Memory: 748.0K
CPU: 4ms
CGroup: /system.slice/myservice.service
├─16266 /bin/bash /usr/bin/test_service.sh
└─16270 sleep 30

May 01 18:17:14 localhost systemd[1]: Started Example systemd service..
May 01 18:17:14 localhost cat[16269]: Example service started at 2018-05-01 18:17:14
May 01 18:17:14 localhost bash[16266]: Looping...

可以使用标准systemd命令停止或重新启动该服务:

代码语言:txt
复制
sudo systemctl stop myservice
sudo systemctl restart myservice

最后,使用enable命令确保在系统引导时服务启动:

代码语言:txt
复制
sudo systemctl enable myservice
代码语言:txt
复制
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /lib/systemd/system/myservice.service.

检查服务的状态:

代码语言:txt
复制
sudo systemctl status myservice

您应该看到服务在启动后立即记录其启动时间:

代码语言:txt
复制
● myservice.service - Example systemd service.
Loaded: loaded (/usr/lib/systemd/system/myservice.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2018-05-02 15:03:07 UTC; 48s ago
Main PID: 2973 (bash)
CGroup: /system.slice/myservice.service
├─2973 /bin/bash /usr/bin/test_service.sh
└─3371 sleep 30

May 02 15:03:07 localhost systemd[1]: Started Example systemd service..
May 02 15:03:07 localhost systemd[1]: Starting Example systemd service....
May 02 15:03:07 localhost bash[2973]: Looping...
May 02 15:03:37 localhost bash[2973]: Looping...

更多信息

有关此主题的其他信息,您可能需要参考以下资源。

更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《Use systemd to Start a Linux Service at Boot》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是systemd?
  • 创建自定义systemd服务
  • 启动并启用服务
  • 更多信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档