I have been running a rails app on a machine, which I can’t restart (no root access) or physically pull the plug on, just using the prepackaged rails server, WEBrick. But I quickly found out that it was not that easy to kill my app. I’d run something like script/server -d -p 25000 > /dev/null .
Notice that -d puts the server in daemon mode and > /dev/null sends all the standard out to /dev/null .
I tried to kill the app using top and then killing with the process ID, then tried pgrep and kill on the command line, to no avail.
Finally I found the (simple) solution that I’ll repost here. On the command line of the machine running the server:
pgrep ruby
This will give you the process id of the rails app (assuming you don’t have another ruby app running). Note: if pgrep is not available on your machine try using the command:
top
and look for the id of a process called ‘ruby’.
Now kill that process using the command:
kill -9 [id]
Where [id] is the process id given by pgrep.
Update:
It seems kill -9 may be jumping the gun and perhaps you ought to be safe and follow the advice I found elsewhere.
I’ll reiterate his point here. After finding the process id using prgep issue the following commands waiting five seconds before trying the next one until the kill succeeds:
kill pid
kill pid
kill -INT [id]
kill -INT [id]
kill -KILL [id]
kill -KILL [id]
Notice that -KILL is the same as -9 .
Tags: command line, daemon, kill, pgrep, ruby, ruby on rails, server, shell, terminal, top, webrick
I was a bit surprised and chagrined at how hard it was for me to find out how to stop WEBrick server on the Net — I finally a found clear, no nonsense ‘how-to’ on your site (http://www.alecjacobson.com/weblog/?p=28).
Kudos and thanks!
-Bryce
Thanks for the comment! I was surprised when I went looking too. Hopefully more people will find this and figure it out.
Thank you! Like the two before me, I was surprised at how hard it was to find info on this. Your solution was straightforward, fast, and correct.
Thanks! To sum up, WEBrick ignores the usual SIGTERM, but does shut down cleanly on SIGINT.
Worked like a charm, tks