Como reiniciar automaticamente depois de executar um comando

2

Estou instalando atualizações em várias máquinas e simplesmente quero executar:

sudo apt-get update
sudo apt-get upgrade
sudo reboot

tudo de uma vez em todas as máquinas (depois de horas de curso) e deixá-los rodar sem precisar da minha entrada para senhas. No entanto, os comandos acima não funcionam, porque todos eles exigem permissão de root e, portanto, exigem minha senha toda vez. A execução de todos eles sob um único sudo concatenado por && parece não funcionar. Além disso, se uma atualização tiver notas de lançamento, ela exibirá todas as notas de versão e será interrompida até eu sair do less .

Como faço isso?

    
por Cerin 07.01.2015 / 23:37

3 respostas

5

sudo -s solicitará sua senha uma vez e, em seguida, deixará você sentado em um shell raiz que permanecerá até você exit . Lá você pode encadear comandos como apt-get update && apt-get upgrade -y && reboot .

    
por psusi 08.01.2015 / 01:18
3

Então você não quer que seu usuário tenha que digitar uma senha para usar o sudo? Você pode adicionar uma linha como essa em /etc/sudoers ou um arquivo em /etc/sudoers.d/

username  ALL=(ALL) NOPASSWD: ALL

Ou apenas permitir alguns programas como reboot e apt-get :

username ALL=(ALL) NOPASSWD: /sbin/reboot, /usr/bin/apt-get

Pode querer ver também algumas opções apt-get como:

   -q, --quiet
       Quiet; produces output suitable for logging, omitting progress
       indicators. More q's will produce more quiet up to a maximum of 2.
       You can also use -q=# to set the quiet level, overriding the
       configuration file. Note that quiet level 2 implies -y; you should
       never use -qq without a no-action modifier such as -d, --print-uris
       or -s as APT may decide to do something you did not expect.
       Configuration Item: quiet.

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts and
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

   --force-yes
       Force yes; this is a dangerous option that will cause apt to
       continue without prompting if it is doing something potentially
       harmful. It should not be used except in very special situations.
       Using force-yes can potentially destroy your system! Configuration
       Item: APT::Get::force-yes.

Ou você poderia canalizar cegamente algumas novas linhas ou "q" para apt-get , eu costumava instalar um pacote que ignoraria as opções apt como -y e esperar por uma tecla pressionada (provavelmente em seu prefixo ou script postinst). Poderia tentar algo como:

{
sleep 20
echo
echo "q"
} | apt-get upgrade

E se você está instalando exatamente os mesmos pacotes em todas as máquinas, você não precisa update e upgrade de cada um pela internet, você pode baixar todos os arquivos .deb necessários uma vez com:

sudo apt-get install --download-only [packages]

ou

sudo apt-get upgrade --download-only

em seguida, instale todos eles de uma pasta local / compartilhada com

sudo dpkg -iR /folder_of_debs

    
por Xen2050 08.01.2015 / 00:33
0

A solução mais simples se você for 'root' é

apt-get -y update && apt-get -y upgrade && reboot

E se você for um usuário no sistema, primeiro verifique se o usuário está ativado nos sudoers e digite:

sudo apt-get -y update && apt-get -y upgrade && reboot
    
por protld 21.06.2016 / 20:43