我已经将应用程序部署到 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 次健康检查失败),并将终止该实例并启动一个新实例。
请记住,您将丢失实例中存储的所有状态(因为实例实际上已被销毁)。无论如何,将状态保留在服务器内是一种云反模式。您还会丢失缓存。