I\'m still learning Bash and I\'m having a problem with my script. I want to filter some calls with this script that is analyzing a call log, every 2 minutes as cronjob. The pro
It seems that you are assuming a certain starting directory, and creating a tmp
directory there. But when you run it as a cron job, it starts in a different place. So a CD command in your bash startup script might mess you up. You can easily test by using the full path names when you cd
or rm
or whatever.
For example,
if [ -e "tmp/$AYER.lnum" ]; then
rm /home/username/tmp/${AYER}.*
fi
# Si existe el archivo con el numero de laultima linea se procesa
if [ -e "/home/username/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 > "/home/username/tmp/$FECHA.hal"
done < "/home/username/tmp/$FECHA.lnum"
cd /home/username/tmp
grep -n " 00[0|2-9][0-9]\{4,\}" "/home/username/tmp/$FECHA.hal" > "/home/username/tmp/${FECHA}.new"
and so on.
Looks like you may need to cd
into the correct directory at the start of your script.
Put a pwd
at the beginning, followed by exit
and watch the cron output to see where you're executing from. There's also a chance that you have a shorter PATH
when running under cron, but it should still have access to tail
and grep
.
Your script assumes that it is being run from a particular directory (note that almost every path is a relative path, not an absolute path). cron
happens to be running it from another directory.
If the script works when you run it from the directory it lives in, add the following to the top of your script:
mydir=$(dirname "$0") && cd "${mydir}" || exit 1
$0
is the (possibly relative) filename of the shell script being executed. Given a filename, the dirname
command returns the directory containing the filename.
So, that line changes directories to the directory containing the script or exits with an error code if either dirname
or cd
fails.