Como você mantém esse script bash covarde em execução em segundo plano 24 horas por dia, 7 dias por semana?

Como você mantém esse script bash covarde em execução em segundo plano 24 horas por dia, 7 dias por semana?

Isso pode parecer uma duplicata, mas me ouça primeiro.

Eu executo um script de shell, que possui uma entrada padrão ativa e, às vezes, na inicialização, requer alguma entrada. Eu preciso que ele funcione 24 horas por dia, 7 dias por semana e ele precisa ser reiniciado em caso de falha, inserindo um comando ou apenas inserindo "y" se o prompt aparecer. Já tentei dois métodos: usar nohup e clicar em Ctrl + Z, digitar bg mostra o trabalho como parado e não está em execução. Somente quando eu executo fgele fica ativo. Alguma pista de como resolver isso?

PS: Eu também tentei scriptcommand &e acabou com "Stopped" também.

Configurá-lo como um serviço systemd faria sentido?

Responder1

Programas que dependem de entrada conforme você descreveu precisam ser iniciados dentro de um multiplexador de terminal como tmux(https://en.wikipedia.org/wiki/Tmux) ou screen(https://www.gnu.org/software/screen/). Pense nisso como uma versão baseada em texto de uma janela de terminal.

Use screen my-programpara começar my-program. Então você podeseparardo console da tela virtual usando a combinação de teclas Ctrl- A Ctrl- De você estará de volta ao shell onde começou, mas seu programa continuará sendo executado em segundo plano. Então, usando screen -rvocê pode se reconectar ao console virtual.

screen (e seu programa) continuarão em execução até que o programa seja encerrado ou o servidor seja reinicializado.

tmuxé bastante semelhante, mas tem mais opções e recursos e usa diferentes atalhos de teclado.

Responder2

Para que o script continue sendo executado em segundo plano, use nohup: nohup scriptcommand &. Idealmente, o script teria a opção de não solicitar entrada. Se isso não for uma opção por algum motivo,Esperarpode ser usado para inserir 'y'.

A criação de um serviço systemd para o script permitiria que o script fosse iniciado na reinicialização do sistema. Você também pode usar Restart=alwaysem seu arquivo systemd para reiniciar o serviço se o serviço for encerrado ou encerrado, oa documentação do systemd tem mais informações.

informação relacionada