Por que esse processo está se recusando a sair?

2

Eu tenho um cron job que executa um script de shell que executa um script php. Ele é executado todos os dias, envia alguns e-mails e grava no stdout (que é redirecionado para um arquivo de log no shell script).

Parece que esse processo terminou, hoje, mas não saiu (ou qualquer que seja a terminologia correta!).

$ ps -ejH
...
10756 10756 10756 ?        00:00:00   sh
10760 10756 10756 ?        00:00:00     automail.sh
10766 10756 10756 ?        00:03:57       php
...

O processo com id 10766 consumiu pouco menos de 4 minutos de tempo de CPU. De uma sessão superior interativa, recebo o seguinte:

10766 root      20   0 40640 6024    4 S  0.0  0.2   3:57.48 php

Esses centésimos não mudaram desde que eu olhei para ele. Então, minha conclusão é que está fazendo ... quase nada, no máximo.

$ ls -ld /proc/10766/
dr-xr-xr-x 7 root root 0 2016-03-09 08:55 /proc/10766/

me diz que está acontecendo há algum tempo; a hora do servidor é agora:

$ date
Wed Mar  9 11:08:29 GMT 2016

A última linha do script php grava em um arquivo de log, e essa linha é presente no arquivo de log. A execução do script php é a última coisa no script de shell.

Como faço para diagnosticar por que esse processo não foi encerrado?

UPDATE

Aqui está uma versão editada do script de shell que estou executando:

#!/bin/sh

DATE=$(date +%Y-%m-%d)
PHP=/usr/bin/php
SCRIPT=/path/to/script.php
LOG=/path/to/log.file.$DATE.log

$PHP $SCRIPT >> $LOG
    
por Bobby Jack 09.03.2016 / 12:14

1 resposta

4

O processo está listado como 'dorminhoco' não terminado ou zumbido.

10766 root      20   0 40640 6024    4 S  0.0  0.2   3:57.48 php

Está preso fazendo algo, dado que você disse que tinha read(4, ... em uma saída de strace, eu diria que provavelmente está esperando que a outra extremidade de uma conexão de soquete envie dados. Como um site desistiu de enviar seus dados.

Isso é um palpite total embora.

Quase certamente deve haver um descritor de arquivo para 4 que forneça mais informações se você tentar lsof -p10756 e ver o que está acontecendo.

    
por 09.03.2016 / 13:50

Tags