プロセスがポートでリッスンしていることを確認するためにスクリプトでチェックを実行しようとしています。
を使ってみましたが、ss
式が一致しなくても常に終了コードでゼロを生成するようです。
このホストには、一致し、終了コード0を持つポート53でリッスンするサービスがあります。
$ ss -ntl sport = :53 ; echo $?
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 127.0.1.1:53 *:*
LISTEN 0 5 127.0.0.1:53 *:*
LISTEN 0 5 ::1:53 :::*
0
ポートを54に変更すると(何も聞かずに)、終了コードは常に0のままになります。
$ss -ntl sport = :54 ; echo $?
State Recv-Q Send-Q Local Address:Port Peer Address:Port
0
マニュアルを確認しましたが、終了コードに関する内容はありません。
私が何か間違っているのか、それともこの動作が正しいのでしょうか?
Ubuntu 16.04とCentos 7でテストされました。
答え1
この動作は通常の動作であり、ss
フィルタが一致するかどうかを示すために終了コードを変更しません。
結果をテストするには、ss
他のツールを使用して後処理する必要があります。例えば grep
(一致によって終了コードが変わります):
ss -ntl sport = :53 | grep -q :53; echo $?