Script de atualização automática usando Cron, códigos de saída e registro em log

3

Estou gerenciando várias máquinas com Debian, Raspian e Mint. Em algumas das máquinas, quero atualizar e atualizar automaticamente. Eu desenhei um script que eu quero fazer isso e log se a atualização for bem sucedida ou não.

#!/bin/bash

captains_log=/home/jason/mission_control/captains.log

apt-get update;
if [ $? == 0 ]; then
    apt-get upgrade -y;
    if [ $? == 1 ]; then
        echo 'date'": Daily update failed" >> $captains_log
    else
        echo 'date'": Daily update successful" >> $captains_log
    fi
else
    echo 'date'": Daily update failed" >> $captains_log
fi

Eu configurei o script para executar @daily em uma raiz crontab . Eu corro o comando manualmente e ele executa como desejado. Quando cron executa o script, obtenho sucesso no log, mas meu software não está sendo atualizado.

Alguém pode me dizer onde estou errado?

    
por jason 31.05.2013 / 22:54

2 respostas

4

A maneira recomendada de fazer isso é usar o comando unattended-upgrades . Configurá-lo é simples:

apt-get install unattended-upgrades
dpkg-reconfigure unattended-upgrades

Isso é tudo o que você precisa para obter os resultados do que você pretende em seu script cron. Não há necessidade de reinventar a roda.

No que diz respeito ao seu script e ao seu relatório de sucesso, qualquer código de retorno diferente de zero é considerado uma falha. Seu script considera que qualquer não-1 é um sucesso. Não há necessidade de verificar os códigos de saída manualmente, isso é o que o if faz.

if apt-get upgrade -y; then
    echo "$(date): Daily update successful" >> $captains_log
else
    echo "$(date): Daily update failed" >> $captains_log
fi

Quando o shell tem um "comando não encontrado", um código de saída de 127 é retornado.

    
por 01.06.2013 / 00:05
0

É apt-get no crons shell-searchpath?

É sempre uma boa prática usar o caminho completo para comandos externos em tarefas do cron.

    
por 31.05.2013 / 23:03

Tags