I am still learning Bash and I have a problem with my script. I want to filter out some calls with this script, which analyzes the call log every 2 minutes as a cronjob. The problem is that I can start it manually, but it does not work when cron starts automatically. I do not know why. He is shouting something about permissions, so I kind of fixed the script, so if this seems dirty, I'm really sorry.
#!/bin/bash YESTERDAY=$((`date +'%s'`-86400)) AYER=`date -d "1970-01-01 $YESTERDAY sec" +"%Y%m%d"` FECHA=`date +"%Y%m%d"` FILENAME="$FECHA.log" FILE_LINE="$FECHA.last" FILE="/apps/sittel/rawdata/mitel.$FECHA" # Limpiar carpeta tmp if [ -e "tmp/$AYER.lnum" ]; then rm tmp/${AYER}.* fi # Si existe el archivo con el numero de laultima linea se procesa if [ -e "tmp/$FECHA.lnum" ]; then # Se lee el numero de la linea y se extrae un archivo con las lineas apartir # de la ultima busqueda que se hizo, posteriormente se les hace un grep while read line do tail -n +$line $FILE > "tmp/$FECHA.hal" done < "tmp/$FECHA.lnum" cd tmp grep -n " 00[0|2-9][0-9]\{4,\}" "tmp/$FECHA.hal" > "tmp/${FECHA}.new" grep -n " 900[0|2-9][0-9]\{4,\}" "tmp/$FECHA.hal" >> "tmp/${FECHA}.new" cd .. echo `pwd` cat tmp/${FECHA}.new >> logs/$FILENAME else # Este caso es la primera vez que se ejecuta, verifica si el log ya existe # de ser asi, lo elimina para evitar duplicados if [ -e "logs/$FILENAME" ]; then rm "logs/$FILENAME" fi # Se realiza un grep en el archivo indicado y se marca el archivo de salida # se busca todos los numeros k empiecen con 00 seguidos de 0 a 9 execpto el 1 cd tmp grep -n " 00[0|2-9][0-9]\{4,\}" $FILE>"${FECHA}.new" grep -n " 900[0|2-9][0-9]\{4,\}" $FILE>>"${FECHA}.new" cat ${FECHA}.new >> $FILENAME mv $FILENAME ../logs cd .. fi cp "tmp/${FECHA}.new" "tmp/message.txt" echo "Mensaje" | mail -s "$SUBJECT" "$EMAIL" < "tmp/message.txt" fi if [ -e "tmp/${FECHA}.new" ]; then rm "tmp/${FECHA}.new" fi tail -n1 "logs/$FILENAME" > "tmp/$FILE_LINE" IFS=$':' while read line do DATOS=($line) LINE_NUMBER=${DATOS[0]} echo $LINE_NUMBER > "tmp/$FECHA.lnum" done < "tmp/$FILE_LINE" unset IFS
and this is what the system prints:
/apps/sittel/Alarma/callAlarm: line 56: cd: tmp: No such file or directory mv: cannot move `20110712.log' to `../logs': Permission denied /apps/sittel/Alarma/callAlarm: line 69: tmp/20110712.last: No such file or directory /apps/sittel/Alarma/callAlarm: line 77: tmp/20110712.last: No such file or directory
source share