我有一个应用程序偶尔会由于某些运行时错误或 DDOS 攻击而关闭。该应用程序在 Screen 的某个部分内运行,因此我需要访问服务器并键入命令 screen -S name ./start_app.sh 并使用 ctrl + a ctrl + d 退出。我在这里找到了一篇帖子,其中可以使用 crontab,但我不想重新启动应用程序执行,我只想让它验证应用程序是否正在运行,如果应用程序未运行,它会自动启动与应用程序分离的屏幕。这可能吗?
答案1
您似乎将明显的输出与后台进程和可分离的 tty 混淆了。您可能希望给程序命名以获得更好的答案 - 因此,下面的答案本质上是通用的。
如果您知道程序的名称,您可以通过查看进程列表来检查它是否正在运行 - 但是您指出它受到 DDOS 攻击。如果是这种情况,我推测它正在端口上通信,您可以通过检查端口(例如使用 netcat)来监视其可用性,或者使用 fuser 检查进程是否仍在运行(它可以查看是否有任何进程绑定到端口)。
您应该能够编写一些脚本并定期从 crontab 运行它来检查服务的状态,例如,如果服务失败,则向您发送电子邮件。您还可以使用 Nagios 等工具来监控您的系统并提供状态。
另一种方法是系统地在日志文件中查找故障消息并立即对这些故障采取行动。这种方法不如上述方法那么万无一失,但如果故障率定义得当,它的优点是能够实时执行而无需等待 cron。您可以使用/滥用 fail2ban 进行此类监控。
使用屏幕可能是一种转移注意力的手段,因为它实际上只是向您显示给定 tty 的输出 - 即,它是用于人机交互的工具,而不是用于机器监控的工具。