我是编写 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
在命令执行之前将其添加到变量中。
另请阅读维基百科问题