当 Nginx 宕机时如何自动重启

当 Nginx 宕机时如何自动重启

我已经将应用程序部署到 AWS EC2 上,我想实现自动化,如果我重新启动实例或 Nginx Web 服务器关闭,它将自动重新启动。我真的不知道从哪里开始。

我听说我可以使用 crontab 来安排自动监控,如果它发生故障,它可以发送电子邮件警报并重新启动网络服务器。

答案1

使用 monit 的目的是处理这样的情况。

apt install monit

nano /etc/monit/conf.d/nginx.conf

将下面的内容放入此文件中并重新启动 monit

check process nginx with pidfile /var/run/nginx.pid
start program = "/usr/sbin/service nginx start"
stop program = "/usr/sbin/service nginx stop"

答案2

这是 SystemD 的一个功能。通过运行systemctl edit nginx然后粘贴以下内容来覆盖 NGINX 的现有单元文件:

[Service]
Restart=always

节省。

如果 NGINX 因 OOM 终止程序等原因而宕机,它会在宕机后重新启动。当然,如果 NGINX 中存在配置错误,它不会重新启动。

要验证此配置,请使用 启动 NGINX 服务systemctl start nginx,并使用 验证它是否正在运行systemctl status nginx

通过 终止它pkill -f nginx。使用 确认 NGINX 正在运行systemctl status nginx

答案3

其实相当简单

转到 /lib/systemd/system 使用以下命令备份您的 ngnix systemd 单元sudo cp ngnix.service ngnix.service.old

在 ngnix.service 中的服务块末尾添加以下两行

Restart=on-failure
RestartSec=5s

使用以下方式加载新配置sudo systemctl daemon-reload

测试——尝试关闭 ngnix

cat /var/run/nginx.pid会给你PID

sudo kill -9 PID将杀死 nginix

您会发现,如果您检查 PID,则会有一个不同的 PID。如果您没有运行这些行,则终止 ngnix 将导致服务器关闭。这将仅有的在非正常关机时触发重启

答案4

如果您想像问题标题中所述那样重新启动该过程,其他所有答案似乎都很棒。如果您想像问题正文中所述那样重新启动实例,则可以使用 Auto Scaling 组。

设置 Auto Scaling Group,其实例数最少为 1,最多为 1,并将健康检查指向 Nginx Web 服务器提供的内容(理想情况下,不会消耗大量 CPU 的内容,如 robots.txt)。Auto Scaling Group 将检测您的实例何时不健康(可能需要 3 次或 5 次健康检查失败),并将终止该实例并启动一个新实例。

请记住,您将丢失实例中存储的所有状态(因为实例实际上已被销毁)。无论如何,将状态保留在服务器内是一种云反模式。您还会丢失缓存。

相关内容