kill process no script ao escrever o comportamento do arquivo

2

no meu script php que é executado como um cron job, eu tenho

foreach($sites as $site)
{
    exec('./wkhtmltoimage-amd64 ' . $site . ' somefile.png');
    exec('./zopflipng -y somefile.png somefile.png');
}

para gerar capturas de tela mensalmente para cada site.

Agora, essa tarefa do cron é executada uma vez por mês e, no caso improvável de alguém querer excluir a imagem enquanto essa tarefa foi executada, não sei muito bem o que aconteceria. A imagem não seria excluída, pois está em uso? Se for esse o caso, como faço para excluir depois que ele não estiver mais em uso?

Eu pensei em uma solução onde eu poderia apenas matar o processo, mas também não tenho certeza do resultado. Se eu usar

lsof -t somefile.png

que me dará o PID do processo. Com isso, eu posso matar o processo dentro da função delete do site usando

exec('lsof -t somefile.png | kill -15');

Depois de matar, o roteiro original perto do topo deste post ainda continua? O trabalho será cancelado? O trabalho do cron com erro? Eu gostaria que fosse capaz de passar para o próximo site.

    
por No_name 23.01.2014 / 06:21

1 resposta

1

Eu acho que apenas testaria para ver se o arquivo existe, se ele for exibido. Você deve ser capaz de testar a existência de arquivos com bastante facilidade do PHP. Você também pode fazer isso a partir do shell (provavelmente Bash ou Bourne Shell) quando executar a função exec() .

 exec('[ -f somefile.png ] && ./zopflipng -y somefile.png somefile.png');

Matando o exec

Para abordar seu outro aspecto da sua pergunta. Se você está perguntando o que acontece quando você usa kill um ou ambos exec através de uma das iterações do loop for em seu programa PHP, então a resposta seria que seu for loop deveria solider e continuar com a próxima iteração sem problemas.

Os exec são processos separados do seu script PHP, portanto, a menos que você os execute e faça algo com os códigos de status que eles retornam, o chamador não deve ser o mais sábio que eles terminaram ou foram mortos.

    
por 23.01.2014 / 06:58