Это то, что у меня есть. Этот сценарий будет запускаться на узле сетевых служб, который выполняет такие действия, как DHCP и т. Д., И в этом случае он должен активировать и спать компьютеры для резервного копирования.
#!/bin/bash
## This script exists to wake up the Digital Audio Workstation (DAW) and the NAS on which its session files and other data exists so that the DAW may run its own rsync localbackup script.
## The script pauses between WOL packets because we want to give the NAS time to wake up so that the DAW can mount one of it's shares when it wakes up.
## This script also shuts down the hosts if the condition is met that no human users are logged into the DAW.
## This script is called daily by cron in <cite path and name of cron file here>
## wake the hosts
etherwake -b -i eth0 11:22:33:44:55:66
sleep 10m
etherwake -b -i eth0 22:33:44:55:66:77
## wait for 15 minutes for the backup to complete then check rsync is nolonger running and shutdown the hosts if no users are logged in
sleep 15m
while [ tail rsync on remote host (DAW) for exit code 0 ] && [ -n "$(who)" ] ;do
sleep 1m
done
<send shutdown signal to remote host>
Тестирование отсутствия пользователей при подключении через SSH никогда не будет указывать на отсутствие пользователей, потому что вы вошли в систему при запуске. Более простым решением было бы завершить работу в том же скрипте, который выполняет rsync. Добавляем в конец что-то вроде:
while true; do
[ -z "$(who)" ] && /sbin/poweroff
done
Если машину не нужно включать, когда никто не вошел в систему, просто всегда выключайте ее после резервного копирования. Если вы не хотите, чтобы он выключался в течение дня, чтобы люди не тратили время на его загрузку, проверьте время с датой:
while true; do
[ -z "$(who)" ] && [ "$(date +%k)" -lt 5 ] && /sbin/poweroff
done
В +%k
опция для даты возвращает текущий час от 0 до 24. Приведенный выше пример будет отключен, если резервное копирование завершится между 12:00 и 5:00.