所有的独角兽工人都在默默地死去,没有任何迹象表明原因,我也找不到任何外部过程杀死他们的证据。我是诊断这种东西的新手,经过几个小时的研究,试验,并试图解决这个问题,我走到了尽头。
背景信息 - 它是一个Rails 4.1应用程序,Ruby 2.0,在Ubuntu 14.04服务器上运行nginx和unicorn。
unicorn.rb
working_directory "/home/deployer/apps/ourapp/current"
pid "/home/deployer/apps/ourapp/current/tmp/pids/unicorn.pid"
stderr_path "/home/deployer/apps/ourapp/current/log/unicorn.log"
stdout_path "/home/deployer/apps/ourapp/current/log/unicorn.log"
listen "/tmp/unicorn.ourapp.sock"
worker_processes 2
timeout 30
摘自unicorn.log(死前和重启后的最后一行)
I, [2016-08-28T19:54:01.685757 #19559] INFO -- : worker=1 ready
I, [2016-08-28T19:54:01.817464 #19556] INFO -- : worker=0 ready
I, [2016-08-29T09:19:14.818267 #30343] INFO -- : unlinking existing socket=/tmp/unicorn.ourapp.sock
I, [2016-08-29T09:19:14.818639 #30343] INFO -- : listening on addr=/tmp/unicorn.ourapp.sock fd=10
I, [2016-08-29T09:19:14.818807 #30343] INFO -- : worker=0 spawning...
I, [2016-08-29T09:19:14.824358 #30343] INFO -- : worker=1 spawning...
一些相关信息:
/var/log
以查找已被杀死的进程的证据,并且只能找到一个在几天前被杀死的无关进程。 Completed 200 OK in 264ms
所以它似乎不是请求超时。问题:
我不知道从哪里开始,所以任何建议都会非常感激。
更新
正如所建议的那样,我使用strace来发现独角兽被一个旧的crontab(我知道我之前应该在那里检查过)所杀,这是由以前的开发人员添加的,它们每晚都要重启服务器。 stop命令工作,但启动命令失败。
我仍然不知道为什么我无法在我的日志搜索中找到任何内容,但是在将strace附加到主要的独角兽进程(使用类似strace -o /tmp/strace.out -s 2000 -fp <unicorn_process_id>
之类的内容)后,strace日志以明确+++ killed by SIGKILL +++
结束。我再次搜索了日志,这导致我进入了crontab。
根本原因可能与我的情况非常相关,但我真的很高兴我现在知道strace。