shell定时脚本,从0开始,csv格式数据定时导入psql数据库shell脚本例子

前言:
如题所示,本文是从0开始,面向新手的。
有一定基础的同学,可以自行跳到自己有需要的部分,进行选择观看。
本文章涉及的所有命令和脚本,都经过笔者亲测可用。
如有问题或笔误,欢迎沟通和指正。

一、shell脚本的相关知识和第一个shell脚本例子编写;
对于没接触过shell脚本的朋友,我们先来写一个shell脚本的例子;
1.首先建立一个shell脚本;
在linux上vim demoShell.sh

#/bin/bash
# shell语法中#是注解,上面的#/bin/bash是脚本启动项,一般shell脚本都以这个为开头;

# echo是输出,sh执行脚本的时候,就会把双引号里面的内容展示出来。
# 也可以通过>>(不覆盖之前内容)或者>(覆盖之前内容)将执行时候的echo内容写到指定的地方形成日志;
echo "demoShell start."
# [`date +%y%m%d/%H:%M:%S`]是获取系统当前时间,年月日,时分秒的函数。
#在此输出是为了后面做定时任务,校验定时任务是否生效;
echo "[`date +%y%m%d/%H:%M:%S`]"
echo "demoShell finish." 

可以执行sh demoShell.sh,linux上就会展示输出上面3个echo内容;
2.再写一个启动demoShell.sh的启动脚本runDemoShell.sh,用上面说的>>方法,将执行 demoShell.sh的情况记录到对应文件夹的路径中,方便有错误时候的排查定位;

#/bin/bash
# 1>>的意思是正常运行输入的正常日志,2>>是error日志输入到error日志;
sh /home/admin/demoShell.sh 1>>/home/admin/copyDataShellLog/copyDataShellLog.log 2>>/home/admin/copyDataShellLog_err/copyDataShellLog_err.log

二、用corntab建立定时任务;
首先先了解一下corntab相关知识和常用命令;
crontab 指定执行用户:
可以进入配置文件。此时配置crontab的执行者是当前登入用户,
如果当前用户是root,需要为其他用户配置,可以使用crontab -e -u 用户名。

//查看用户命令;

crontab -l

//设置定时脚本;

crontab -e

//每分钟执行一次;

*/1 * * * * sh /home/admin/runDemoShell.sh

例子:
每 10min 执行一次任务;

*/10 * * * * /scripts/monitor.sh

每四个小时执行一个任务;

0 */4 * * * /scripts/script.sh

常用命令:
//重载配置;

/sbin/service crond reload

//定时启动;

/sbin/service crond start

//定时关闭;

/sbin/service crond stop

//定时重启;

/sbin/service crond restart

//查看定时状态;

/sbin/service crond status

然后按照下面,建立定时任务步骤进行定时任务设置,和检验。
1.使用crontab -e在所需的用户权限下,创建定时任务;
2./sbin/service crond reload 重载配置;/sbin/service crond restart 定时重启;/sbin/service crond status 查看定时状态;
例如我们写一个每分钟执行一次的定时任务
//每分钟执行一次;

*/1 * * * * sh /home/admin/runDemoShell.sh

然后就可以在/home/admin/copyDataShellLog/copyDataShellLog.log日志中,看到每分钟运行一次的定时任务记录;

三、csv格式数据定时导入psql数据库shell脚本例子;
在了解完shell脚本和crontab的相关知识之后,我们来进行实战例子的编写;
例子需求:
在一个数据文件夹/data/sftpuser中有8种名称的数据的压缩包,例如4G_USER_PERCEPTION_H2021102012.tar。
1.用定时任务进行自动执行,并做好日志记录;
2.要根据名称和天粒度,小时粒度,将tar要根据名称和天粒度,小时粒度,将tar(或者lzo)格式压缩包,解压到指定的文件/data/csv/中;
3.将指定文件夹/data/csv/4G_CELL_PERCEPTION_H,解压好的csv文件,导入psql数据库(导入psql数据库,必须以antdb用户权限,才能进行操作。具体例子如下);
4.导入表后,备份/data/sftpuser的文件到新文件夹,并删除/data/csv/4G_CELL_PERCEPTION_H解压完的文件;

