使用systemd在Boot上启动Linux服务

什么是systemd?

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

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

创建自定义systemd服务

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

test_service.sh

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并使其可执行:

sudo cp test_service.sh /usr/bin/test_service.sh
sudo chmod +x /usr/bin/test_service.sh

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

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文档

启动并启用服务

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

sudo systemctl start myservice

检查服务的状态:

sudo systemctl status myservice

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

● 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命令停止或重新启动该服务:

sudo systemctl stop myservice
sudo systemctl restart myservice

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

sudo systemctl enable myservice
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /lib/systemd/system/myservice.service.

检查服务的状态:

sudo systemctl status myservice

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

● 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》

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏好好学java的技术栈

java工程师必备linux常用命令,这篇文章就够了

bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)...

34710
来自专栏王磊的博客

Spring Boot(十一)Redis集成从Docker安装到分布式Session共享

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,Redis也是技术领域...

9120
来自专栏草根专栏

使用Angular CLI进行Build (构建) 和 Serve

Build. Build主要会做以下动作: 编译项目文件并输出到某个目录 Build targets决定了输出的结果 bundling 打包 生产环境的buil...

42970
来自专栏重庆的技术分享区

如何在Ubuntu 16.04上安装和配置Redis集群

Redis集群已经发展成为缓存,队列等的流行工具,因为它具有可扩展性和速度的潜力。本指南旨在使用三个Linode创建一个集群来演示分片。然后,如果发生故障,您将...

15060
来自专栏Java帮帮-微信公众号-技术文章全总结

day02.自动化部署高级命令文本【大数据教程】

day02.自动化部署高级命令文本 一、Iptables教程 1. iptables防火墙简介 Iptables也叫netfilter是Linux下自带的一款免...

47360
来自专栏windealli

常用压测工具

webbench 是常用的网站压力测试工具,webbench用C语言编写,代码仅有区区几百行。

1K50
来自专栏潇涧技术专栏

One Trip of building a Crawler

最近需要从网上抓取大量的数据,于是体验了一下爬虫程序的开发和部署,主要是学会了一些实用工具的操作。

15620
来自专栏张善友的专栏

服务器未能识别 HTTP 标头 SOAPAction 的值

SOAPAction HTTP request header被用来标识SOAP HTTP请求的目的地,其值是个URI地址。SOAP发送并不限制格式、URI特征或...

33260
来自专栏腾讯云Elasticsearch Service

logstash input插件开发

logstash作为一个数据管道中间件,支持对各种类型数据的采集与转换,并将数据发送到各种类型的存储库,比如实现消费kafka数据并且写入到Elasticsea...

80040
来自专栏主机笔记

ubuntu16.04安装mongodb教程

因为最近需要用到mongodb,就在腾讯云的主机上搭建了一个mongodb服务,使用主机为ubuntu 16.04(腾讯云主机的用户名为ubuntu…),这里记...

48490

扫码关注云+社区

领取腾讯云代金券