Linux 使用cron调度程序调用shell脚本时,该脚本不起作用

Linux 使用cron调度程序调用shell脚本时,该脚本不起作用,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,我有这个sh脚本 SPTH="/home/db_backup/log/log_"$(date +'%d-%m-%Y %H:%M')".txt" echo "===DUMP started at $(date +'%d-%m-%Y %H:%M:%S')===" >> "$SPTH"; DBNAME="test" PGPASSWORD=postgres psql -U postgres -d postgres -c "CREATE DATABASE $DBNAME"; PGPASSWO

我有这个sh脚本

SPTH="/home/db_backup/log/log_"$(date +'%d-%m-%Y %H:%M')".txt"
echo "===DUMP started at $(date +'%d-%m-%Y %H:%M:%S')===" >> "$SPTH";
DBNAME="test"

PGPASSWORD=postgres psql -U postgres -d postgres -c "CREATE DATABASE $DBNAME";
PGPASSWORD=postgres psql -U postgres -d $DBNAME -c "ALTER SCHEMA public RENAME TO public_old";
for entry in /home/SQL/*.*
do
    echo "$entry"
    SUBSTRING=$(echo $entry| cut -d'/' -f 4)
    #echo $SUBSTRING
    SCHEMA=$(echo $SUBSTRING| cut -d'.' -f 1)
    echo $SCHEMA
    echo "===================== CREATING public SCHEMA =====================" >> "$SPTH";
    PGPASSWORD=postgres psql -U postgres -d $DBNAME -c "Create Schema public";
    echo "===================== RESTORING DATA OF $SCHEMA =====================" >> "$SPTH";
    PGPASSWORD=postgres psql -U postgres -d $DBNAME -f "$entry";
    echo "===================== DELETING SCHEMA $SCHEMA=====================" >> "$SPTH";
    PGPASSWORD=postgres psql -U postgres -d $DBNAME -c "DROP SCHEMA $SCHEMA CASCADE";
    echo "===================== RENAMING SCHEMA PUBLIC TO $SCHEMA=====================" >> "$SPTH";
    PGPASSWORD=postgres psql -U postgres -d $DBNAME -c "ALTER SCHEMA public RENAME TO $SCHEMA";
    echo "===================== RENAMING SQL FILE =====================" >> "$SPTH";
    mv /home/SQL/{$SUBSTRING,DONE--$SUBSTRING};
    echo "===================== DONE =====================" >> "$SPTH";
done
PGPASSWORD=postgres psql -U postgres -d $DBNAME -c "ALTER SCHEMA public_old RENAME TO public";
echo "===DUMP finished at $(date +'%d-%m-%Y %H:%M:%S')===" >> "$SPTH";
当我使用命令运行此命令时

sh script.sh
它工作正常,按照我的预期工作,并且运行每一个命令。但是当我使用cron调度程序运行这个脚本时,与POSTGRES相关的命令并没有执行。我还需要这个shell脚本中的每个命令的日志

我想使用cron调度程序运行此脚本


我错在哪里?

cron的环境与shell中的用户不同。我想这是你的问题哦!谢谢你能建议一些更好的方法来实现我想要的吗?基于@Jens写的原因,请尝试在脚本中设置postgres命令的绝对路径,或者在脚本中设置path环境变量。cron的环境与shell中的用户不同。我想这是你的问题哦!谢谢你能建议一些更好的方法来实现我想要的吗?基于@Jens写的原因,请尝试在脚本中设置postgres命令的绝对路径,或者在其中设置path环境变量。