Por que meu script bash não funciona com o cron?

4

Eu criei um script bash para atualizar automaticamente o meu servidor Ubuntu. Aqui está o script:

#!/bin/bash

apt-get update
apt-get upgrade
echo "Update am $(date "+%d. %m. %y|%H:%M:%S) >> /var/log/update.log
exit 0

O arquivo de log está sempre vazio. crontab:

0 3 * * * /drives/files/scripts/update.sh

Eu sei, que eu posso definir, que o Ubuntu Server atualize automaticamente nas configurações, mas isso é para aprender sobre cron e um pouco de script.

Obrigado

    
por ssd_rider 12.05.2015 / 07:17

2 respostas

1

Suponho que você esteja usando o crontab com um usuário normal, o que significa que ele não pode atualizar / atualizar um sistema sem fornecer um sudo.

Além disso, apt-get update e apt-get upgrade solicitarão ao usuário a confirmação, portanto você deve passar essa confirmação antes.

yes | apt-get update
yes | apt-get upgrade

Então, para resolvê-lo, você precisa executar seus comandos com o sudo, mas isso colocará um problema em como fornecer a senha para o sudo.

Além disso

echo  "Update am "$(date "+%Y-%m-%d %H:%M:%S") >> /var/log/update.log

está escrevendo em / var / log / ... o que significa que precisa de permissão para fazer aquilo que não é baseado em um usuário normal.

Para resolver isso, você deve executar seu script no cron do root.

sudo crontab -e

irá abrir o arquivo cron root no seu editor padrão.

Adicione a entrada do seu script

0 3 * * * /drives/files/scripts/update.sh

Agora salve e saia.

PS : apenas no caso, certifique-se de dar permissão de execução para o seu script. para fazer isso, execute o comando:

chmod +x /path-to-script
    
por Maythux 12.05.2015 / 07:34
0

Por que não está funcionando?

Para fazer apt-get update e apt-get upgrade você deve se tornar um usuário sudo. Quero dizer, seu script deve ser executado com privilégios de sudo.

Quaisquer outras paragens?

Sim, você não está fazendo com que -y permita que o comando de atualização seja baixado automaticamente após a atualização.

É importante?

Sim, se você não passar -y junto com o comando, seu cron irá parar e procurar por argumentos '-y' e ele não executará até obter '-y'

Como executar o script cron como usuário root?

sudo crontab -e

Ele pedirá que você escolha o editor e escolha nano e adicione sua linha. Mas script completo deve ser isso

apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y

Espero que ajude.

    
por Ten-Coin 12.05.2015 / 07:37