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

至此实验完成.

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

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

相关推荐
Ruimin05191 小时前
Mysql8.0使用PXC
运维
luoqice3 小时前
嵌入式linux下如何通过IIS接口驱动实现录制pcm音频
linux
陈老师还在写代码3 小时前
在服务器部署JVM后,如何评估JVM的工作能力,比如吞吐量
运维·服务器·jvm
handsomestWei3 小时前
k8s优雅操作pod容器组
运维·云原生·k8s·pod
Karoku0663 小时前
【k8s应用管理】kubernetes 存储管理
运维·docker·云原生·容器·kubernetes
钟离墨笺3 小时前
【Linux】【网络】IO多路复用 select、poll、epoll
linux·运维·网络
凤山老林4 小时前
Docker 部署 MongoDB | 国内阿里镜像
运维·mongodb·docker·容器
irisart4 小时前
3.2 > Bash
linux·bash
丁总学Java5 小时前
在Mac arm架构终端中运行 corepack enable yarn 命令,安装yarn
linux·编辑器·vim