I use the telnet command to check if MySQL port is responding.

telnet 10.10.10.24 3306

I use the ctrl character to disconnect. This is working as expected. How do I use this command in shell script?

link|improve this question

Actually, do the echo with newlines as Janne propose, and add a sane timeout value with -w. – 3molo Aug 5 '11 at 9:34
feedback

5 Answers

up vote 8 down vote accepted

If you're just looking to check if the port is open, try:

$ nc -zv 10.10.10.24 3306
Connection to localhost 3306 port [tcp/mysql] succeeded!

nc will return 0 if the port is open and 1 if it is not. This is quite helpful for scripting as well. Omit the v switch to keep it quiet:

if ! nc -z 10.10.10.24 3306
then
    do_something
fi
link|improve this answer
Thanks. But the -z switch is working on server but not working on another. Do I need to check the version of nc command? – shantanuo Aug 6 '11 at 4:41
Perhaps. What version is the one not working? – Cakemox Aug 6 '11 at 4:46
The -z switch is working correctly. I was wrong, ignore the above comment. – shantanuo Aug 7 '11 at 4:51
feedback

nc is much better for non-interactive usage. Try something like

echo -e "\n\n" | nc 10.10.10.24 3306
link|improve this answer
If I execute this, I get some garbled output, but the command doesn't exit. Does someone know why? – Legate Aug 5 '11 at 18:09
Hmmm? It should exit. – Janne Pikkarainen Aug 6 '11 at 5:08
feedback

To automate telnet script, you should use expect. See the expect home page.

link|improve this answer
feedback

If you don't have nc, you can use bash special files redirectons:

head -1 < /dev/tcp/10.10.10.24/3306 >/dev/null && echo MySQL is on || echo MySQL is off
link|improve this answer
feedback

I would use netcat and it's '-w' instead;

host:~ user$  nc -w 1 1.2.6.1 3306
?
5.1.57-1~dotdeb.1?WO`rA*L#h?b4z.pmT;i~^;host:~ user$ 
link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.