作者chang0206 (Eric Chang)
看板Linux
标题[问题] scipt内用eval无法执行特定指令
时间Thu May 30 10:55:44 2019
我想写一个script 侦测某台机器的5432 port
搭配 keepalived 使用
指令长这样
</dev/tcp/127.0.0.1/80
对,就这样而已,如果直接在shell 底下执行,正常的话就不会有输出
但是我直接加到 keepalived.conf 里面,会说找不到这指令
Script </dev/tcp/192.168.11.34/5432 cannot be accessed - No such file or directory
所以我想说用script 来跑
script 也很简单,就是跑上面那行指令
#!/bin/sh
COMMAND="</dev/tcp/127.0.0.1/80"
echo "$COMMAND"
eval "</dev/tcp/127.0.0.1/80"
执行结果
/tmp/check_psql.sh
</dev/tcp/127.0.0.1/80
/tmp/check_psql.sh: 1: eval: cannot open /dev/tcp/127.0.0.1/80: No such file
指令格式应该没有错,可是eval 少了一个 "<" 所以我改了一下,加入escape "\"
变成这样
/tmp/check_psql.sh
</dev/tcp/127.0.0.1/80
/tmp/check_psql.sh: 1: eval: </dev/tcp/127.0.0.1/80: not found
所以指令格式正确了,可是还是没办法顺利执行
不晓得该怎麽修正呢?
或者是有其他指令可以侦测特定port 是否活着?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.85.234.104
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1559184946.A.5F8.html
1F:推 Bencrie: nc -z 127.0.0.1 80 05/30 11:08
2F:→ chang0206: 我用nc测过 不管port有没有开,都没回传错误 05/30 11:13
3F:推 Bencrie: 然後他是说找不到档案吧,加 escape 才是错的 05/30 11:15
4F:→ chang0206: 啊,刚刚看了一下 回传的数值似乎会不同 05/30 11:15
5F:→ Bencrie: 你有抓 error code 出来看吗? 05/30 11:16
7F:推 Bencrie: 如果你要看那个 node 是否存在直接用 [ -c 不是比较简单 05/30 11:19
8F:→ Bencrie: 我在 debian 上是没 /dev/tcp 这个资料夹啦 05/30 11:19
9F:→ Bencrie: 不确定它是 c 还是 b 05/30 11:19
10F:→ Bencrie: 或者用 ss -tl | awk '{print $4}' | grep -q :5432 05/30 11:22
11F:推 Jerr: bash才可以, sh不行 05/30 11:26
12F:推 lantw44: /dev/tcp 是 bash 内建的特殊功能,系统上不需要真的存在 05/30 16:38
13F:→ lantw44: 这个资料夹。也因为它可能不存在,所以同样的指令拿去其 05/30 16:39
14F:→ lantw44: 他 shell 很可能就不会动。 05/30 16:39
15F:推 dou0228: 搞错方向,keepalived 可以直接侦测 HTTP Protocol 05/30 16:46
16F:→ dou0228: 不想用 keepalived 测试,也可以用 curl + exit code 05/30 16:46
17F:→ chang0206: 嗯,今天都在读文件 tcp_check 似乎可以玩玩看 05/30 17:41