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

至此实验完成.

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

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

相关推荐
码农101号17 分钟前
Linux中shell编程表达式和数组讲解
linux·运维·服务器
powerfulzyh30 分钟前
非Root用户启动SSH服务经验小结
运维·ssh
云道轩38 分钟前
升级centos 7.9内核到 5.4.x
linux·运维·centos
是小满满满满吗41 分钟前
传输层:udp与tcp协议
linux·服务器·网络
爱学习的小道长1 小时前
Ubuntu Cursor升级成v1.0
linux·运维·ubuntu
EelBarb1 小时前
seafile:ubuntu搭建社区版seafile12.0
linux·运维·ubuntu
Xam_d_LM1 小时前
【Latex】Windows/Ubuntu 绘制 eps 矢量图通用方法(drawio),支持插入 Latex 数学公式
linux·ubuntu·科研·矢量图·drawio
402 Payment Required1 小时前
serv00 ssh登录保活脚本-邮件通知版
运维·chrome·ssh
小柏ぁ1 小时前
calico/node is not ready: BIRD is not ready: BGP not established with xxx
运维·docker·kubernetes
Mintimate2 小时前
云服务器 Linux 手动 DD 安装第三方 Linux 发行版:原理与实战
linux·运维·服务器