一个Linux脚本,从mysql导出CSV文件,并打成tar包,手工执行的时候,正常打包。但是放进定时任务去执行就会打空包,里面没有数据。
脚本详细代码如下:
#! /bin/bash
PWD=`pwd`
DATA_DIR=/data/gtpdata/ecmpshell
CHANEL_DIR=/data/gtpdata/ECMP_Send
SUC_DIR=/data/gtpdata/ECMP_Send.succ
# adju‘st for data date terms in days
DAYS=3
# adjust for data date need to export
#DATE_PRE_FIX=20190613
# comment this line if use an assigned date
DATE_PRE_FIX=`date "+%Y%m%d"`
cd $DATA_DIR
if [ ! -f "./$DATE_PRE_FIX-WIND.tar" ];then
echo "文件不存在"
else
rm ./$DATE_PRE_FIX-WIND.tar
fi
mysql -h 76.236.161.26 -uwind -pebk#1Dcc winddb<<EOF
SELECT a.S_INFO_WINDCODE, a.B_INFO_FULLNAME AS C_FULLNAME, a.B_INFO_ISSUER AS C_ISSUER, a.B_ISSUE_FIRSTISSUE AS D_ISSDATE,
a.B_INFO_ISSUEPRICE AS F_PRICE, a.B_INFO_PAR F_PAR_VALUE, a.B_INFO_COUPONRATE AS F_FIXRATE, a.B_INFO_CARRYDATE AS D_VDATE,
a.B_INFO_MATURITYDATE AS D_MDATE, a.B_INFO_TERM_YEAR_, a.B_INFO_TERM_DAY_, a.B_INFO_INTERESTFREQUENCY AS C_INTPMTFREQ,
a.B_INFO_INTERESTTYPE AS C_RATECODE, a.CRNCY_CODE AS C_CCY, a.S_INFO_NAME AS C_NAME, a.S_INFO_EXCHMARKET AS C_MARKETISSUE,
a.B_INFO_GUARANTOR AS C_GUARANTEE, a.B_INFO_SPECIALBONDTYPE AS C_TYPE, a.B_INFO_ACTUALBENCHMARK AS c_basis
FROM cbonddescription a
where STR_TO_DATE(a.B_ISSUE_FIRSTISSUE, '%Y%m%d') > date_sub(now(), interval 7 day)
into outfile '$DATA_DIR/$DATE_PRE_FIX-cbonddescription.csv'
CHARACTER SET gbk
fields terminated by '^*'
optionally enclosed by '"';
SELECT a.S_INFO_WINDCODE AS C_SECURITY,a.ANN_DT AS D_VDATE,a.B_INFO_CREDITRATING AS C_CREDIT_RATING,a.B_INFO_CREDITRATINGAGENCY AS C_CUSTOMERNAME,
a.B_INFO_CREDITRATINGEXPLAIN AS C_CRAT_DESC FROM cbondrating a
where a.B_RATE_STYLE='1' and STR_TO_DATE(a.ANN_DT, '%Y%m%d') > date_sub(now(), interval 7 day)
ORDER BY a.S_INFO_WINDCODE,STR_TO_DATE(a.ANN_DT, '%Y%m%d')
into outfile '$DATA_DIR/$DATE_PRE_FIX-cbondrating.csv'
CHARACTER SET gbk
fields terminated by '^*'
optionally enclosed by '"';
select t.S_INFO_COMPNAME,t.ANN_DT,t.B_INFO_CREDITRATING,IFNULL(cf.B_INFO_CREDITRATING_NAME,t.B_INFO_CREDITRATINGAGENCY),t.B_INFO_CREDITRATINGEXPLAIN
from cbondissuerrating t
LEFT JOIN cbondratingdefinition cf on t.B_INFO_CREDITRATINGAGENCY=cf.B_INFO_CREDITRATINGAGENCY
where t.B_RATE_STYLE='1'
and STR_TO_DATE(t.ANN_DT, '%Y%m%d') > date_sub(now(), interval 7 day)
into outfile '$DATA_DIR/$DATE_PRE_FIX-cbondissuerrating.csv'
CHARACTER SET gbk
fields terminated by '^*'
optionally enclosed by '"';
SELECT * FROM (
select t.S_INFO_WINDCODE,t.TRADE_DT,t.B_ANAL_NET_CNBD,B_ANAL_YIELD_CNBD,t.B_ANAL_MODIDURA_CNBD,t.B_ANAL_PRICE_CNBD,t.B_ANAL_ACCRINT_CNBD
from cbondanalysiscnbd1 t
union all
select t.S_INFO_WINDCODE,t.TRADE_DT,t.B_ANAL_NET_CNBD,B_ANAL_YIELD_CNBD,t.B_ANAL_MODIDURA_CNBD,t.B_ANAL_PRICE_CNBD,t.B_ANAL_ACCRINT_CNBD
from cbondanalysiscnbd4 t
union all
select t.S_INFO_WINDCODE,t.TRADE_DT,t.B_ANAL_NET_CNBD,B_ANAL_YIELD_CNBD,t.B_ANAL_MODIDURA_CNBD,t.B_ANAL_PRICE_CNBD,t.B_ANAL_ACCRINT_CNBD
from cbondanalysiscnbd5 t
)a where STR_TO_DATE(a.TRADE_DT, '%Y%m%d') > date_sub(now(), interval 7 day)
ORDER BY a.S_INFO_WINDCODE,STR_TO_DATE(a.TRADE_DT, '%Y%m%d')
into outfile '$DATA_DIR/$DATE_PRE_FIX-cbondanalysiscnbd.csv'
CHARACTER SET gbk
fields terminated by '^*'
optionally enclosed by '"';
echo "quit finish"
quit
EOF
echo "cvf finish"
tar -cvf ./$DATE_PRE_FIX-WIND.tar ./$DATE_PRE_FIX-cbonddescription.csv ./$DATE_PRE_FIX-cbondrating.csv ./$DATE_PRE_FIX-cbondissuerrating.csv ./$DATE_PRE_FIX-cbondanalysiscnbd.csv
echo "toucht finish"
touch ./$DATE_PRE_FIX-READY
echo "mv finish"
mv ./$DATE_PRE_FIX-READY $CHANEL_DIR
echo "mv finish"
mv ./$DATE_PRE_FIX-WIND.tar $CHANEL_DIR
echo "rm finish"
rm ./$DATE_PRE_FIX-cbonddescription.csv
rm ./$DATE_PRE_FIX-cbondrating.csv
rm ./$DATE_PRE_FIX-cbondissuerrating.csv
rm ./$DATE_PRE_FIX-cbondanalysiscnbd.csv
cd $PWD
echo "exit finish"
exit 1
可能是mysql路径找不到,建议写全路径或者在脚本开头声明下mysql安装目录下的bin目录,如 `/data/services/mysql/bin/mysql`,或者在脚本最前面添加 source声明