通过 upstart 脚本自动重启我的应用服务器

通过 upstart 脚本自动重启我的应用服务器

我有一台 Ubuntu 12.04 机器,其中运行着 C++ 应用服务器,并通过 upstart 脚本进行控制。这意味着每当我的应用服务器崩溃时,我的 upstart 脚本都会自动重新启动它们,每当我的 ubuntu 机器重新启动/重启时,我的 upstart 脚本都会再次重新启动我的应用服务器。

以下是我的 upstart 脚本:

start on runlevel [2345]
stop on runlevel [016]

chdir /opt/process/process_server
respawn

post-start script
    echo "App server started at `date +"%F %T"` on `hostname -f`" | mailx -r "[email protected]" -s "Process Started" "[email protected]"
end script

post-stop script
  sleep 30
end script

limit core unlimited unlimited
limit nofile 8092 8092
setuid caprti
exec ./process_server --config_file=../config/process.init

现在奇怪的是,我至少见过两次这种情况 - 我的 ubuntu 机器重新启动了,我不知道是怎么做的,是谁做的,但我的应用服务器根本没有重新启动,我不知道为什么?我自己已经多次测试过,通过键入重新启动同一个框"sudo reboot",每当那台机器重新启动时,我都会看到我的应用服务器自动重新启动。

在什么情况下,在重新启动 Ubuntu 机器时不会导致我的应用服务器从上面的 upstart 脚本重新启动?我的 Upstart 脚本中缺少什么吗?

此外,如果这两次都发生这种情况,我该如何验证我的 Upstart 脚本是否在上次重启期间尝试重新启动我的应用服务器,但由于某种原因失败了?

答案1

我有一些可能有帮助的注释或提示:

  • respawn没有明确指定限制的节有默认值。

    6.28 重生

    还要注意,如果作业没有指定respawn limit节以及respawn节,则作业将应用默认的重生限制(参见respawn limit)。

    6.29 重生限制

    重生是有限制的。如果职业重生次数超过 COUNT 次间隔秒数,则将被视为存在更深层次的问题,并将被停止。默认数数10。 默认 间隔5秒。

    使用:

    respawn 
    respawn limit unlimited
    
  • 检查其日志如下如何调试 upstart 脚本?。您可以创建自己的自定义日志来跟踪更具体的问题使用pre-startpost-start&post-stop脚本并检查变量,如RESULTPROCESS,请参阅Upstart:重生和失败的报告(电子邮件、日志)

  • start on runlevel [2345]!!! 您确定运行级别是启动此服务的唯一必要条件吗?示例:该 c++ 守护进程是否需要 filesystemnetworking.. 请参阅Upstart 有哪些活动?

    有人习惯start on stopped rc避免寻找每个事件,来源:使用 upstart 以实时优先级启动 jackd

参考:

答案2

调试

默认情况下,系统将 upstart 文件的日志存储在 中/var/log/upstart。通常,它以 name_of_upstartfile.log 的形式存储在 中 /var/log/upstart。查看/var/log/upstart/file.log。其中 file.log 是您的初始化文件的日志/etc/init/file.conf。您可以轻松识别 upstart 脚本中缺少的内容。

检查 upstart 文件的语法 init-checkconf /etc/init/file.conf 或使用更多调试模式 init-checkconf -d /etc/init/file.conf

使用 start on local-filesystemsstart on (local-filesystems and net-device-up IFACE!=lo)代替start on runlevel [2345]。您正在执行需要本地文件系统的命令,如果还需要网络,则添加网络或检查其他要求。仍然存在问题,然后发布日志或错误。

相关内容