我已尝试使用以下Shell脚本运行cron作业。
#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
gsutil cp gs://api-bucket/order_status.csv order_status.csv
psql -d apidb -U apidb << EOF
DELETE FROM apidbgermany.order_status;
\copy apidb.order_status from '/u01/app/postgres/data/silver01/order_status.csv' delimiter ',' CSV ;
EOF
我的cronjob看起来像这样。
* * * * * /u01/app/postgres/data/silver01/order_status.sh &>/tmp/mycommand.log
但是,如果我在命令行中手动执行外壳文件,则效果很好。
要访问远程服务器,您应该以这种方式执行命令psql
:
psql -h postgress_host -d apidb -U apidb << EOF
....
否则psql
尝试连接本地服务器。当创建cron脚本时,请始终使用可执行文件的填充路径
/usr/bin/psql ....
(例如)
并添加为脚本行的第二行,如:
source ~/.bash_profile
或
source ~/.bashrc
取决于您的环境设置在哪里
[另外,请直接使用pg_cron扩展名,它将为您解决此问题。您可以从postgres内部设置分支。pg_cron extension