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

25

Normalmente, começo um download antes de ir para a escola.
Qual comando devo usar para fazer automaticamente os salvamentos necessários e desligar o computador após a conclusão de uma tarefa específica?
(Diga, depois de instalar as atualizações ou depois de baixar um arquivo grande.)

Também tenho postado no askubuntu .

El Burro
fonte

Respostas:

25

Depende da tarefa iniciada. Se é alguma ferramenta de linha de comando, você pode simplesmente executar haltou shutdown -h now:

  1. wget http://..../somelargefile; halt- haltserá executado apóswget

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

  3. wget http://..../somelargefile || halt- haltserá executado se wgetretornar erros

Alternativa para isso é usar kshutdown- neste aplicativo, você pode especificar que ação deve ser executada (reinicialização / desligamento / hibernação / etc ou execução de comando) e quando (depois de algum tempo ou quando outro aplicativo sair). Se você quiser usar esta ferramenta, precisará escolher o processo correto - alguns utilitários de atualização iniciam alguns subprocessos.

KShutdown

pbm
fonte
4
Você também pode dar shutdownum tempo para esperar; não é necessário usar o kshutdown para esse fim.
Cascabel
11
Não, mas shutdownnão há como esperar por um evento real.
Shadur 31/10
18

Todo processo possui um diretório nomeado de acordo com sua identificação de processo (pid) no procsistema de arquivos. Portanto, você pode aguardar o término de um processo específico, verificando se o diretório existe repetidamente.

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

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

Vantagens:

  • Você pode decidir se deseja ou não encerrar após ativar o comando shell
  • O desligamento é emitido como raiz, o comando a aguardar não é necessariamente feito como raiz (não é necessário solucionar o sudoprompt de atraso da senha).

Desvantagens:

  • Pode acontecer que seu processo seja encerrado e o SO reutilize o mesmo pid para um processo recém-gerado dentro desse segundo (condição de corrida). Assim, você continuaria aguardando o término do novo processo.
moooeeeep
fonte
2
Ponto principal: Isso funciona mesmo que o processo tenha começado.
Heisenberg
Se você iniciou algo a partir de um terminal que ainda está aberto psno mesmo terminal, deverá ajudá-lo a identificar o PID do CMD. Se o processo foi / é em outro pipping terminal de saída ps para tudo através de grep para filtrar para o seu comando deve ajudá-lo a encontrá-lops -elf | grep <command_related_word>
Taft
Melhor verificar a minha resposta com base em pgrepaka grep processo ...
Gilles Quenot
Como posso colocar esse comando em segundo plano?
DerWeh 03/09
11
@DerWeh Envolva-o em um script de shell e siga as etapas fornecidas aqui: stackoverflow.com/q/625409/1025391
moooeeeep
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 no sistema usando o aptitude, aguarde 2 segundos e vá para o nível de execução 0, dependendo do seu sistema, isso pode ou não realmente 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 requer uma lógica adicional para assistir ao arquivo de download e verificar se o download foi realmente concluído, no entanto, a lógica do shell não mudou.

Tok
fonte
3

Se você deseja monitorar um processo já iniciado, você pode fazer isso em um :

# while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now
Gilles Quenot
fonte
1

Há um aplicativo chamado sentinella que pode fazer isso por você com sua GUI: sentinela

para instalá-lo:

sudo aptitude update
sudo aptitude install sentinella
shgnInc
fonte