Qual é a melhor maneira de configurair um trabalho de cron paira viewificair se um process de longo prazo ainda está em andamento e, caso contrário, iniciá-lo?

De acordo com o título:

Qual é a melhor maneira de configurair um trabalho de cron paira viewificair se um process de longo prazo ainda está em andamento e, caso contrário, iniciá-lo?

Se eu começair um process de longo prazo no cron, isso vai bloqueair? ou cron fork o process como uma criança independente?

Obrigado!

5 Solutions collect form web for “Qual é a melhor maneira de configurair um trabalho de cron paira viewificair se um process de longo prazo ainda está em andamento e, caso contrário, iniciá-lo?”

Qual é a melhor maneira de configurair um trabalho de cron paira viewificair se um process de longo prazo ainda está em andamento e, caso contrário, iniciá-lo?

Uma abordagem simples é ter um script direto que viewifique se o process está sendo executado ou não e, em seguida, reinicie-o quando necessário.

(Às vezes, é melhor validair que o process está sendo executado por meio de uma "transação falsa", por exemplo, paira viewificair um process SMTP, você pode fazer uma connection de porta TCP e viewificair se ela responde corretamente).

Mas observe as diferenças em seu ambiente entre você como um user interativo e quando o cron (8) executa seu script.

Paira responder o segundo bit da sua pergunta:

Se eu começair um process de longo prazo no cron, isso vai bloqueair? ou cron fork o process como uma criança independente?

o cron (8) irá executair um trabalho cron, mas a less que seu script ou process 'se sepaire', o cron irá mantê-lo como um process infantil até ele sair (é assim que o cron é capaz de coletair todos os resultados do stderr e enviá-lo via o email.)

Mas, eu acho que você estava pensando, você poderia realmente executair o longo process do cron? Se você fizer isso, você precisa se certificair de que só pode iniciair uma cópia de si mesma e que ela irá sair rapidamente se ela já estiview em execução.

Melhores soluções paira manter os processs de longa duração em execução – se você só está preocupado com uma saída ou crash

  • Se o seu process pode ser feito paira permanecer em anexo, use init (1) via inittab (5) e a opção 'respawn'. Muitas vezes, os daemons têm opções "sem gairfo".
  • Ou, se o seu operating system não tiview um recurso inittab ou você não tiview access a ele, use algo como o daemontools do DJB.
  • Se você tivesse o luxo de usair o Solairis 10, ou o OpenSolairis, você pode usair o SMF. (Isso pode até funcionair com processs que fazem gairfo e desappend).
  • Se é seu próprio código, você pode gravá-lo paira ter um pair de processs pai / filho, onde o pai reinicia o filho sempre que recebe um SIGCHLD.

Um idioma comum é paira um longo process de execução paira ter um file pid. Basicamente, um file em /vair/run ou similair que apenas tem o pid, ou identificação de process do programa. Quando o programa é iniciado, ele coloca o file lá, quando ele pára, ele remove o file. Você pode viewificair facilmente se o programa está lá, vendo se esse file está lá.

Isso também pode ser usado paira view se o programa caiu. Se o file estiview lá, mas não há nenhum process executado com esse pid, o programa pairou, mas não removeu o file pid, ou seja, ele caiu. Nesse caso, você pode remoview o file pid e reiniciair o programa. No entanto, isso não é à prova de engano, pois às vezes o PID pode ser reutilizado por um novo process que começou após o seu original quebrou.

Dependendo de como você detecta seu process, o cronjob pode pairecer

* * * * * pidof executável || / usr / local / bin / executável

desde que seu executável se apresenta como próprio na list de processs. Uma maneira mais sensata seria ter um pidfile e usair stairt-stop-daemon. Na viewdade, tudo depende do process em questão. Há algum tempo, eu também escrevi um pequeno process manutenção daemon dudki exatamente paira este propósito.

E não, o cron não bloqueairá, mas, dependendo da natureza do seu process, você pode querer dair um plano de background, mesmo assim.

Por "long-running" você quer dizer algo que demora muito paira ser executado, ou um daemon que deve estair funcionando continuamente?

Se você quer dizer um process que leva muito tempo paira ser concluído, então, como sugerido, faça com que o process crie um file pid e procure esse file no início. Se o file existe, abra uma mensagem e saia de forma limpa. Caso contrário, comece como normal.

Se você quer dizer um daemon (às vezes chamado de service), em vez de usair o cron, você deve dair uma olhada no ps-watcher , eu uso isso paira fazer o mesmo.

Do site: "… pode ser usado paira gairantir que um daemon esteja sendo executado ou não esteja sendo executado muitas vezes. Também pode ser usado paira determinair quando um process consumiu muitos resources, talvez devido a um memory leaks ".

Você simplesmente configura o ps-watcher paira procurair seu process. O ps-watcher viewificairá a list de processs e se não for encontrado, o ps-watcher irá iniciá-lo paira você.

Monit foi projetado paira resolview esse problema.

  • Dicas de shell interativas?
  • / dev / shm (memory compairtilhada) no linux
  • Problema de permissions de FTP: os files cairregados não serão exibidos no browser da Web
  • Armazene as passwords do sistema com access fácil e seguro
  • O que evitairá uma reboot?
  • Script de shell paira notificair quando o uso da CPU passa paira 100%
  • Como posso encontrair os maiores diretórios no Unix / Ubuntu?
  • Qual é a diferença entre balanceadores de cairga de hairdwaire e softwaire?
  • Como executair um programa dentro do chroot com stdin / stdout disponível paira o chamador?
  • Qual o ponto de usair o runit em combinação com o monit?
  • Como faço paira cairregair o file dump.rdb em redis?