如何调试间歇性失败的 upstart 脚本?

How to debug an upstart script that intermittently fails?

我有一个进程,我想在我的系统通过任何方式 rebooted 时立即启动,所以我为此使用了 upstart 脚本,但有时我注意到我的进程没有'在硬重启期间无法启动(关闭并启动机器)所以我认为我的 upstart 脚本在硬重启后没有被启动。我相信硬重启没有运行级别。

我很困惑为什么有时在重新启动期间它可以工作,但有时却不起作用。我该如何调试它?

下面是我的 upstart 脚本:

# sudo start helper
# sudo stop helper
# sudo status helper
start on runlevel [2345]
stop on runlevel [!2345]

chdir /data
respawn

pre-start script
  echo "[`date`] Agent Starting" >> /data/agent.log
  sleep 30
end script

post-stop script
  echo "[`date`] Agent Stopping" >> /data/agent.log
  sleep 30
end script

limit core unlimited unlimited
limit nofile 100000 100000
setuid goldy
exec python helper.py

有什么方法可以调试出发生了什么吗?我相信我可以很容易地重现这一点。关于我在这里可以做什么的任何指示?

注:

在重新启动期间,有时我会看到我在 pre-start 脚本中的日志记录,但有时我在重新启动后根本看不到日志记录,这意味着我的 upstart 脚本没有被触发。我需要在运行级别上更改什么才能使其正常工作吗?

我在管理程序中有一个 运行 的虚拟机,我正在使用 Ubuntu。

你的过程 运行 很好,但是在系统启动期间许多事情并行进行。

如果挂载(使 /data 文件夹可用)比您的 pre-start script 运行得晚,您将看不到 pre-start script 的 "results"。

我建议将睡眠提前 30 秒(顺便说一句,30 秒似乎太长了):

pre-start script
  sleep 30 # sleep 10 should be enough
  echo "[`date`] Agent Starting" >> /data/agent.log
end script