Como monitorar ou eliminar um processo que foi iniciado pelo cron?

4

Eu tenho alguns bots, que são executados pelo agendador do sistema em determinado intervalo de tempo. Mas às vezes devido a algum erro lógico eu tenho que parar esses bots manualmente. Como posso encontrar esses processos executados pelo agendador e eliminá-los?

    
por Harish Kurup 07.06.2011 / 14:14

3 respostas

2

Você pode matar processos pelo nome. Por exemplo, no Linux, * BSD e Solaris, pkill myprogram elimina todos os processos cujo nome contém myprogram (use pkill '^myprogram$' para uma correspondência exata). Se você executá-lo como um usuário não-root, apenas os processos desse usuário serão eliminados, e há outras opções para controlar a correspondência (consulte o manual em seu sistema para obter detalhes).

Se você deseja segmentar especificamente os processos iniciados pelo agendador e você está eliminando os processos manualmente, pode executar ps f (somente Linux) ou pstree (somente Linux) ou ptree para exibir os processos em uma árvore e ver quais processos foram iniciados pelo cron.

Se você quiser poder eliminar esses processos automaticamente em um método caseiro, faça-os armazenar seu ID de processo em um arquivo. Esse tipo de arquivo é chamado de pidfile quando é usado para ter apenas uma única instância do processo em execução (que pode ou não ser algo que você deseja). Se você quiser várias instâncias, armazene os PIDs em arquivos separados em um diretório comum; aqui está um snippet de shell que faz isso:

pid_dir=/var/run/myprogram # must have been created e.g. at boot time
myprogram &
pid_file=$pid_dir/$!.pid
touch "$pid_file"
wait
rm "$pid_file"

Uma solução melhor, se você tiver critérios rígidos para detectar processos em fuga, é usar um programa de monitoramento geral ou, em casos simples, limitar o tempo de execução do processo. Você pode achar esses links úteis:

por 09.07.2011 / 23:48
0

Sugiro que você coloque o PID ($$) em um arquivo depois de gerá-lo. Você pode usar isso para matar o processo.

    
por 09.06.2011 / 16:14
0

Uma ramificação básica de tentativa / captura na maioria das linguagens de programação para localizar loops infinitos ou outros casos de erros deve funcionar. Possivelmente, um cronômetro inativo / não responsivo nos processos para procurar interrupções.

    
por 09.07.2011 / 21:43