Solved

Cron Errors

Posted on 2006-06-22
7
982 Views
Last Modified: 2013-12-27
One of our user accounts has a cron job setup to run every 15 minutes. However, on completion of the cron job they are getting emailed the following:

/opt/bin/run_test_connection.sh

produced the following output:

/opt/bin/run_test_connection.sh[31]: cut:  not found
/opt/bin/run_test_connection.sh[37]: sleep:  not found
/opt/bin/run_test_connection.sh[40]: grep:  not found
/opt/bin/run_test_connection.sh[40]: cat:  not found
/opt/bin/run_test_connection.sh[40]: wc:  not found
/opt/bin/run_test_connection.sh[41]: expr:  not found
/opt/bin/run_test_connection.sh[42]: test: argument expected
/opt/bin/run_test_connection.sh[26]: cut:  not found
/opt/bin/run_test_connection.sh[27]: cut:  not found
/opt/bin/run_test_connection.sh[29]: test: argument expected
/opt/bin/run_test_connection.sh[26]: cut:  not found
/opt/bin/run_test_connection.sh[27]: cut:  not found
/opt/bin/run_test_connection.sh[29]: test: argument expected
/opt/bin/run_test_connection.sh[26]: cut:  not found
/opt/bin/run_test_connection.sh[27]: cut:  not found
/opt/bin/run_test_connection.sh[29]: test: argument expected

The user's crontab is as follows:

# Check Databases and Listener are running
00,15,30,45 08-18 * * 1-5 /opt/bin/run_test_connection.sh
00,15,30,45 08-18 * * 1-5 /opt/bin/run_lsnr_check.sh

When they run the script manually it works fine with no errors - it's only returning this when run from the cron.

Cheers.
0
Comment
Question by:Grass-hopper
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
7 Comments
 

Expert Comment

by:chorleyfm
ID: 16960270
To help answer this there are two more pieces of information for starters.

(i) The text in the shell script needs to be shown to us so please append this to the question

and

(ii) The result of echo $PATH

Thanks

Vince
 
0
 

Author Comment

by:Grass-hopper
ID: 16960434
Body of Script:
=========

#!/bin/ksh
#:
# ***************************************************************************
# * File    @(#): run_test_connection.sh                                    *
# * Date        : 06-MAY-2004                                               *
# * Version     : 1.0.0.0                                                   *
# * Author      : PSG                                                       *
# * Purpose @(#): UNIX Environment administration for Oracle.               *
# *                                                                         *
# *               This script checks connections to databases. Send email   *
# *               alert if connections not being accepted.                  *
# *                                                                         *
# * Parameters  :                                                           *
# ***************************************************************************
# * Change History                                                          *
# *                                                                         *
# *    Date     Done By           Vers  Description                         *
# * ---------   ----------------  ----  ------------------------------------*
# ***************************************************************************
#

cd /opt/bin

for LNE in `cat /var/opt/oracle/oratab | grep -v '^#' | grep -v '*' | grep -v 'i
ds' `
do
  DB=`echo ${LNE} | cut -f1 -d:`
  AUTO_START=`echo ${LNE} | cut -f3 -d:`

  if test $AUTO_START = "Y"
  then
    . /opt/bin/ora_${DB}.env

    # Submit the Oracle task in the background
    nohup /opt/bin/test_connection.sh > /tmp/check_$ORACLE_SID.ora 2>&1 &

    # Wait for 30 seconds
    sleep 30

    # Check for ORA- errors
    check_stat=`cat /tmp/check_$ORACLE_SID.ora | grep -i ORA- | wc -l`
    oracle_num=`expr $check_stat`
    if [ $oracle_num -gt 0 ]
    then
      cnt=`cat /tmp/check_$ORACLE_SID.ora | wc -l`

      cp -p /tmp/check_$ORACLE_SID.ora /tmp/check_$ORACLE_SID.ora.wrk

      lne=1

      while [ $lne -le $cnt ]
      do
        head -1 /tmp/check_$ORACLE_SID.ora.wrk > /tmp/line
        err_chk=`cat /tmp/line | grep -i ORA- | wc -l`
        if [ $err_chk -gt 0 ]
        then
          ora_err=`cat /tmp/line | grep -i ORA- | cut -c5-9`
          oerr ORA $ora_err >> /tmp/connect.err
          echo "" >> /tmp/connect.err
          echo "Log in as Oracle and run the Oracle Administration menu by typin
g runmenu.sh at the command prompt." >> /tmp/connect.err
          echo "" >> /tmp/connect.err
          echo "Select the $ORACLE_SID    Database Administration Menu and selec
