缘起:
公司有个爬虫项目,它会爬取一些指定的数据到测试服务器的数据库,现状是
①每日我早上启动,到晚上关闭(中间可能会自动停);
②我从测试服务器导出新增数据给老大,老大负责放到线上。
愿景:
①爬虫定时自动启停;
②数据定时自动导出,上传到老大指定的一个位置,剩下的他接管。
打怪记录:
-
脚本1,启动爬虫项目:
没什么好说的,因为项目已经将所有爬虫的启动集中到main.py文件中,记得改掉文件权限。 -
脚本2,杀死爬虫项目:
问题①:根据进程名中关键字杀死进程及其子孙进程的命令
ps -ef | grep procedure_name | grep -v grep | awk '{print $2}' | xargs kill -9
-
脚本3,自动导出数据库数据,上传到服务器
问题①:数据库是mysql,我使用mysqldump命令不想写入明文密码;
问题②:我导出的数据不想有创建表结构的语句;
问题③:我导出数据时,不想锁表,因为可能爬虫还在爬,在输出的文件里,也不想增加 LOCK TABLES t WRITE;
问题④:我只想导出时间是最新的数据。
解:这四个问题都可以在一行命令内解决
mysqldump --default-file=配置文件 --no-create-info --single-transaction --add-locks=0 --where="time > today" --result-file=data.sql;
说明:
--default-file=文件路径,通过配置文件连接mysql客户端,解决了问题①;
--no-create-info 表示不需要导出创建表结构语句;
--single-transaction 导出数据的时候不需要对表加表锁,不影响爬虫;
--add-locks=0 表示输出的文件里,没有插入数据前的锁表语句;
--where=条件,可以指定要导出数据满足的条件
问题⑤:shell脚本中怎样获取当前日期并赋值给变量?
解:
获取当前日期tod=date +%Y-%m-%d
(2019-03-08)
获取昨天日期yes=date -d 'last day' +%Y%m%d
(mac上试了不好使) -
crontab的配置:
参考
网友评论