极速开始你的第一个Systemd守护文件!

引言

systemd是Linux电脑操作系统之下的一套中央化系统及设置管理程序(init),包括有守护进程、程序库以及应用软件,由Lennart Poettering带头开发。其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。(From Wikipedia)

简单地讲,使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。

快速开始

首先说明,本文是极速开始,想要了解详细信息请自行Google

创建守护进程文件

比如你写了一个Linux Shell脚本,绝对路径为

1
/home/script/my.sh

你想要守护它的运行

创建守护进程文件

1
vim my.service

守护进程文件必须要是.service后缀的

输入

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=This is my first systemd config file

[Service]
Type=simple
ExecStart=/bin/bash /home/script/my.sh
ExecStop=/bin/kill $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target

这样一来就好了

来简单解释一下配置的意义

Description项是一个简要说明

Type项表明服务的类型,简单就是直接执行ExecStart的命令

ExexStart是守护进程开始时执行的命令

ExecStop是守护进程结束时执行的命令,其中变量$MAINPID代表着守护进程的进程号

Restart设置为“总是”,以保证该进程不会被杀死

WantedBy设置multi-user.target保证了systemctl enable my能成功的把服务加入开机自启动

注意,Exec命令中必须是绝对路径

注册到系统执行命令

先将守护进程配置文件拷贝到/usr/lib/systemd/system/

1
cp my.service /usr/lib/systemd/system/

前往目录

1
cd /usr/lib/systemd/system/

设置开机自启动

1
systemctl enable my

使用

启动服务(可省略.service后缀)

1
systemctl start my

停止服务

1
systemctl stop my

重启服务

1
systemctl restart my

查看服务情况

1
systemctl status my

完成

这样一来,my.sh就被系统所守护,重启之后也不会失效。

设置完成后,可以修改my.sh以实现各种功能。