前言:
如题所示,本文是从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了;