Como posso criar um comando cron que irá executar um comando dentro de uma tela desanexada?

5

Eu criei uma tela, mas será que agora posso executar um comando que executará comandos na tela desanexada?

Eu nem sei se isso é possível, mas se for, provavelmente será algo simples e fácil para você.

Obrigado pelo seu esforço.

    
por Jorge Castro 28.11.2010 / 13:21

2 respostas

3

Observação: o pôster original perguntou "como posso fazer isso no cron". Atualizei a resposta para resolver isso.

  • Obtenha o script 'inscrever-se' e coloque-o em ~/bin/ :

    # download 'inscreen' script from https://gist.github.com/1019125
    wget -O ~/bin/inscreen https://gist.github.com/gists/1019125/download
    chmod 755 ~/bin/inscreen
    
  • crie uma sessão de tela chamada 'cronjobs':

    screen -d -m -S cronjobs

    Você terá que providenciar para que isso aconteça em cada inicialização, ou adicione '--new-if-needed' a cada entrada do crontab abaixo.

  • Adicione entradas no cron usando inscreen , o crontab se parece com:

    PATH = /home/YOURNAME/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
    * * * * * inscreen cronjobs -- sh -c 'echo $(date): start; sleep 30; echo $(date): end; sleep 4'
    0 0 * * 0 inscreen cronjobs --keep-open --title reminder echo ==== CALL YOUR MOM ====
    0 0 * * 1 inscreen cronjobs --window 0 ls /tmp
    

O texto acima irá:

  • a cada minuto, abra uma nova janela na sessão de tela 'cronjobs' que grava a data, dorme por 30 segundos e depois sai. A janela será fechada na saída.
  • todos os domingos à meia-noite, abra uma nova janela com o título "lembrete" que diz "==== CHAMAR SUA MÃE ====" e exige que você pressione Enter para fechar a janela.
  • todas as segundas à meia-noite, execute 'ls / tmp' na primeira janela da sessão 'cronjobs'. Note, no entanto, que nenhuma outra tarefa '--window 0' pode ser executada ao mesmo tempo.
por smoser 28.11.2010 / 18:16
1

a resposta de smoser é boa, embora um pouco complexa. Você também pode simplesmente simplificar isso para apenas

screen -d -m -S mysession -t label sleep 1m

com a ressalva de que, quando o processo sair, a tela simplesmente desaparecerá e você não poderá ver o que ela escreveu na tela. Isso pode ou não estar bem para o seu caso. Você pode alterar isso configurando em .screenrc

defzombie ZZ 

, o que significa que as telas ficam suspensas depois que o processo termina, até que você pressione Z.

    
por poolie 29.11.2010 / 00:06