学习systemd记录----尝试添加vnet自启动

碎碎念

使用vnet时遇到服务器重启总是需要手动去启动一次,作为需要的常用软件,他应该去自启动。然后了解到了systemd,才发现之前的vnet一键脚本写的有多简(la)单(ji)。不过没关系,我们试着逐步完善他。使用systemd代替nohup实现软件启动与运行。然后记录一下自己学习的过程并逐步完善脚本

正文

来一段介绍

Systemctl是一个systemd工具,主要负责控制systemd系统和管理系统服务
systemd即为system daemon,是linux下的一种init软件

有时我们将自定义程序注册为systemd service 进程管理交由系统管理,可以方便启动停止,亦可以实现
服务异常退出重启,开机自启动。 减少自定义程序服务管理的时间消耗。

将二进制文件放到指定目录

我在/usr/local下创建一个vnet目录并进入该目录

cd /usr/local
mkdir vnet
cd vnet

将vnet文件下载至该目录

如果没有unzip需要先安装unzip

yum -y install zip unzip
wget -N --no-check-certificate "https://www.yunyiya.com/download/linux/tunnel.zip" && unzip tunnel.zip

赋予可执行权限

chmod +x *

创建需要的启动文件和配置文件

这里发现需要在该目录下运行才能启动网页访问,具体原理不理解,后续再补充吧。
这里以服务端为例创建两个文件:server.shserver.conf

使用vi编辑器

vi server.sh

i进入编辑模式,输入以下内容(第一行为必须)

#!/bin/bash
sleep 0.5
cd /usr/local/vnet
./server

也就是定义文件类型。切换到软件目录再执行server文件,conf文件填入如下内容:

#!/bin/bash
sleep 2

给该文件权限
chmod +x server.sh service.conf

我们去创建systemd文件

谷歌告诉我在下面这个目录,或许吧。。。

cd /usr/lib/systemd/system

我们给他起名字就叫vnets吧s代表server(服务)

vi vnets.service

填入如下内容

[Unit]
Description=VnetServer.Service
After=rc-local.service
[Service]
Type=simple
ExecStart=/usr/local/vnet/server.sh
ExecStartPost=/usr/local/vnet/server.conf
Restart=always
LimitNOFILE=512000
LimitNPROC=512000
[Install]
WantedBy=multi-user.target

使用systemd启动/关闭/开机自启

启动服务:systemctl start vnets

关闭服务:systemctl stop vnets

重启服务:systemctl restart vnets

显示服务的状态:systemctl status vnets

在开机时启用服务:systemctl enable vnets

结束了,下面的还没写完呢

systemd具体参数
[Unit]
Description 服务描述,作为systemctl status 命令输出的一个介绍
Documentation 一个url 定义服务的具体介绍网址
After 在什么服务启动之后
Before 在什么服务启动之前启动
Requires 依赖其他的单元服务, 需要与列出的服务一起激活,若任何服务无法启动,则该单元不会被激活
Wants 比Requires依赖性弱,弱其他服务没有启动成功,该服务也不受影响,只是表示一种推荐

[Service]
Type
1.simple默认参数,进程作为主进程
2.forking是后台运行的形式,主进程退出,os接管子进程
3.oneshot 类似simple,在开始后续单元之前,过程退出
4.DBUS 类似simple,但随后的单元只在主进程获得D总线名称之后才启动
5.notify 类似simple,但是随后的单元仅在通过sd_notify()函数发送通知消息之后才启动
6.idle类似simple,服务二进制文件的实际执行被延迟到所有作业完成为止,不与其他服务的输出相混合,如状态输出与服务的shell输出混合

备注:以上的类似simple指的是类似simple将启动进程作为主进程进行运行

User
设置服务运行的用户,
Group
设置服务运行的用户组,
PIDFile
为存放PID的文件路径, 对于type设置为forking建议使用该项。 systemd will read
the PID of the main process of the daemon after start-up of the service. systemd will not write to the file configured here,
although it will remove the file after the service has shut down if it still exists.
ExecStart
服务的具体运行命令,ExecStartPre和ExecStartPost指定在ExecStart前后执行的自定义命令。
若使用Type = OnHead可以指定多个自定义命令,将依次执行这些命令。
ExecReload
为重启命令,重新加载的动作, 重新加载时执行的命令或者脚本
ExecStop
为停止命令,停止时要执行的命令或脚本

ExecStartPre:启动服务之前执行的命令
ExecStartPost:启动服务之后执行的命令
ExecStopPost:停止服务之后执行的命令

Restart
定义何种情况Systemd会自动重启当前服务,值:
包括always(总是重启)、no 、on-success、on-failure、on-abnormal、on-abort、on-watchdog
对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal

列出systemd常用命令,我们将其命名为vnets

启动服务:systemctl start

关闭服务:systemctl stop

重启服务:systemctl restart

显示服务的状态:systemctl status

在开机时启用服务:systemctl enable

在开机时禁用服务:systemctl disable

查看服务是否开机启动:systemctl is-enabled

查看已启动的服务列表:systemctl list-unit-files|grep enabled

查看启动失败的服务列表:systemctl --failed

发表新评论