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. 测试

至此实验完成.

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

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

相关推荐
妮妮喔妮16 分钟前
SSH协议的GIT转换
运维·git·ssh
探云抛雾؁ۣۖ28 分钟前
Docker 实战:情感分析系统-容器化部署全流程(sa-logic、sa-webapp、sa-frontend )
运维·docker·容器·web app·情感系统
范纹杉想快点毕业1 小时前
嵌入式 C 语言编程规范个人学习笔记,参考华为《C 语言编程规范》
linux·服务器·数据库·笔记·单片机·嵌入式硬件·fpga开发
百里晴鸢1 小时前
小白也能懂的iptables核心逻辑!四张表+五条链如何守护你的网络安全?
linux·安全
Akshsjsjenjd2 小时前
Linux 服务部署:自签 CA 证书构建 HTTPS 及动态 Web 集成
linux·前端·https
为什么要内卷,摆烂不香吗3 小时前
kubernetes(4) 微服务
linux·运维·微服务·容器·kubernetes
conkl8 小时前
Linux 零基础万字入门指南(进阶详解版)
linux·运维·服务器·ssh·文件管理·shell·linux基础
一水鉴天11 小时前
认知系统的架构: 认知残余三角形、认知主体意识 和认知演进金字塔(腾讯元宝)
运维·服务器
三体世界11 小时前
Mysql基本使用语句(一)
linux·开发语言·数据库·c++·sql·mysql·主键
TT-Kun11 小时前
Linux 上手 UDP Socket 程序编写(含完整具体demo)
linux·计算机网络·udp