Como desligar o computador após a conclusão de uma tarefa?

21

Eu geralmente começo um download antes de ir para a escola.
Qual comando devo usar para fazer automaticamente as salvaguardas necessárias e desligar o computador depois que uma tarefa específica tiver sido concluída?
(Diga, depois de instalar as atualizações, ou depois de baixar um arquivo grande.)

Também tenho postado em askubuntu .

    
por El Burro 30.11.2010 / 15:35

5 respostas

24

Depende de você começar a tarefa. Se for alguma ferramenta de linha de comando, você pode simplesmente executar halt ou shutdown -h now :

  1. wget http://..../somelargefile; halt - halt será executado após wget

  2. wget http://..../somelargefile && halt - halt será executado se wget não retornar erros

  3. wget http://..../somelargefile || halt - halt será executado se wget retornar erros

Alternativa para isso é usar kshutdown - neste aplicativo você pode especificar qual ação deve ser feita (reboot / shutdown / hibernate / etc ou execução de comando) e quando (após algum tempo ou quando outro aplicativo sair). Se você quiser usar essa ferramenta, precisará escolher o processo correto - alguns utilitários de atualização iniciam alguns subprocessos.

    
por 30.11.2010 / 15:54
13

Todo processo tem um diretório nomeado de acordo com seu ID de processo (pid) no sistema de arquivos proc . Portanto, você pode aguardar a finalização de um processo específico verificando se seu diretório existe repetidamente.

Você pode usar isto para executar um desligamento do sistema após o término do processo como este (substitua o 2296 pelo pid para esperar):

su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'

Vantagens:

  • Você pode decidir se deseja ou não desligar depois de configurar o comando shell
  • O desligamento é emitido como root, o comando para aguardar não é necessariamente feito como raiz (não é necessário solucionar o prompt tardio sudo -password).

Desvantagens:

  • Pode acontecer de o seu processo terminar e o SO voltar a utilizar o mesmo pid para um processo recém-gerado dentro desse segundo (condição de corrida). Assim, você continuará aguardando que o novo processo termine.
por 17.02.2013 / 09:21
3

Você pode usar os operadores && e || para encadear comandos juntos. Por exemplo:

apt-get update && sleep 2 && init 0

que executará uma atualização para o sistema usando o aptitude, esperará 2 segundos e irá para o runlevel 0, dependendo do seu sistema, isso pode ou não desligar o hardware.

Para falar com uma ou mais operações após uma operação mais arbitrária, como um navegador da Web, presumivelmente, o download exigiria lógica adicional para assistir ao arquivo de download para verificar se o download foi concluído, no entanto, a lógica da shell é inalterado.

    
por 30.11.2010 / 15:51
3

Se você deseja monitorar um processo já iniciado, faça isso em uma :

# while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now
    
por 17.02.2013 / 23:34
1

Existe um aplicativo chamado sentinela que pode fazer isso para você com sua GUI:

para instalá-lo:

sudo aptitude update
sudo aptitude install sentinella
    
por 29.12.2013 / 11:57