linux使用systemd来管理程序

前言

  • 在linux服务器中,如果想要执行某个程序,那么直接运行它即可
  • 如果想要让它稍微智能点,例如它因为某个原因出异常而程序奔溃了,需要自动重启,可能会想到利用定时任务crontab写个脚本定时检测
    脚本中判断如果进程关闭了就让他自己启动, 擅于利用crontab其实不错, 这样哪怕服务器重启了仍然能通过定时任务而启动程序
    但其实还有一些需求, 例如某种情况下, 服务器重启了, 等服务器网络确认连接了, 才自动启动程序(比如这个程序必须在网络下才有意义)
  • 编写复杂的脚本可以完成以上需求,其实可以使用linux中提供了systemd这个来管理程序,更符合linux这种服务式部署的思想

1. 简介

systemd是linux系统下的专门负责维护系统维护和管理的一个后台服务,大多数linux发型版支持systemd
它还可以配置服务之间的启动顺序, 依赖关系, 例如我需要一个启动web服务器, 需要主机有网之后再启动
或者我的某个服务依赖于某个服务, 它由于异常挂了, 那我的服务必须停止

systemd后面的这个d为daemon(守护的意思), 表明它是一个守护进程

1.1 简单使用

以最常见的ssh服务为例, 它的守护进程名为sshd,结尾的d也是代表守护的意思,表明它是一个守护ssh服务的进程
ssh服务刚好它在 systemd中的名字也为 sshd, 一般服务还会有后缀 .service, 合起来就是 sshd.service

# 查看sshd服务的运行状态
systemctl status sshd.service
# 后缀可以省略, 后面都省略了, 加上当然也可以
systemctl status sshd

# 如果没启动sshd服务, 那你就不能通过ssh连接远程的linux主机
# 启动ssh服务
systemctl start sshd

# 如果修改了sshd的配置文件,例如修改了 它的服务端口号, 或者不允许root连接等
# 想要重新读取配置文件, 可以使用以下命令
systemctl daemon-reload

# 亦或是重启服务
systemctl restart sshd

# 停止服务 (如果是远程连接到某个服务器, 则不要尝试这个命令)
systemctl stop sshd

# 将服务设置为开机自启动
systemctl enable sshd

2. 编写自己的服务

2.1 编写服务的配置文件

要想自己的程序被systemd正确管理, 首先需要写一份自己服务的配置文件,来告诉systemd怎么做
比如我希望我的服务名为 mywebd, 那么需要写一个 mywebd.service的文件
文件内容有通用模板(这里只列举一些常见字段)如下, 分为三个部分

# (1). 第一部分配置服务的启动顺序和依赖关系
[Unit]
Description=简单的描述你的服务
# target文件其实是定义是服务组(保存着一组服务)
# After表示, 也就是 network.target 这个组下所有关于系统网络服务启动后, 再启动当前服务
After=network.target

# (2). 配置服务的如何启动
[Service]
# 服务的类型, 一般设置为 simple即可
Type=simple
# 是否需要systemd帮你自动重启
Restart=always
# 重启的间隔, 单位为秒, 这里即检测到异常后 1s重启服务
RestartSec=1
# 这个服务以什么用户启动
User=root
# 启动这个程序的命令
ExecStart=启动这个程序的命令

# (3). 将当前服务安装在哪一个服务组之下
[Install]
# multi-user.target 是通常的一个设置
# 一般也就是系统启动到这个target之后基本上算系统启动成功了
WantedBy=multi-user.target

更多字段控制服务可以参考官网文档

2.2 服务配置文件的安装和查看

一般这个服务的配置文件可以放在 /usr/lib/systemd/system 路径下
将写好的配置文件复制到这个目录即可, 然后设置开机自启动

# 启动服务
systemctl start mywebd.service
# 设置开机自启动
systemctl enable mywebd.service

程序运行的如果直接标准输出日志可以通过以下命名查看

journalctl -u mywebd.service
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值