Re:How not to test that mysqld is alive
by jrockway on Monday October 05, 2009 @04:22PM
(#862687)
This 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.
Re:How not to test that mysqld is alive
by sjs on Monday October 05, 2009 @03:26PM
(#862547)
regex background: [abc] matches any of 'a', 'b', or 'c'. [m] matches only 'm'.
It works because the text to match is no longer included in the command line invoked to do the matching. Whether or not 'grep [m]ysqld' appears in the list produced by ps is irrelevant, as [m]ysqld does not match "m]ysqld". i.e. the 'm' matches, but then the match fails when it hits ']'.
tl;dr It's just a short way of matching "mysqld" without the matching pattern itself being "mysqld".
Re:How not to test that mysqld is alive
by bprater on Monday October 05, 2009 @02:27PM
(#862387)
Sounds 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.)
Re:How not to test that mysqld is alive
by radu_floricica on Monday October 05, 2009 @12:39PM
(#862101)
If 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.
Re:How not to test that mysqld is alive
by Afton on Monday October 05, 2009 @12:44PM
(#862110)
I'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.
Re:How not to test that mysqld is alive
by blasdel on Monday October 05, 2009 @02:18PM
(#862369)
Unmentioned 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).
Re:How not to test that mysqld is alive
by brianr on Monday October 05, 2009 @08:26PM
(#863201)
And 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
Still, I think they're doing it wrong. For keeping daemons alive I rely on http://cr.yp.to/daemontools.html .
If you use daemontools, this code is already written for you.
It works because the text to match is no longer included in the command line invoked to do the matching. Whether or not 'grep [m]ysqld' appears in the list produced by ps is irrelevant, as [m]ysqld does not match "m]ysqld". i.e. the 'm' matches, but then the match fails when it hits ']'.
tl;dr It's just a short way of matching "mysqld" without the matching pattern itself being "mysqld".
It's obvious now, that regexp does not match, for example, the "]".
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.)
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'
EDIT:
test.sh:
./test.sh | sort | uniq -c Which would indeed suggest 1.3%. Likely dependent on how quickly you're running it, if it's in memory already etc etcFortunately this is easy:
run: mysqladmin ping
output: mysqld is alive
http://en.wikipedia.org/wiki/Pgrep