linux定时任务crontab自动

北京治皮肤病医院 http://disease.39.net/bjzkbdfyy/210805/9278663.html

最近公司开发了一个新项目,为了保证数据安全,需要定时备份数据库到云存储。大概的需求是:在云服务器上执行定时任务,定时任务自动备份mysql数据库,压缩备份文件并上传到云存储。

在处理过程中出现了一下小问题,在此记录一下。公司使用的是亚马逊的AWS云服务(EC2+S3),操作系统是linux,所以对所有的linux系统环境都有参考价值,具体操作如下:

编写备份脚本

备份脚本的大概逻辑是:创建一个以当前日期命名的临时目录;执行mysql备份命令备份数据库至sql文件;执行tar命令打包压缩备份文件;执行aws-cli命令上传压缩包到S3存储桶;上传完成后清楚临时文件。

编设置定时任务

备份脚本编写完成后需要设置系统定时任务,由定时任务制动执行。

可以通过crontab-e编辑定时任务,如下,表示每天凌晨2:40执行备份脚本:

***sh/home/ec2-user/tempsqlbak/autosqlbak.sh

至此,自动备份需求完成。

遇到的问题

问题1、定时任务的执行时间和系统时间不一致。

因为AWS云服务默认采用的是美国时间,所以创建云服务后首先要修改时区和系统时间。具体方法可以百度一下。

确认系统时间正常后必须重启定时任务服务,否则定时任务执行时间会和系统时间不同步。命令如下:

sudoservicecrondrestart

问题2、如何通过命令行上传备份文件到S3(对象存储)

AWS官方提供了aws-cli客户端工具,可以通过这个客户端工具实现S3的上传和下载。具体安装和使用方法,见历史文章

Linux安装aws-cli并通过aws命令上文件到S3存储桶

问题3、使用aws-cli上传S3时命令行正常,当定时任务执行失败

因为aws命令和系统内置Python冲突问题。

解决方法:在执行aws命令时使用绝度路径:




转载请注明:http://www.aierlanlan.com/rzfs/3240.html