저는 컴퓨터의 안정성을 테스트하고 있으며 호스트가 온라인인지 확인하기 위해 Bash 스크립트를 작성하는 간단한 방법이 필요합니다. 이 스크립트를 어떻게 작성해야 하나요?
if [ ! $(hostisonline) ]; then
# profit
fi
답변1
호스트가 ping에 응답하면 온라인 상태인지 테스트합니다(단순한 예).
ping -c 10 $host
ping이 반환되지 않거나 금지된 경우 nmap을 통해 개별 서비스를 확인합니다.
nmap $host -p $known_port --max-retries 10 | grep -q open
예를 들어 SSH를 열어야 하는지 테스트하려면 Known_port를 22로 바꾸세요.
스크립트의 경우 다음과 같을 수 있습니다(예 - 일요일 아침이었고 지루했기 때문에 일부 편집 후 약간 커졌습니다. 하나가 아닌 여러 호스트를 테스트하도록 설계되었습니다).
declare -A SERVER
# SERVER["NAME - Description"]="IP KNOWNPORT"
SERVER["SERVER1 - Client foo"]="111.111.111.111 22"
SERVER["SERVER2 - Client bar"]="222.222.222.222 80"
# ...
# add as many server/port combinations as you'd like
NMAP_MAX_RETRIES=10
printf "========================= ========================= ========== ==========\n"
printf "%25s %25s %10s %10s\n" "Host Description" "IP" "Port" "Status"
printf "========================= ========================= ========== ==========\n"
for server in "${!SERVER[@]}"; do
set -- ${SERVER["$server"]}
eval nmap \$1 -p \$2 --max-retries $NMAP_MAX_RETRIES | grep -q open
if [ "$?" == "0" ]; then
STATUS="[OK]"
else
STATUS="*DOWN*"
fi
printf "%25s %25s %10s %10s\n" "$server" "$1" "$2" "$STATUS"
done
printf "========================= ========================= ========== ==========\n"
실행되면 다음이 반환됩니다(가짜 IP이므로 서버가 다운됨).
~$ bash /tmp/foo.sh
========================= ========================= ========== ==========
Host Description IP Port Status
========================= ========================= ========== ==========
SERVER2 - Client bar 222.222.222.222 80 *DOWN*
SERVER1 - Client foo 111.111.111.111 22 *DOWN*
========================= ========================= ========== ==========
답변2
간단한 해결책은 다음과 같습니다.
ping -W 1 $ip
여기서 -W
시간 초과를 초 단위로 지정합니다.
대문자 W인지 확인하세요. -i
대기 시간을 초 단위로 지정할 수도 있습니다 .