scipt內用eval無法執行特定指令 - Linux

Table of Contents

我想寫一個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 是否活著?





--

All Comments

Yedda avatarYedda2019-06-03
nc -z 127.0.0.1 80
Rosalind avatarRosalind2019-06-07
我用nc測過 不管port有沒有開,都沒回傳錯誤
Noah avatarNoah2019-06-08
然後他是說找不到檔案吧,加 escape 才是錯的
Zanna avatarZanna2019-06-08
啊,剛剛看了一下 回傳的數值似乎會不同
Oscar avatarOscar2019-06-09
你有抓 error code 出來看嗎?
Emma avatarEmma2019-06-10
有 抓了 感謝你 http://i.imgur.com/UqypQxd.png
Faithe avatarFaithe2019-06-15
如果你要看那個 node 是否存在直接用 [ -c 不是比較簡單
我在 debian 上是沒 /dev/tcp 這個資料夾啦
不確定它是 c 還是 b
Skylar DavisLinda avatarSkylar DavisLinda2019-06-16
或者用 ss -tl | awk '{print $4}' | grep -q :5432
Lauren avatarLauren2019-06-20
bash才可以, sh不行
Catherine avatarCatherine2019-06-22
/dev/tcp 是 bash 內建的特殊功能,系統上不需要真的存在
Zanna avatarZanna2019-06-27
這個資料夾。也因為它可能不存在,所以同樣的指令拿去其
他 shell 很可能就不會動。
Tom avatarTom2019-07-01
搞錯方向,keepalived 可以直接偵測 HTTP Protocol
不想用 keepalived 測試,也可以用 curl + exit code
Tracy avatarTracy2019-07-05
嗯,今天都在讀文件 tcp_check 似乎可以玩玩看