Rhel Centos环境开关机自动脚本

Rhel Centos环境开关机自动脚本

  • [1. 业务需求](#1. 业务需求)
  • [2. 解决方法](#2. 解决方法)
    • [2.1 rc.local](#2.1 rc.local)
    • [2.2 rc.d](#2.2 rc.d)
    • [2.3 systemd](#2.3 systemd)
    • [2.4 systemd附着的方法](#2.4 systemd附着的方法)
    • [2.5 tuned](#2.5 tuned)
  • [3. 测试](#3. 测试)

1. 业务需求

一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员.

想达到的效果:

由于是非标准的apache或者nginx之类的服务,需要开机执行一个脚本来启动业务.

2. 解决方法

方法有:

  1. rc.local中添加脚本
  2. 将脚本添加到/etc/rcx.d/中
  3. 将脚本做成systemd实现开机启动
  4. 将脚本附着到其他systemd中随其他systemd一起启动
  5. 将脚本放到tuned里实现开机启动

为了方便测试,就写了个简单的脚本.内容如下

makeafile.sh

bash 复制代码
#!/bin/bash
filename=$1
mkdir -p /tmp/test
echo `date` > /tmp/test/${filename}

start.sh

bash 复制代码
#!/bin/bash
/opt/makeafile.sh test.txt &
exit $?

stop.sh

bash 复制代码
#!/bin/bash
echo `date` >> /tmp/stop.txt

当然必须给他加上可执行权限

bash 复制代码
chmod +x makeafile.sh
chmod +x start.sh
chmod +x stop.sh

2.1 rc.local

这个比较简单,就是将脚本添加到rc.local的末尾,但值得注意的是必须给rc.local加上执行权限.

bash 复制代码
echo '/opt/start.sh' >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

但这个办法只能加开机执行,没法关机执行

2.2 rc.d

先执行以下命令确认服务器运行在哪个级别下

bash 复制代码
[root@centos7 ~]# runlevel 
N 3

将文件复制到对应级别的目录下

bash 复制代码
cp /opt/start.sh /etc/rc3.d/S98start_makeafile
cp /opt/start.sh /etc/init.d/start_makeafile
cp /opt/stop.sh /etc/rc3.d/K98stop_makeafile
cp /opt/stop.sh /etc/init.d/stop_makeafile

2.3 systemd

文件位置:

/etc/systemd/system/mkfile.service

内容如下:

bash 复制代码
[Unit]
Description=Run mkfl script at startup
After=network.target

[Service]
Type=oneshot
ExecStart=/opt/start.sh
ExecStop=/opt/stop.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

配置后执行

bash 复制代码
systemctl enable --now mkfile

2.4 systemd附着的方法

这个方法依赖相对隐蔽,但一旦被附着的服务被disabled了,那么你的这个也失效了.

方法1:

bash 复制代码
[Unit]
Description=Run mkfl script at startup
After=network.target

[Service]
Type=oneshot
ExecStartPre=/opt/start2.sh
ExecStart=/opt/start.sh
ExecStop=/opt/stop.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

方法2:

bash 复制代码
[Unit]
Description=Run mkfl script at startup
After=network.target

[Service]
Type=oneshot
ExecStart=/opt/start2.sh && /opt/start.sh
ExecStop=/opt/stop.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

2.5 tuned

使用 tuned 的插件机制,好处就是隐蔽.一般不是资深的运维很难发现,当然时间长了自己也容易忘记.(详细学习的话见rh442的内容)

创建自定义脚本

bash 复制代码
mkdir -p /etc/tuned/mkfile.d
vim /etc/tuned/mkfile.d/mkfile.conf

在配置文件中添加以下内容:

bash 复制代码
[main]
type=script
script=/opt/stop.sh

启用自定义插件

编辑 /etc/tuned/tuned-main.conf 文件,添加你的自定义插件到 include 列表中:

bash 复制代码
[main]
include=virtual-host,mkfile

重启 tuned 服务

bash 复制代码
systemctl restart tuned

3. 测试

至此实验完成.

本实验纯技术角度实现功能,别拿去干坏事.

任何读者添加恶意脚本删库与本人无关.

相关推荐
报错小能手5 小时前
linux学习笔记(43)网络编程——HTTPS (补充)
linux·网络·学习
报错小能手5 小时前
linux学习笔记(45)git详解
linux·笔记·学习
hkNaruto5 小时前
【DevOps】基于Nexus部署内网pypi代理镜像仓库操作手册
运维·devops
ximy13355 小时前
AI服务器工作之线材的接口介绍
运维·服务器
ximy13356 小时前
AI服务器工作之ubuntu系统下的驱动安装
运维·服务器·ubuntu
²º²²এ松6 小时前
蓝牙低功耗(BLE)通信的中心设备/外围设备(连接角色)、主机/从机(时序角色)、客户端/服务器(数据交互角色)的理解
运维·服务器·数据库
Maple_land6 小时前
常见Linux环境变量深度解析
linux·运维·服务器·c++·centos
xx.ii7 小时前
jenkins流水线项目部署
运维·jenkins
小白银子7 小时前
零基础从头教学Linux(Day 53)
linux·运维·python
skywalk81638 小时前
基于频域的数字盲水印blind-watermark
linux·开发语言·python