Sou um cientista computacional e faço muitos cálculos longos no Linux. Especificamente, eu executo simulações de dinâmica molecular (MD) usando o pacote GROMACS. Essas simulações podem levar dias ou semanas, rodando (por exemplo) 8 a 24 núcleos. Eu tenho acesso a vários nós de um cluster, o que significa que, a qualquer momento, estou executando aproximadamente 4 ou 5 trabalhos (cada um em um nó diferente e cada um em 8 a 24 núcleos).
O problema é que a simulação leva um tempo variável. Eu gosto de manter todos os nós trabalhando em simulações o tempo todo, mas para iniciar uma nova simulação, preciso fazer login com um terminal e fazer algum trabalho manual. Mas eu sempre esqueço quanto tempo resta em uma simulação, então sempre acabo verificando-os constantemente.
Existe alguma maneira de receber um email quando um processo Linux terminar? Poderia haver um programa Linux que faça isso? Dessa forma, eu saberia quando efetuar login com um terminal e preparar a próxima simulação.
Estou usando o Ubuntu Linux. Obrigado pelo seu tempo.
Respostas:
Os trabalhos enviados ao
at
daemon enviarão qualquer saída para você do stderr e stdout após a conclusão. Também pode ser configurado para enviar correio, mesmo que o trabalho não tenha saída. Ele também tem o benefício de funcionar sem um terminal de controle, para que você não precise se preocupar com o efeito que o fechamento do terminal terá no trabalho.exemplo:
Quando esse trabalho for concluído, o usuário que o enviou receberá um email e, se houver alguma saída, você o receberá. Você pode alterar o destinatário do email alterando a
LOGNAME
variável de ambiente.at
possui um modo em lote no qual você pode enfileirar tarefas para executar quando o sistema não estiver ocupado. Esse não é um sistema de enfileiramento muito bom quando vários usuários estão competindo por recursos, mas, mesmo assim, se você deseja executar trabalhos com ele:Por padrão, os trabalhos não serão iniciados, a menos que a carga do sistema esteja abaixo de 1,5, mas esse número de carga pode ser ajustado (e com 24 núcleos, eu diria que você deveria). Eles podem ser executados em paralelo se não ultrapassarem o loadavg acima do limite de carga (o padrão é 1.5 novamente) ou se eles ultrapassarem o loadavg acima de 1,5, eles serão executados em série.
Você pode visualizar a fila de trabalhos
atq
e excluir trabalhos comatrm
Dependências da resposta:
atd
daemon (ps -ef|grep atd
)atd
(não negadas por/etc/at.deny
//etc/at.allow
configurações)sendmail
MTA funcionalA maioria dos sistemas não tem problemas com esses requisitos, mas vale a pena verificar.
fonte
Sim, existe
Onde -s "texto" é o assunto, o eco fornece ao correio algum texto para enviar a você.
fonte
mail
comando exige que o MTA local seja configurado corretamente. Esta é a solução fácil e simples.mail
para enviar a saída do comando:{ command; echo Done; } | mail -s "subject" [email protected]
screen
outmux
, mas pode ser difícil ter um terminal aberto em algum lugar por dias / semanas sem ele. A soluçãoat
para o gerenciamento de tarefas também resolveria esse problema.&
no final do comando para fazê-lo funcionar no fundo.sleep 30 && echo "Process done" | mail -s "Process done" [email protected] &
nohup
para desvinculá-los, mas também perde a capacidade de continuar controlando-o a partir do shell. Isto é parcialmente o quetmux
é para isso. Ele separa os processos em execução da sua sessão de terminal ativamente conectada e visualizada, enquanto ainda permite que você interaja com eles normalmente.Eu recomendaria definir um script python para enviar um email, eles são muito fáceis de escrever e configurar os servidores de correspondência corretos para qualquer serviço que você usar. Eles se parecem com isso:
Use isso em conjunto com o operador do tubo sugerido nas outras respostas.
Outra ótima solução que encontrei para esse problema está usando o Pushover . Pushover - "O pushover facilita o envio de notificações em tempo real para seus dispositivos Android e iOS". Eu configurei um script simples que alterou a API fácil para enviar uma mensagem para o meu telefone quando minhas compilações terminarem.
fonte
Você também pode usar o
trap
comando para enviar e-mails na saída do processo ou na interrupção, interrupção ou no término do processo. Aqui está o código que você deve colocar na parte superior do seu script.Uma corrida
fonte
Eu escrevi process_watcher.py
Atualmente, o corpo do email se parece com:
Crie um problema no GitHub se precisar de melhorias.
fonte
fg ‹PID›; mail -s Completed [email protected] <<< 'Message here'
.Eu tenho um script caseiro que funciona para mim. Uso:
Ele enviará um e-mail com informações significativas no assunto e com a saída do processo no corpo.
As instruções de instalação estão na página principal do repositório GitHub - atualmente para todos os scripts nos quais um link simbólico é criado
~/bin
.fonte
Supondo que seu programa já esteja em execução, use o bash + pgrep para assisti-lo.
fonte
Há tempos, criei esse alias (no csh, agora o uso no tcsh):
alias shunt "( \!* | Mail -s 'Output of: \!*' $user) >& /dev/null &"
Requer que
Mail
esteja instalado e funcionando no seu sistema, mas tem a vantagem de que seu comando seja executado exatamente como faria na linha de comando (incluindo aliases, expansões de til, etc) - quando você executa uma tarefa usandoat
oucron
é executada sob um padrão ambiente que pode ser suficientemente diferente para causar falha no seu script ou fornecer saída incomum (eu já fui mordido por issocron
várias vezes)fonte