AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 52976
Accepted
Lin
Lin
Asked: 2009-08-12 14:09:12 +0800 CST2009-08-12 14:09:12 +0800 CST 2009-08-12 14:09:12 +0800 CST

重新启动崩溃进程的简单方法?

  • 772

我需要监视在我的网络服务器上运行的几个进程。出于某种原因,varnish 目前每天或两天崩溃一次。我正在使用 monit 自动重启清漆,但它不起作用。这是我的 Varnish 的 monit.conf 条目。

check process varnish with pidfile /var/run/varnish.pid
    start program = "/etc/init.d/varnish start" with timeout 60 seconds
    stop program = "/etc/init.d/varnish stop"
    if failed host <my server ip> port 80 protocol http
        and request "/blank.html" then restart
    if 3 restarts within 5 cycles then timeout
    group server

日志文件显示 varnish 停止运行后,之后尝试的重新启动都失败了。然后最终 monit 停止监视清漆。

有人对我如何解决这个问题有建议吗?或者更好的是,你能推荐其他简单的方法来自动监控和重启崩溃的进程吗?谢谢!

linux monitoring web-server varnish monit
  • 6 6 个回答
  • 36779 Views

6 个回答

  • Voted
  1. Best Answer
    Ian Clelland
    2009-08-12T14:41:15+08:002009-08-12T14:41:15+08:00

    我会查看 daemontools ( http://cr.yp.to/daemontools.html )。

    Supervise 正是为此目的而构建的——启动进程并监视它们,如果它们终止则立即重新启动它们。

    如果您需要做比简单的“它是否仍在运行”检查更复杂的事情,您仍然可以使用 monit,并且如果需要重新启动进程,则通过监督来完成。

    • 17
  2. Shawn Chin
    2009-08-13T08:20:08+08:002009-08-13T08:20:08+08:00

    您还可以使用/etc/inittab使用respawn操作重新启动死进程。

    请参阅http://aplawrence.com/Unixart/startup.html上的 inittab 部分

    • 4
  3. Kyle Brandt
    2009-08-12T16:42:48+08:002009-08-12T16:42:48+08:00

    如果您已经准备好重新启动服务,则可以将事件处理程序脚本与 Nagios 一起使用。

    如果 varnish 需要 root 权限才能启动(通常是 init.d 脚本)将“/etc/init.d/varnish start”更改为“sudo /etc/init.d/varnish start”。但这可能还不够,因为您可能不想将运行的任何用户 monit 作为对所有命令的总 sudo nopasswd 权限授予所有命令,并且将 sudo 授予 shell 脚本基本上同样糟糕。因此,您需要确定该 init 脚本中的哪些命令需要 sudo,将 /etc/sudoers 文件中的这些命令 sudo 权限授予 monit 用户,最后相应地编辑该 init 脚本。或者也许代替所有这些清漆可以作为非root用户运行?

    最后,我相信你知道这一点,但我还是要说。您显然为此付出了很多努力,我希望您付出同样多的努力来找出清漆崩溃的原因并实际修复它(或者让开发人员找出原因):-)

    更新:
    这可能不那么干净,但是以 root 身份完成此操作的一种简单方法可能是设置一个脚本来检查进程是否正常,如果不正常则启动它。然后每隔几分钟运行一次该脚本作为 cron 作业。

    • 2
  4. Cory Klein
    2013-11-06T14:51:24+08:002013-11-06T14:51:24+08:00

    另一个取自 StackOverflow的好方法:

    until myserver; do
        echo "Server 'myserver' crashed with exit code $?.  Respawning.." >&2
        sleep 1
    done
    

    这可以添加到 crontab 中:

    crontab -e
    

    然后添加一个规则来启动你的监控脚本:

    @reboot /usr/local/bin/myservermonitor
    

    或作为脚本添加到/etc/init.d

    有关为什么这是一种好方法的详细说明,请参阅StackOverflow 答案。

    • 2
  5. CodeNinja
    2017-12-20T05:34:54+08:002017-12-20T05:34:54+08:00

    我也在寻找最简单的方法来处理这个问题。我能找到的最简单的方法是简单地将Restart=always相关.service文件添加到标签/etc/systemd/system/multi-user.target.wants/的最后一行。[service]

    之后,sudo systemctl daemon-reload然后sudo systemctl restart service.service重新加载更改。

    您可以通过检查服务是否正在运行来进行测试: systemctl status processname检查开始时间戳。之后,ps -ef | grep servicename使用刚刚找到的 id 终止进程kill 1234。之后systemctl status processname再次执行并检查开始时间戳是否已更新。

    同时检查/var/log/daemon.log错误

    它应该适用于:

    • Debian 7 和 Debian 8
    • Ubuntu 15.04 及更新版本
    • CentOS 7 及更新版本
    • 1
  6. Phill W.
    2020-08-07T02:04:03+08:002020-08-07T02:04:03+08:00

    似乎没有人问过的一件事......

    为什么清漆会崩溃?

    (我从未使用过它。这可能是它的“正常”行为,但不知何故我怀疑它......)

    当然,您可以花很长时间想出让汽车自动重新启动的“聪明”方法,但肯定最好不要一开始就把它撞到墙上?

    • 0

相关问题

  • 更改 PHP 的默认配置设置?

  • 你用什么工具来监控你的服务器?

  • 我应该如何管理每用户带宽?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve