2017-10-17 157 views
7

我有一个过程,我想尽快开始我的系统是rebooted无论如何,所以我使用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脚本,但有时我没有看到日志重启后所有,这意味着我的暴发户脚本不触发记录。有什么我需要改变运行级别,使其工作?

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

+1

你可能会暂时的东西,如更换你的'EXEC蟒蛇helper.py':''script' EXEC 2 >>/path/to/log.txt''set -x' exec python helper.py'' end script';这样你就可以在'/ path/to/log.txt'中记录启动过程中发生的事情。 –

+0

您可以检查'/ var/log/upstart'并查看是否有您需要的东西? –

+0

已经检查过,我相信没有什么。 – john

回答

1

您的进程运行良好,但在系统启动期间,许多事情会并行进行。

如果安装(使可用的/data文件夹)运行晚于您的pre-start script,您将看不到pre-start script的“结果”。

我建议移动睡眠30较早(顺便说一句30秒似乎过于looong):

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

ok会试试这个,但是有没有其他的runlevel可以使用,这将保证在每一个其他的upstart脚本运行后运行我的upstart脚本(如mount) ? – john

+0

如果你想确保你的脚本在mount之后运行 - 更具体地说在本地挂载之后, 输入 '在本地文件系统上启动' - 运行时间比'runlevel启动晚'' –

+0

ok我试着移动睡在上面,但它仍然不能很好地工作,所以我不得不手动启动它。但是我注意到的是,如果我使用'start stop rc'而不是我原来的'start'行,那么它总是按照我的测试工作。你知道我的新变化有什么不同吗? – john