5 ms·
How not to test that mysqld is alive
- blasdel 17y agoUnmentioned is that there could easily be other 'mysqld' processes running on your box, even without someone screwing with you -- a lot of commercial apps bundle their own copy, even on the desktop (like Acrobat 8 Pro).
- bprater 17y agoSounds very hacktastical to count the entries as a way to know if the service is alive. If I found someone doing this on one of my production database machines, I think I'd have to dig out the paintball gun and start chasing them around, especially if the person run around with the title of sysadmin. (I'd cut a slight bit of slack if they were a webdev.)
- axod 17y agoI wonder why they didn't try the command a few times first from the shell. Anyone who's ever done 'ps | grep' will have noticed that the grep sometimes appears, sometimes doesn't. Course you could do 'ps | grep | grep -v grep'
- deleted 17y ago[deleted]
- radu_floricica 17y agoIf it restarted every few hours and the test executed once a minute, then the bug would appear only once in a hundred executions. It's a good post, I think I could have made the same mistake easily.
- axod 17y agoIt takes me about 10 runs to get a line of output without the grep. Sometimes less. Try it :) EDIT: test.sh: for i in {1..1000} do ps | grep grep | wc -l done ./test.sh | sort | uniq -c 13 0 987 1 Which would indeed suggest 1.3%. Likely dependent on how quickly you're running it, if it's in memory already etc etc
- Afton 17y agoI'd never noticed it. I worked in a unix shell for a while, but I used to use ps piped to grep. But I suspect I often used 'grep -v' to filter the output anyway when I really needed just the non-grep lines.
- KC8ZKF 17y ago'ps ax | grep [m]ysqld' (The regex '[f]oo' will match 'foo' but not itself.)
- kree10 17y agoThat's one of my favorite shell techniques. Still, I think they're doing it wrong. For keeping daemons alive I rely on http://cr.yp.to/daemontools.html http://cr.yp.to/daemontools.html .
- jrockway 17y agoThis is the correct answer -- when you fork the process yourself, you don't have to guess about it dying, you get SIGCHLD and can handle it accordingly. If you use daemontools, this code is already written for you.
- trapper 17y agoCan you use daemontools to monitor/kill/restart processes that run out of memory but don't exit?
- deleted 17y ago[deleted]
- CrLf 17y agoWell, but why does that work? Doesn't it rely on the opposite outcome of the race condition mentioned in the article?
- deleted 17y ago[deleted]
- monological 17y agoYou should check out monit ( http://mmonit.com/monit/ http://mmonit.com/monit/ ). It does, as the name implies, monitoring of processes.
- aston 17y agoHad they just run /etc/init.d/mysql start instead of "restart," their script would have worked fine. The spurious starts when mysqld was already started would have been ignored.
- deleted 17y ago[deleted]
- collinvandyck 17y agoInformative. I wasn't aware of the fact that all of the processes would be started simultaneously, but in retrospect it makes sense.
- lallysingh 17y agoWhile the future is uncertain re: Oracle, Solaris's SMF takes care of this problem automatically.
- brianr 17y agoAnd best way, that will set your mind at ease even if you’re worried that “mysql is running but not responding; it is stuck”: connect to MySQL and issue SELECT 1, SELECT NOW(), SELECT something. Fortunately this is easy: $ echo "select now();" | mysql now() 2009-10-05 19:24:22
- WalkingDead 17y agoUse "mysqladmin" run: mysqladmin ping output: mysqld is alive
- akirk 17y agoThe pgrep command mentioned in the article was new to me and does the job with a single program. Had it on my debian preinstalled. http://en.wikipedia.org/wiki/Pgrep http://en.wikipedia.org/wiki/Pgrep