脚本例子:

#/bin/bash
#filebak
#file executable: chmod 750 filebak


# 获取指定文件,解压到指定文件夹
cd /data/sftpuser
echo "解压4G_CELL_PERCEPTION数据到/data/4G_CELL_PERCEPTION_H,tar start."

for file in $(ls *|grep CELL_PERCEPTION |grep -E "_[0-9]{10}.csv")
 do
  echo $file 
   tar -xvf /data/sftpuser/$file -C /home/antdb/testForTar/4G_CELL_PERCEPTION_H >/dev/null;
 done;

echo "文件解压完毕,tar finish." 


## 将指定文件夹的csv文件,copy到psql
cd /data/antdb/csv/4G_CELL_PERCEPTION_H
echo "将指定文件夹的csv文件,copy到psql指定表,copy start."

for file in $(ls *|grep CELL_PERCEPTION |grep -E "_[0-9]{10}.csv")
 do
  echo $file 
   psql -d antdb -U antdb  -c "copy tm_qm_cem_cell_perception_h FROM '/data/antdb/csv/4G_CELL_PERCEPTION_H/$file' delimiter '|' csv header;"
 done;

echo "数据导入完毕,copy finish."  


### 复制并压缩,备份/data/sftpuser的数据到/data/antdb/bak/
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
bakdir="/home/antdb/bak/"
filename="`date +%y%m%d`_dataBak.tar.gz"
echo "开始备份,begin bak "

for file in $(ls *|grep CELL_PERCEPTION |grep -E "_[0-9]{10}.csv")
 do
  echo $file 
	if [ ! -x "$bakdir" ];then
	mkdir $bakdir
	fi
	cd $bakdir
	tar cvfz $filename /data/sftpuser
 done;

echo "备份完毕,bak finish. "



### 复制并压缩,备份/data/sftpuser的数据到/home/antdb/bak/
# PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
# export PATH
# bakdir="/home/antdb/bak/"
# filename="`date +%y%m%d`_dataBak.tar.gz"
# echo "开始备份,begin bak "
#  if [ ! -x "$bakdir" ];then
#  mkdir $bakdir
#  fi
#  cd $bakdir
#  tar cvfz $filename /data/sftpuser
# echo "备份完毕,bak finish. "

### 复制并压缩,备份/home/antdb/testForTar/4G_CELL_PERCEPTION_H的数据到/home/antdb/bak/
# PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
# export PATH
# bakdir="/home/antdb/bak/"
# filename="`date +%y%m%d`_dataBak.tar.gz"
# echo "开始备份,begin bak "
#  if [ ! -x "$bakdir" ];then
#  mkdir $bakdir
#  fi
#  cd $bakdir
#  tar cvfz $filename /home/antdb/testForTar/4G_CELL_PERCEPTION_H
# echo "备份完毕,bak finish. "

四、psql相关操作和查验数据质量;

对antdb用户的文件夹,要开通对应权限,和调整成antdb分组;
chmod -R 777 文件夹名
chown antdb:antdb 文件夹名

在antdb用户下,输入psql可进入psql数据库;
\q是退出;
使用 \l 用于查看已经存在的数据库:
接下来使用 \c + 数据库名 来进入数据库:
\d tablename 查看表格信息:
然后就可以通过sql进行查询如:select * from 表名 where 条件 limit 3;
(注意要打上";",不然不会执行;还有尽量打上limit x,不然大数据,展示数据会过多,造成卡顿;)

创建SCHEMA命令为:
CREATE SCHEMA aioss;
\dn – 查看schemas
psql中切换schema:
执行:set search_path to aioss;
后续在执行的操作都是针对test_schema这个schema了;

猜你喜欢

转载自blog.csdn.net/weixin_39434182/article/details/120864780