Mein Bash-Skript funktioniert nicht, wenn es von Crontab ausgelöst wird, aber wenn ich es manuell auslöse?

Mein Bash-Skript funktioniert nicht, wenn es von Crontab ausgelöst wird, aber wenn ich es manuell auslöse?

dies ist der Cron-Eintrag

*/1 * * * * ./home/usr/automation/check_rejected_files.sh > /home/usr/automation/cronout

es erstellt die Datei, aber sonst passiert nichts. Ich habe am Anfang des Skripts ein Datumsprotokoll hinzugefügt, damit ich sehen kann, ob das Skript ausgeführt wurde oder nicht. Es erfolgt keine Protokollierung, wenn es über Cron ausgelöst wird. Vielen Dank für Ihre Hilfe.

Skript

#! /bin/bash
#
#
now=$(date)
echo $now >> $ASfile

*emphasized text*
##########o 
#Variables #
############

ASfile='AlertsSent.txt'
Rlines=$(cat $ASfile)
Alerted="false"
Recipient="mymail"

USERNAME='usr'
PASSWORD='pass'
SERVICE_NAME='service'
#####################
#Query List from DB #
#####################

RejectionQueryOutput=$(sqlplus -s $USERNAME/$PASSWORD@$SERVICE_NAME <<END
        set showmode off;
        set trimout on;
        set feedback off;
        set  verify off;
        set  heading off;
        set  echo off;
        set pagesize 0;
        set termout off;
    select mmfile.name from file_status INNER JOIN mmfile ON file_status.file_id=mmfile.id where file_status.state='BANK_REJECTED' and file_status.type='CURRENT' and file_status.datetime > sysdate - 6 and (mmfile.type='PAIN008_EPC' or mmfile.type='PAIN008_CGI' or mmfile.type='PAIN008_CBI' or mmfile.type='PAIN008_DIAS' or mmfile.type='PAIN001_EPC' or mmfile.type='PAIN001_CGI');
    exit;
END
)

ExportedQueryOutput=$(sqlplus -s $USERNAME/$PASSWORD@$SERVICE_NAME <<END
        set showmode off;
        set trimout on;
        set feedback off;
        set  verify off;
        set  heading off;
        set  echo off;
        set pagesize 0;
        set termout off;
     select mmfile.name from file_status INNER JOIN mmfile ON file_status.file_id=mmfile.id where file_status.state='EXPORTED' and file_status.type='CURRENT' and file_status.datetime < sysdate - 2/24 and file_status.datetime > sysdate - 6 and (mmfile.type='PAIN008_EPC' or mmfile.type='PAIN008_CGI' or mmfile.type='PAIN008_CBI' or mmfile.type='PAIN008_DIAS' or mmfile.type='PAIN001_EPC' or mmfile.type='PAIN001_CGI');
    exit;
END
)
tifs=$IFS
IFS=' '
RejectedArray=( $(for i in $RejectionQueryOutput ; do echo $i ; done) )
ExportedArray=( $(for i in $ExportedQueryOutput ; do echo $i ; done) )
IFS=$tifs
#######
#Main #
#######
#Rejected 
for i in ${RejectedArray[@]}
do
        for rline in $Rlines; do
                if  [ "$i" == "$rline" ]
                then
                        Alerted="true"
                        break
                fi
        done

        if [ "$Alerted" == "false" ]
        then
                echo $i "Rejected"  >> $ASfile
                echo "file $i have been rejected by bank please take action" | mail -s "[SEPA] raising alarm: $i have been rejected" $Recipient
        fi
Alerted="false"
done
ASfile='AlertsSent.txt'
Elines=$(cat $ASfile)
#Stuck Exporting
for x in ${ExportedArray[@]}
do
        for eline in $Elines; do
                if  [ "$x" == "$eline" ]
                then
                        Alerted="true"
                        break
                fi
        done

        if [ "$Alerted" == "false" ]
        then
                echo $x "Long-Exporting"  >> $ASfile
                echo "file $x have been in Exported state for more than 2 hours" | mail -s "[SEPA] raising alarm: $x have been in Exporting state for more than 2 hours" $Recipient
        fi
Alerted="false"
done

Antwort1

Entfernen Sie den Punkt in Ihrem crontabEintrag wie folgt:

*/1 * * * * /home/usr/automation/check_rejected_files.sh > /home/usr/automation/cronout

verwandte Informationen