我是靠谱客的博主 小巧乌冬面,最近开发中收集的这篇文章主要介绍Nginx从入门到实战(七):定时器动态切换nginx配置-实现网站自动启停END,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

背景: 有些网络由于某种特殊需求,需要每日在指定时间内开放,在其余时间展示“系统正在维护中…”的页面。
基于类似需求,最好的当然是定时自动处理了,省去人工处理的麻烦;

一、整体思路

1、设计2个nginx.conf, 分别指向正式系统和维护系统路径;
2、编写切换nginx配置并重新加载nginx的脚本;
3、然后使用crontab定时器执行脚本,定时切换2个不同的nginx.conf;

二、具体实现

2.1 设计2个nginx.conf, 分别指向正式系统和维护系统路径。

注意: 这2个nginx.conf, 要放到一个不会被删除的位置,我这边放到了/data/script/ 目录下;
在这里插入图片描述
正常系统的配置:nginx.conf

刚安装完nginx后,默认nginx.conf的配置就行,正式的系统也用默认的index.html(作为示例)

系统正在维护中 的配置:nginx-stopsvc.conf

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
	server {
		listen 80;
		server_name localhost;
    	location / {
    	    # 停止维护的页面放到这个路径下
			root /usr/local/nginx/stopsvc;
			index index.html index.htm;
		}   
	}
}

系统维护中页面(/usr/local/nginx/stopsvc/index.html)如下:

<!DOCTYPE html>
<html>
<head>
<title>系统维护中</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>系统正在维护中,给您带来的不便,非常抱歉...</h1>   
</body>
</html>

2.2 编写切换nginx配置并重新加载nginx的脚本

定时启动脚本:就是把正常系统的nginx配置放到/usr/local/nginx/conf/ 目录下

2.2.1 start.sh脚本如下:

# /bin/bash
rm -f /usr/local/nginx/conf/nginx.conf
cp -rp /data/script/nginx.conf /usr/local/nginx/conf/nginx.conf
cd /usr/local/nginx/sbin
./nginx -s reload
curtime=$(date "+%Y-%m-%d %H:%M:%S")
echo $curtime "开启服务成功"

上述脚本安行说明:
先删除原有的默认配置
将准备好的正式系统的nginx.conf配置替换过去
到nginx的sbin目录
执行重新加载nginx的命令
变量接当前指定格式时间
输出时间和结果

2.2.2 stop.sh脚本如下:

# /bin/bash
rm -f /usr/local/nginx/conf/nginx.conf
cp -rp /data/script/nginx-stopsvc.conf /usr/local/nginx/conf/nginx.conf
cd /usr/local/nginx/sbin
./nginx -s reload
curtime=$(date "+%Y-%m-%d %H:%M:%S")
echo $curtime "停止服务成功"

上述脚本安行说明:
先删除原有的默认配置
将准备好的系统维护中…的nginx-stopsvc.conf配置替换过去
到nginx的sbin目录
执行重新加载nginx的命令
变量接当前指定格式时间
输出时间和结果

2.3、然后使用crontab定时器执行脚本,定时切换2个不同的nginx.conf;

脚本写好后,加入定时器定时执行,执行crontab -e编辑当前用户的定时器任务

crontab -e

执行上述命令后,会进入类似vim编辑器的界面,输入要执行的定时器配置,然后:wq保存退出即可,如下:

# 表示每日16:30执行stop.sh脚本,并将日志输出到startAndStopLog.log
30 16 * * * /usr/local/script/stop.sh >> /usr/local/script/startAndStopLog.log
30 8 * * * /usr/local/script/start.sh >> /usr/local/script/startAndStopLog.log

说明:
【整体格式】:要执行cron表达式 要执行的脚本的全路径 >> 日志文件全路径

cron表达式格式,从左到右依次为:minute hour day month dayofweek 
minute - 从0到59的整数 
hour - 从0到23的整数 
day - 从1到31的整数 (必须是指定月份的有效日期)
month - 从1到12的整数 (或如Jan或Feb简写的月份)
dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)

设置后,使用crontab -l命令查看设置定时器的结果:

[root@wdy stopsvc]# crontab -l
30 16 * * * /usr/local/script/stop.sh >> /usr/local/script/startAndStopLog.log
30 8 * * * /usr/local/script/start.sh >> /usr/local/script/startAndStopLog.log

三、测试结果

3.1 早上 8:30 系统正式运行

(我这边是nginx的默认页面和配置),如下:

在这里插入图片描述

3.2 下午 16:30 系统进入维护中

这里的示例就比较简陋了哈, 结果如下:

在这里插入图片描述

四、测试日志

[root@wdy stopsvc]# cat startAndStopLog.log 
2022-03-25 16:30:00 停止服务成功
2022-03-26 08:30:00 开启服务成功

五、可能的问题

1、如果不执行,可能是时区不对,比如你晚上20点执行,时区不对的话,可能是date输出是8点,你设置20点当然不执行了
设置时区为上海timedatectl set-timezone Asia/Shanghai

[root@host-wdy stopsvc]# date
Tue Apr 26 08:03:32 EDT 2022
[root@host-wdy  stopsvc]# timedatectl set-timezone Asia/Shanghai 
[root@host-wdy  stopsvc]# timedatectl
      Local time: Tue 2022-04-26 20:07:16 CST
  Universal time: Tue 2022-04-26 12:07:16 UTC
        RTC time: Tue 2022-04-26 11:48:36
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
[root@host-wdy stopsvc]# date
Tue Apr 26 20:07:45 CST 2022

2、可能是sh脚本没有执行权限

chomd +x  start.sh stop.sh

END

最后

以上就是小巧乌冬面为你收集整理的Nginx从入门到实战(七):定时器动态切换nginx配置-实现网站自动启停END的全部内容,希望文章能够帮你解决Nginx从入门到实战(七):定时器动态切换nginx配置-实现网站自动启停END所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部