nginx 长时间不用自动停止
时间: 2023-08-12 11:19:43 浏览: 122
Nginx不停服工具
为了保证 Nginx 长时间不用时自动停止,可以通过以下两种方式实现:
1. 使用 Systemd 服务管理器进行管理
在 Systemd 服务管理器中,可以设置 Nginx 服务的超时时间,如果服务在一定时间内没有被访问,则自动停止服务。具体操作如下:
- 编辑 Nginx 的 Systemd 服务配置文件 `/etc/systemd/system/nginx.service`
```
sudo nano /etc/systemd/system/nginx.service
```
- 在 Service 部分添加以下配置:
```
[Service]
TimeoutStartSec=0
TimeoutStopSec=15min
```
其中,`TimeoutStartSec=0` 表示服务启动时没有超时限制,`TimeoutStopSec=15min` 表示服务在 15 分钟内没有被访问,则自动停止服务。
- 重新加载 Systemd 配置文件并启动 Nginx 服务
```
sudo systemctl daemon-reload
sudo systemctl start nginx
```
2. 使用 Nginx 定时任务进行管理
可以编写一个简单的定时任务脚本,定时检查 Nginx 是否有访问记录,如果没有则自动停止服务。具体操作如下:
- 编写定时任务脚本文件 `nginx_stop.sh`
```
#!/bin/bash
# 设置超时时间,单位为秒
timeout=900
# 获取 Nginx 最近一次访问时间
last_access_time=$(grep "GET /" /var/log/nginx/access.log | tail -n 1 | awk '{print $4}' | sed 's/\[//')
# 计算距离当前时间的秒数
time_diff=$(($(date +%s) - $(date -d "${last_access_time}" +%s)))
# 如果距离当前时间超过超时时间,则停止 Nginx 服务
if [ ${time_diff} -gt ${timeout} ]; then
sudo systemctl stop nginx
fi
```
其中,`timeout` 表示超时时间,单位为秒,默认为 900 秒(15 分钟);`last_access_time` 表示 Nginx 最近一次访问时间;`time_diff` 表示距离当前时间的秒数,如果超过超时时间,则停止 Nginx 服务。
- 设置定时任务,每隔 5 分钟执行一次脚本
```
sudo crontab -e
```
在打开的文件中添加以下内容:
```
*/5 * * * * /bin/bash /path/to/nginx_stop.sh
```
其中,`*/5` 表示每隔 5 分钟执行一次脚本,`/path/to/nginx_stop.sh` 表示脚本文件的路径。
阅读全文