GNU: Trabalhos atrasados Fila

4

Existe uma maneira simples de adicionar um comando shell a uma lista de trabalhos para executar no sistema quando não estou logado?

Por exemplo:

Eu faço SSH no meu sistema, decido que quero ler um ebook mais tarde, mas está no formato errado. Vou usar o Caliber para convertê-lo, mas isso vai ocupar a CPU por muitos minutos. Eu não estou com pressa, então eu gostaria de dizer ao meu sistema para iniciar a operação de conversão do Caliber (apenas executando um comando shell) assim que eu sair da minha sessão SSH. Então, mais tarde, quando eu voltar a SSH, meu livro convertido estará esperando por mim.

    
por themirror 09.08.2011 / 23:58

3 respostas

4

Um método simples, mas possivelmente inconveniente, é iniciar o comando com nohup para separá-lo do terminal, pouco antes sair.

nohup mycommand &
logout

Qualquer saída do comando é enviada para o arquivo nohup.out no diretório atual.

Geralmente, é mais conveniente executar o comando dentro da tela ou tmux Ambos os programas fornecem um terminal dentro de um terminal, e você pode desanexar sua sessão do terminal atual e reconectá-la posteriormente.

screen
# inside the screen session
sleep 60; mycommand
# press Ctrl+A D to detach from the session
# now back in the original shell
logout

Mais tarde:

screen -rd
# inside the screen session, you can see how your command is doing
…
exit

Outra possibilidade é agendar o trabalho para mais tarde. O comando at permite agendar um trabalho em um horário específico (é o pendente cron para tarefas agendadas regularmente). Se o comando produzir a saída, ele será enviado para você (supondo que você tenha um e-mail local em execução).

echo 'mycommand' | at 23:05
    
por 10.08.2011 / 00:24
3

Eu acabei de começar um screen (atualmente acessado como ' byobu ') ou tmux session. Faça suas coisas e inicie o processo e, em seguida, desconecte. O trabalho continuará a ser executado e, quando estiver pronto, você poderá reconectar e voltar à sessão. Eu tive sessões de tela em execução por meses, e elas podem ser pré-configuradas para que você

    
por 10.08.2011 / 00:12
0

Use o comando at para enviar uma tarefa em lote para processamento. Ele não vai esperar que você faça o logout antes de executá-lo, então quando você enviar o trabalho, certifique-se de que é nice ed.

    
por 10.08.2011 / 00:10