1

В настоящее время я использую задание cron, которое каждый вечер запускает скрипт резервного копирования для резервного копирования моих документов на сетевой компьютер по ssh с использованием rsync. Содержимое моего резервного скрипта:

#! /bin/bash
rsync -vaz --progress -s -e "ssh" /store/Documents user@server:/home/user/Backup

и мой crontab:

0 20 * * * /home/user/backup.sh > /home/user/backup.log

Очевидно, это будет работать только тогда, когда я подключен к своей домашней сети, и сетевой компьютер доступен. Я хотел бы отредактировать свой скрипт или задание cron, чтобы оно выполнялось только при подключении к моей домашней сети. Как бы я поступил так?

Запуск Ubuntu Mate 16.04.2.

Любая помощь высоко ценится.

2 ответа2

1

Для идентификации вашей сети вы можете определить MAC-адрес вашего шлюза:

Код Bash для этого:

function gatewayMAC {
    gatewayIP=$(route -n | grep -e '^0\.0\.0\.0' | tr -s ' ' | cut -d ' ' -f 2)

    if [[ ! -z "$gatewayIP" ]]
    then
        # Identify the gateway by its MAC (uniqueness...)
        gatewayData=($(arp -n $gatewayIP | grep -e $gatewayIP | tr -s ' '))
        if [[ "${gatewayData[1]}" == "(incomplete)" ]]
        then
            echo ""
        elif [[ "${gatewayData[2]}" == "--" ]]
        then 
            echo ""
        else
            echo "${gatewayData[2]}"
        fi
    fi
}
1

Я использую простую функцию, подобную этой, чтобы проверить доступность моего NAS:

function whereamI {

# Can we reach the NAS from our LAN?

/bin/ping -c1 $1 &> /dev/null

if [ ! $? == 0 ]; then
        return 1
fi

# double-check

/usr/bin/nslookup $1 | grep -i $2 &> /dev/null
if [ ! $? == 0 ]; then
        return 1
fi

return 0

}

а потом:

whereamI TheIPOfMyNAS  TheNameOfMyNAS
if [ ! $? == 0 ]; then
      exit 1
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .