シェルスクリプトでホスト名を要求していますか?

シェルスクリプトでホスト名を要求していますか?

特定のMacアレイのpingがオンラインかどうかを尋ねるスクリプトがあります。

#!/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

問題は、コンピュータの1つのホスト名を解決できないとスクリプトが停止することです(はい、これはかなり頻繁に発生し、理由について詳しく説明したくありません)。ホスト名は確かに正しいので、お知らせしたいと思います。まず、検索するスクリプトのホスト名を解決できる場合は復元されます。それ以外の場合は、この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ループと条件文を使用して追加することが役に立ちます。だから、解決が可能な場合はさまざまなオプションがありますが、前述のように問題はスクリプトパートナーではありません。頑張ってください。

おすすめ記事