pcodigo2web/workspace/avaliador/corrigir.sh

123 lines
3.1 KiB
Bash
Executable File

#!/bin/sh
i=0
# Submissoes é o diretorio de entrada. Dentro dele só pode haver subdiretorios com arquivos submetidos
# Para cada subdiretorio em submissoes
for diretorio in questoesseparadas/*
do
for subdiretorio in $diretorio/*
do
# A existência do arquivo sucesso.txt indica que o processo de rodar foi finalizado
# Só roda se houver makefile e este nao tiver sido atualizado nos ultimos dois dias
if [ ! -e $subdiretorio/sucesso.txt ]
then
if [ -e $subdiretorio/makefile ]
then
# Se o arquivosaida nao existir, x=1>0 ==> pode rodar o avaliador dinamico
x=1
if [ -e $subdiretorio/arquivosaida ]
then
# verifica se arquivosaida sofreu modificacoes nas ultimas 3 horas ==> x>0
x=$(find $subdiretorio/arquivosaida -mmin -180 | wc -l)
fi
# Se houve atualizacao do arquivosaida nas ultimas 3 horas ou arquivosaida nao existe
if [ $x -gt 0 ]
then
# Tempo máximo para concluir execução (Pode colocar como argumento)
TEMPO=5
# Tamanho maximo do diretorio
TAMMAX=7
# Obter tamanho do subdiretorio
TAMDIR=$(du -hsm $subdiretorio | awk 'NR == 1 {print $1}')
make -C $subdiretorio &
# Testando se programa está rodando
i=0
# Aguarda o tempo máximo de execucao. Se ultrapassar esse tempo ou exceder limite de memoria, aborta execucao
while [ $i -lt $TEMPO ] && test -n "`fuser -a $subdiretorio`"
do
sleep 1
i=$((i+1))
done
fuser -k $subdiretorio
if [ -e $subdiretorio/arquivosaida ]
then
RESULTSAIDA=$(du -hsm $subdiretorio/arquivosaida | awk 'NR == 1 {print $1}')
# Tamanho máximo do arquivo de saida gerado é de 5MB. Pode colocar como argumento de entrada
TAMANHO=5
if [ $RESULTSAIDA -gt $TAMANHO ]
then
rm -f $subdiretorio/arquivosaida
echo " Tempo de execução excedido - Programa em loop!!" > $subdiretorio/arquivosaida
else
echo "OK!" > $subdiretorio/sucesso.txt
fi
else
echo " O arquivo de saida nao foi gerado! Erros no exercicio" > $subdiretorio/arquivosaida
fi
fi
else
# Verificar se é diretorio
if [ -e $subdiretorio/ ]
then
echo "Arquivo makefile não encontrado. A saida do programa não foi gerada" > $subdiretorio/arquivosaida
fi
fi
fi
done
done
echo "ok!" > confirma.txt