t Start $ORACLE_SID Database NORMAL option" >> /tmp/connect.err
        fi
        sed '1d' /tmp/check_$ORACLE_SID.ora.wrk > /tmp/check_$ORACLE_SID.ora.tmp
        mv /tmp/check_$ORACLE_SID.ora.tmp /tmp/check_$ORACLE_SID.ora.wrk
        lne=`expr $lne + 1`
      done
    else
      rm /tmp/check_$ORACLE_SID.ora 2>/dev/null
    fi

    if [ -f /tmp/connect.err ]
    then
      #mailx -s "HIDDEN"< /tmp/connect.err
      mailx -s "SERVER: WARNING - $ORACLE_SID not accepting connections" HIDDEN
 < /tmp/connect.err
      rm /tmp/connect.err 2>/dev/null
      #rm /tmp/check_$ORACLE_SID.ora 2>/dev/null
      #rm /tmp/line 2>/dev/null
      #rm /tmp/check_$ORACLE_SID.ora.wrk 2>/dev/null
    fi
 fi
done


PATH
===
/usr/bin:.:/usr/sbin:/etc:/usr/ccs/bin:/usr/ucb:/usr/ucblib:/usr/openwin/bin:/app/oracle/product/live/8.1.7:/app/oracle/product/live/8.1.7/bin:/export/home/oracle:/export/home/oracle/scripts:/export/home/ss
0
 

Expert Comment

by:chorleyfm
ID: 16960616
I would suggest you try this

crontab -l > /tmp/cron
crontab -l > /tmp/cron_b                                                               (N.B Just as a backup of the original)
vi /tmp/cron

Edit the file so that it looks like this:

00,15,30,45 08-18 * * 1-5 /bin/sh -c '/opt/bin/run_test_connection.sh'
00,15,30,45 08-18 * * 1-5 /bin/sh -c '/opt/bin/run_lsnr_check.sh'

save the file {ESC}:wq!

crontab < /tmp/cron

This should give the cron the same environment as running it from a prompt.

Vince
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 38

Expert Comment

by:yuzh
ID: 16965240
It is the ENV seting, the PATH setting for cron is in the /etc/default/cron
file.

man cron
man crontab
to learn more details.

You can modify the script to FULL path for commands, eg:
use "/usr/bin/cut" instead of "cut", OR defind PATH etc in the sctipt before
all the command. OR, "source" a ENV setting file (eg a login script):

#!/bin/ksh
. /path-to/.profile        # a Dot SPACE then /path-to/.profile
# following by the script body
....
#End of script.

If you are 100% sure that the script works in the user (eg fred's) login
ENV, you can also use root's crontab to run the script as user fred, see
the example in:
http:Q_20651566.html#8745475

0
 
LVL 21

Accepted Solution

by:
tfewster earned 500 total points
ID: 16966717
You can insert "set -x" in the script to trace what it is doing at each stage; However, the errors start at line 31 and then loop:

26:  DB=`echo ${LNE} | cut -f1 -d:`
27:  AUTO_START=`echo ${LNE} | cut -f3 -d:`
28:
29:  if test $AUTO_START = "Y"
30:  then
31:    . /opt/bin/ora_${DB}.env

I suspect that the first ora_${DB}.env call is overwriting the default PATH so the path to sleep, cut, grep etc. is lost
0
 

Author Comment

by:Grass-hopper
ID: 16968874
Cheers guys - I'll give your suggestions a try and get back to you to how it goes.
0
 

Author Comment

by:Grass-hopper
ID: 16999505
Cheers for all your replies guys - its appreciated.

It turns out it was exactly what tfewster said about the ora_${DB}.env call overwriting the default PATH. When we traced it to the related script - thats exactly what it was doing and we were able to sort it.
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
nodeip 9 92
AIX    Volume group Auto ON/OFF question 2 126
awk sed variable in file 3 98
centos commands 6 90
I promised to write further about my project, and here I am.  First, I needed to setup the Primary Server.  You can read how in this article: Setup FreeBSD Server with full HDD encryption (http://www.experts-exchange.com/OS/Unix/BSD/FreeBSD/A_3660-S…
FreeBSD on EC2 FreeBSD (https://www.freebsd.org) is a robust Unix-like operating system that has been around for many years. FreeBSD is available on Amazon EC2 through Amazon Machine Images (AMIs) provided by FreeBSD developer and security office…
Learn how to get help with Linux/Unix bash shell commands. Use help to read help documents for built in bash shell commands.: Use man to interface with the online reference manuals for shell commands.: Use man to search man pages for unknown command…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:

749 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question