쉘 스크립트에서 호스트 이름을 묻는 중입니까?

쉘 스크립트에서 호스트 이름을 묻는 중입니까?

특정 Mac 어레이의 핑이 온라인인지 묻는 스크립트가 있습니다.

#!/bin/bash

#Array of Mac hostnames separated by spaces
my_macs=( Mac111 Mac121 Mac122 Mac123 Mac124 Mac125 Mac126 Mac127 Mac128 Mac129 )

# Number of days the remote Mac is allowed to be up
MAX_UPDAYS=7

CURR_TIME=$(date +%s)
MAX_UPTIME=$(( MAX_UPDAYS * 86400 ))
ADMINUSER="admusr"

#Steps through each hostname and issues SSH command to that host
#Loops through the elements of the Array

echo "Remote shutdown check started at $(date)"
for MAC in "${my_macs[@]}"
do
    echo -n "Checking ${MAC}... "
    # -q quiet
    # -c nb of pings to perform

    if ping -q -c3 "${MAC}" >/dev/null; then
        echo "is up. Getting boot time... "

        BOOT_TIME=0
        # Get time of boot from remote Mac
        BOOT_TIME=$(ssh "${ADMINUSER}@${MAC}" sysctl -n kern.boottime | sed -e 's/.* sec = \([0-9]*\).*/\1/')

        if [ "$BOOT_TIME" -gt 0 ] && [ $(( CURR_TIME - BOOT_TIME )) -ge $MAX_UPTIME ]; then
            echo "${MAC} uptime is beyond MAX_UPDAYS limit.  Sending shutdown command"
            ssh "${ADMINUSER}@${MAC}" 'sudo /sbin/shutdown -h now'
        else
            echo "${MAC} uptime is below limit.  Skipping shutdown."
        fi

    else
        echo "is down (ping failed)"
    fi
done

문제는 컴퓨터 중 하나의 호스트 이름을 확인할 수 없으면 스크립트가 중지된다는 것입니다(예, 이런 일은 꽤 자주 발생하며 이유에 대해 자세히 설명하고 싶지 않습니다). 호스트 이름이 확실히 정확하므로 알려드리고 싶습니다. 먼저 검색할 스크립트 호스트 이름을 확인할 수 있으면 복원됩니다. 그렇지 않으면 이 Mac에 대해 취소됩니다. 가능합니까?

답변1

라우터를 DHCP로 사용하는 대신 장치의 MAC 주소를 추가하여 라우터에 고정 개인 IP 주소를 설정해 보는 것은 어떨까요? 이렇게 하면 더 이상 호스트 이름에 오류가 발생하지 않도록 할 수 있습니다. 반면, /etc/hosts라우터에 호스트가 설정되어 있지 않거나 라우터가 다른 기능을 지원하지 않는 경우 라우터에 회선을 추가할 수 있습니다. 방법은 다음과 같습니다 /etc/hosts.

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1           localhost Mac1
255.255.255.255     broadcasthost Mac1
::1                 localhost Mac1
fe80::1%lo0         localhost Mac1
172.16.11.43        Mac2
172.16.11.43        Mac3
172.16.11.43        Mac4
172.16.11.43        Mac5
.
.
.

큰 문제는 아닙니다. 스크립트가 실패하는 이유는 스크립트나 Mac 장치가 아니라 네트워크 구성에 따라 다릅니다. 더 쉽게 스크립트를 작성할 수 있지만 괜찮습니다. 네트워크를 확인하고 서로를 찾을 수 있도록 정적으로 설정해 보세요.

실패하는 이유는 공용 고정 IP 주소를 사용하지 않기 때문입니다. 따라서 호스트 이름을 확인할 수 있도록 올바른 고정 개인 IP 주소가 설정되어 있는지 확인해야 합니다.


그런데 호스트 이름을 확인할 수 없는 경우에도 스크립트를 계속 진행하려면 continue루프와 조건문을 사용하고 추가하는 것이 도움이 될 수 있습니다. 그래서 해결이 가능하다면 다양한 옵션이 있지만 앞서 언급했듯이 문제는 스크립팅 파트너가 아닙니다. 행운을 빌어요.

관련 정보