Primeiramente, para obter o script para mostrar o nome da máquina duas coisas:
a) Altere a maneira de executar remotamente o script para executá-lo diretamente no host remoto. Isso requer que você copie o script para a máquina remota. Eu gosto de armazenar meus scripts de utilitário pessoal em um diretório chamado "do" no meu diretório home, então eu teria como ~/do/ShutdownUPTIME.sh
Agora altere a linha que mostra ssh admusr@"${n}" 'sudo bash -s' < ./documents/ShutdownUPTIME.sh
para isso:
ssh admusr@"${n}" sudo do/ShutdownUPTIME.sh $n
Basicamente você está passando $ n, o nome da máquina, para ele como parâmetro.
b) Em seguida, altere o script ShutdownUPTIME.sh para usar o argumento passado. Onde você tem Mac
put $MACNAME
. Perto do início do script, adicione a linha MACNAME=$1
O script agora ficará assim:
#!/bin/bash
MACNAME=$1
BOOT_TIME=$(sysctl -n kern.boottime | sed -e 's/.* sec = \([0-9]*\).*//')
CURR_TIME=$(date +%s)
MAX_UPDAYS=1 #Days
DAYS_UP=$(( ( $CURR_TIME - $BOOT_TIME) / 86400 ))
if [ $DAYS_UP -ge ${MAX_UPDAYS} ];then
echo Notice: $MACNAME is going to shutdown
sudo shutdown -h now
else
echo Info: No shutdown for $MACNAME needed
fi
Eu também adicionei "Notice" e "Info" aos comandos de saída para dar a eles algum nível de importância - isso ajuda na filtragem posterior do log.
Para bônus, faça o script lidar com a situação em que você não forneceu um nome Mac por ter um valor padrão. Por exemplo, a atribuição do valor MACNAME se torna
MACNAME=${1:-$(hostname)}
Sobre o registro: O Cron enviará um e-mail com a saída de cada trabalho, mas isso pode ser muito inconveniente. A solução mais simples é redirecionar a saída dos comandos para um arquivo de log local.
Para isso basta adicionar o redirecionamento na linha "done" do loop, para que ele se torne
done | tee -a $LOGFILE 2>&1
E isso, é claro, requer que você configure um nome na variável LOGFILE anteriormente no script, então adicione uma linha como esta perto do início:
LOGFILE=/var/log/refreshing.log
(Nota: Especifique um caminho para um arquivo que você tem permissão para gravar)
Além disso, você pode adicionar regularmente um registro de data e hora a este registro, portanto, antes de o loop adicionar a linha,% echo Running Refresh at $(date) | tee -a $LOGILFE
Registrar a saída do comando cron significa que seu registro ocorre apenas quando o script é executado a partir do cron. Fazer o script gerenciar seu próprio registro é, portanto, preferido. Eu mudei o script para usar tee
em vez de redirecionamento para que quando você executá-lo na linha de comando você ainda pode ver a saída.