crontab定时任务备份数据库

crontab定时任务备份数据库

配置了定期备份数据库的任务,方便多了

接上篇文章,把命令行复制到crontab里发现没法执行。研究了一下,原来还不能直接扔进crontab里。原因一是crontab执行的环境不同,二是里边的%还需要转义,所以命令会执行失败。

经过折腾,终于配置好了,每天夜里24点自动备份数据库。

0 0 * * * PGPASSWORD='password' /usr/bin/pg_dump -U postgres -p 5432 -h 127.0.0.1 -d FMS -Fc -f /home/sysadmin/FMS_BACKUP/FMS_$(date +\%Y\%m\%d_\%H\%M\%S).dump >/dev/null 2>&1

这里边首先是要在命令行里先提供变量PGPASSWORD ,然后时间字符串里所有%都改成\% ,再把标准输出和错误输出都重定向到null设备就可以了。

Python版本的备份

一开始crontab没折腾成功的时候,用python写了个脚本,放在crontab里运行成功了,原理也是一样的:

import subprocess

env = {
    'PGPASSWORD':'password'
}


subprocess.run(
    '/usr/bin/pg_dump -U postgres -p 5432 -h 127.0.0.1 -d FMS -Fc -f /home/sysadmin/FMS_BACKUP/FMS_$(date +%Y%m%d_%H%M%S).dump', shell=True,
    env=env,
)

通过python运行不需要进行转义,但由于命令行环境依然还是crontab的环境,所以提供环境变量PGPASSWORD即可。

在Python里备份成功,其实也意味着可以把这个程序放在前台提供手工备份的功能了。

LICENSED UNDER CC BY-NC-SA 4.0
Comment