当我尝试从 crontab 运行时,包含计数但不显示的 shell 文件

当我尝试从 crontab 运行时,包含计数但不显示的 shell 文件

我是编写 shell 脚本的新手,我编写了一个类似这样的脚本

#!/bin/bash
PID=$(ps -ef | grep "sh gps.sh" | grep -v grep | awk '{print $2}')
if [ -z $PID ]
then
    cd /opt/etrans/cronjobs
    cnt=$(echo "select 'count '||count(*) from schema.table where c_is_processed ='N'" | psql | grep count |awk '{print $2}')
    echo "Out side of if count is $cnt" | cat >> /opt/cronlog/unprocess_data_process.log # for log writing
    if [ $cnt -ge 5000 ]
            then
            echo "Inside manual gps" | cat >> /opt/cronlog/unprocess_data_process.log # for log writing
            sh manual_gps.sh
        else
        echo "Inside gps" | cat >> /opt/cronlog/unprocess_data_process.log # for log writing
                sh gps.sh
        fi
else
 echo "gps Process is Running with PID=$PID"
fi
exit

当我手动运行 .sh 文件时,它会运行文件,并且我可以在我的日志文件中看到所有计数,但是当我从 crontab 运行它时,它不会打印计数。

答案1

我猜原因在于你的cron环境。也许它不知道psql命令在哪里。

要调查该问题,请尝试向您的 添加另一个脚本cron,使用以下命令:

#/bin/bash

which psql >> /tmp/investigation

将此脚本添加到cron以便尽快执行。我相信/tmp/investigation你会看到 shell 找不到psql命令。要提供 shell,psql你必须PATH在命令执行之前将其添加到变量中。

另请阅读维基百科问题

相关内容