A sessão de tela usada para executar o PFA python no servidor é interrompida após alguns dias

0

Estou executando um script PFA baseado em python que basicamente grava planilhas a cada hora. Está funcionando bem. Eu uso o SSH no Putty para acessar meu servidor e, portanto, usei uma sessão de tela para executar o script em segundo plano. Funciona bem por alguns dias e depois morre repentinamente. Agora, ele correu por 6 dias seguidos e morreu depois. Usando o Ubuntu 16.04.2 LTS (Xenial) no Oceano Digital.

Eu usei -

screen python we.py

Eu tentei descobrir se há algo que possa me ajudar de aqui . Preciso atribuir um nome à tela usando -S para evitar isso? Ou eu tenho que recolocá-lo todos os dias usando -x ou -p para mantê-lo ao vivo?

    
por SanVed 29.09.2017 / 17:24

2 respostas

1

Existem duas formas de resolver o seu problema:

Executa a tarefa como um serviço systemd

Parece que esta é uma tarefa longa que deve ser realmente um serviço que é iniciado na inicialização, é reiniciada pelo sistema init quando falha e deve ter um registro apropriado para o journald.

Para que isso aconteça, siga estas etapas:

Crie um arquivo /lib/systemd/system/python-we.service e insira o seguinte conteúdo:

[Unit]
Description=Python We Job
After=network-online.target

[Service]
Type=simple
Restart=on-failure
RestartSec=10

ExecStart=/usr/bin/python /full/path/to/we.py

# Make sure stderr/stdout is captured in the systemd journal.
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Depois de criar o arquivo, execute os seguintes comandos para registrar o arquivo python-we.service no systemd, habilitá-lo (para que ele seja iniciado após uma reinicialização) e, finalmente, iniciá-lo.

systemctl daemon-reload
systemctl enable python-we
systemctl start python-we

Se você usar o systemd, poderá ler os registros por meio de journalctl -u python-we .

Executar na tela (não recomendado)

Inicie uma sessão de tela (apenas digite screen ) e nesta sessão de tela inicie seu trabalho. Desta forma, a sessão de tela só existe se você fechar o shell dentro da sessão de tela e você pode observar os logs dentro da sessão de tela.

Como eu disse: essa não é uma maneira recomendada de executar um serviço, pois é um tipo de hacky. Sua sessão de tela vai inchar e o serviço não será reiniciado automaticamente no caso de falhar.

    
por malte 26.10.2017 / 12:06
0

O programa que você está executando dentro da tela provavelmente está saindo, quando isso acontecer, a sessão será fechada e você perderá toda a saída do console e o código de status.

Se você realmente quiser continuar usando a tela para isso, sugiro pressionar ctrl-a , em seguida, shift-h antes de desconectar da tela para registrar a sessão. Um arquivo chamado screenlog.0 será criado no diretório de trabalho que contém toda a saída do console, esperançosamente que possa dizer por que seu programa está saindo.

    
por Bracken 24.10.2017 / 16:30