最近公司要求备份数据库,所以就查了比较作的资料。废话不多说,入正题。

目的:定期备份ubuntu下的postgres数据库,打包上传到指定ftp服务器。

经过查找资料,解决方法:

①编写备份数据库、打包压缩、上传指定ftp的脚本。

②将该脚本加入到ubuntu定期计划任务crontab中。

下边是执行的步骤:

①编写shelll脚本:bk.sh,对于对shell脚本不了解的,可以百度w3cshool shell。

最好用root用户编写:su root.

编写完后,添加执行权限,新编写的shel默认没有执行权限,chmod 777 bk.sh.这样才能执行。

执行脚本:sh bk.sh    或者 直接运行./bk.sh.

先测试一下bk.sh。看看是否有问题,里边已经有注释。

注意:bk.sh中涉及路径的都要使用据对路径。因为在crontab中执行时,与在终端执行不同,因为在终端中执行时,有临时的环境变量记载当前的执行路径,

这样执行时可以更加相对路径找到,可是在crontab中就没有,所以只能用绝对路径

②编写crontab文件,使bk.sh定期执行。注意是root用户。

vi  /etc/crontab

在相同格式的地方加上:* * * * * root 脚本绝对路径 >>BackData.log

保存即可,因为系统级只需保存即可生效。我验证过。

这里是完成过程中遇到的问题和解决方案:

问题1:

关于crontab有两种方式,一个是/etc/crontab。另一个是crontab -e。不知道两者的区别?

答案:前者系统级别的,后者是用户级别的。最好用前者,原因crontab详解1.

补充:

  1. . 使用crontab -e命令
  2. 这个命令的使用比较简单。直接输入
  3. ~# crontab -e
  4. 就会打开一个编辑窗口,第一行会有内容格式的提示:
  5. # m h dom mon dow command
  6. 具体意义表示:分钟 小时 日期 月份 星期 命令,在某月(mon)的某天(dom)或者星期几(dow)的几点(h24小时制)几分(m)执行某个命令(command),*表示任意时间。例如:
  7. * * * * /home/meng/hello.sh
  8. 就是:每小时的03时执行/home/meng/下的hello.sh脚本。
  9. 在保存之后,根据屏幕下面的提示输入Ctrl+X退出,此时会提示是否保存,输入Y;提示输入文件名,并且有一个临时的文件名,由于只是测试,直接回车保存。
  10. 注意:在完成编辑以后,要重新启动cron进程:
  11. ~# /etc/init.d/cron restart
  12. 观察运行结果,会发现hello.sh会每隔一小时,在03分时被执行一次。
  13.  
  14. 在使用这个命令时,最大的担心就是在系统重启以后是否还能顺利执行呢?我重启系统以后发现一切正常,于是打消了这个顾虑。但是,仍然有一个问题,一般情况下,服务器都是在重启后处于登录状态下,并没有用户登入。那么如果我在执行crontab -e命令时,不是使用root账户,那么在系统重启之后是否还会顺利执行呢?
  15.  
  16. . 编辑crontab文件
  17. crontab位于/ect/文件夹,在http://wiki.ubuntu.org.cn/CronHowto上有关于它的详细介绍,但是我看的不是太懂。
  18. 打开crontab文件,如果没有编辑过可以看到如下类似的内容:
  19. # /etc/crontab: system-wide crontab
  20. # Unlike any other crontab you don't have to run the `crontab'
  21. # command to install the new version when you edit this file
  22. # and files in /etc/cron.d. These files also have username fields,
  23. # that none of the other crontabs do.
  24. SHELL=/bin/sh
  25. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  26. # m h dom mon dow user command
  27. * * * * root cd / && run-parts --report /etc/cron.hourly
  28. * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
  29. * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
  30. * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
  31. 由于对脚本的认知有限,不能详细解释每个命令的含义。在第10行,同样定义了文件内容的格式。可以看到比使用crontab -e命令时,多了一个user。它表示了执行命令的用户,如果是root,就表明是系统用户。于是,我加了如下一行:
  32. * * * * root /home/meng/hello.sh
  33. 然后保存文件即可,我验证过,不需要重启。

crontab详解1

  1. 关于crontab:
  2.  
  3. crondcrontab
  4.  
  5. cronlinux提供的一种服务器,用于定期执行shell命令。主要由两部分组成
  6.  
  7. crondcron服务的守护进程,用于定期调度
  8. crontabcron提供的UI,用于编辑调度计划
  9. crontab的使用方法,大家可以man一下,如下图:
  10.  
  11. clip_image002
  12.  
  13. 主要有三个选项:
  14.  
  15. “-e”编辑:与vim类是,但是在保存退出时,他会帮你检查任务语法;
  16. “-l”列举所有任务;
  17. “-r”删除所有任务;
  18. P.S.: 目前介绍的是基于当前用户的crontab,系统级别的crontab见后面介绍。
  19.  
  20. 基本语法
  21.  
  22. cron的语法很简单,如下:
  23.  
  24. 【调度频率】 shell命令
  25.  
  26. 看个例子:
  27.  
  28. clip_image004
  29.  
  30. 可以看出,前面分别是分钟,小时,天,月和周,最后是shell命令。cron调度的最小频率为1分钟。上面这段调度的意思是:“每天1030分,执行/some/path/do_something.sh”。
  31.  
  32. 以上命令中每一块的具体意义如下:
  33.  
  34. 意义
  35.  
  36. 分钟
  37.  
  38. 小时
  39.  
  40.  
  41. 月份
  42.  
  43.  
  44. 命令
  45.  
  46. 范围
  47.  
  48. -
  49.  
  50. -
  51.  
  52. -
  53.  
  54. -
  55.  
  56. -
  57.  
  58. shell命令
  59.  
  60. P.S.: “周”这一栏中07都代表周日
  61.  
  62. P.S.: 每个月的最后一日无法由crontab直接支持,需要通过脚本判断,参见这里。
  63.  
  64. P.S.: 命令最好是绝对路径
  65.  
  66. 还有一些辅助的符号,可以借助他们写出更灵活的调度
  67.  
  68. 特殊字符
  69.  
  70. 代表意义
  71.  
  72. *(星号)
  73.  
  74. 代表任何时候都接受,比如上面的例子,day,monthweek为“*”,表示无论那个月,那一天,周几,都在1030分执行命令。
  75.  
  76. ,(逗号)
  77.  
  78. 并列时间。举个例子:
  79.  
  80. * ,,, * * * command
  81.  
  82. 上面的意思是在3点,6点,9点或12点,执行命令。
  83.  
  84. -(减号)
  85.  
  86. 连续区间。举个例子:
  87.  
  88. * - * * * command
  89.  
  90. 上面的意思是从9点到17点,每一分钟都要执行这个任务
  91.  
  92. /n(斜线)
  93.  
  94. n代表数组,表示每隔n个单位之间,比如每隔5分钟,可以写成下面
  95.  
  96. */ * * * * command
  97.  
  98. 一些例子
  99.  
  100. * mail benben < /home/dmtsai/lover.txt // 每一年11月27日23分59 秒发一封情书给benben
  101. * * mail all_members < weekily_report_notify // 每周五5点整,提醒所有组员发周报
  102. 系统级的crontab
  103.  
  104. 系统级的crontab只有root权限有权编辑,该crontab是一个文件,位置为/etc/crontab
  105.  
  106. 系统级别的crontab的语法与上面稍微不一样,需要在频率和命令之间添加命令执行者,如下所示,并且可以添加一些全局变量,在调度中使用:
  107.  
  108. clip_image006
  109.  
  110. 详细的系统级调度可以参见这里。
  111.  
  112. 这里需要强调/etx目录下几个与cron有关的目录和文件,如下所示
  113.  
  114. clip_image008
  115.  
  116. cron.d:目录,此目录下以及子目录中所有符合调度语法的文件都会被执行
  117. cron.denycron.allow:此文件记录拒绝和允许执行的帐号,cron.allow的优先级大于cron.deny,建议一般只留一个就可以
  118. cron.daily/hourly/monthly/weekly:这些目录里面全部都是脚本,分别在指定的时间里面执行。
  119.  
  120. 绝对路径
  121.  
  122. 虽然crontab执行,可以理解为手动执行的定时触发。但是,执行过程中的路径仍然有所区别,很多情况下手动执行成功,但是crontab不成功,多半是由于采用了相对路径。所以,使用crontab时,尽量采用绝对路径。结果一些实践,总结了一条经验:如果命令手动可以执行成功,但是crontab失败,那么就需要重点关注相关路径问题。

crontab详解2

ubuntu crontab 定时备份postgres数据库并上传ftp服务器的更多相关文章

  1. 使用bat批处理文件定时自动备份oracle数据库并上传ftp服务器

    一.使用bat批处理文件备份oracle(前提是配置好oracle数据库客户端) @echo off set databasename=orcl  //数据库名 set username=ninic ...

  2. linux下使用crontab定时备份MYSQL数据库的方法:

    摘要 linux下使用crontab定时备份MYSQL数据库的方法: 只需按照下面3步做,一切都在你的掌控之下: 第一步:在服务器上配置备份目录代码: ------------------------ ...

  3. Linux下自动备份MySQL数据库并上传到远程FTP服务器

    Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明:  1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...

  4. 备份MySQL数据库并上传到阿里云OSS存储

    1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 官网及文档: htt ...

  5. ubuntu 创建定时备份pg数据库定时任务

    ubuntu创建定时备份数据库定时任务 一.命令文件 创建db_back.sh #!/bin/bash echo "start backup" /usr/lib/postgresq ...

  6. Linux 使用crontab定时备份Mysql数据库

    项目中数据库的数据是至关重要的!在实际项目中,遇到有客户机房断电导致数据库数据丢失的问题,又因为备份容灾不及时,导致部分数据恢复不了,而刚好这部分丢失的数据对于客户来说又是至关重要的,那么怎么办呢?盲 ...

  7. (转)linux自动备份oracle数据库并上传到备份服务器 脚本实现

    实际项目中,备份数据是不可缺少的一步,完成数据的自动备份减少个人的工作量,是我们的目标.之前很少写过脚本,不过这些简单的操作还是可以做到的!话不多说,开始具体介绍:oracle版本:10.2.0操作系 ...

  8. C#对.CSV格式的文件--逗号分隔值文件 的读写操作及上传ftp服务器操作方法总结

    前言 公司最近开发需要将数据保存到.csv文件(逗号分隔值 文件)中然后上传到ftp服务器上,供我们系统还有客户系统调用,之前完全没有接触过这个,所以先来看看百度的解释:逗号分隔值(Comma-Sep ...

  9. Linux小工具:文件上传ftp服务器

    工作期间,每次将文件上传至ftp服务器时,均需要手工输入ip.用户名.密码等,因此,考虑编写脚本完成文件的上传任务.具体的脚本sync.sh如下: #!/bin/bash source ~/.bash ...

随机推荐

  1. tomcat下部署可以访问的文件夹

    项目名#文件夹名#文件夹名.xml <Context docBase="D:\文件夹名\r文件夹名"/> 例如: test#zhang#test1.xml <Co ...

  2. 如何制作prezi swf格式字体(prezi 中文字体)

    如何制作prezi swf格式字体(prezi 中文字体) 文/玄魂 前言 Prezi软件虽然没有正式进入中国,但是中国的Prezi爱好者却在不遗余力的推广着Prezi.我接触这款软件比较晚,但是从接 ...

  3. win7下Oracle 11的安装

    把下载的win32_11gR2_database_1of2.zip和win32_11gR2_database_2of2.zip解压到一个database文件夹下,运行安装文件   Oracle11的卸 ...

  4. 怎样用VB编写.DLL动态链接库文件

    VB一般可以生成两种特殊的DLL,一个是ActiveX DLL和ActiveX Control(*.ocx).这两种DLL都是VB支持的标准类型,在VB自身的例子中有,你可以参考.更详细的介绍可以参考 ...

  5. Weblogic发布小问题——weblogic.descriptor.DescriptorException: VALIDATION PROBLEMS WERE FOUND

    前几天发布应用时出现了如下所示的一段错误提示信息: weblogic.descriptor.DescriptorException: VALIDATION PROBLEMS WERE FOUND pr ...

  6. PagedList.MVC分页

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  7. 2016-03-24:Windows内存泄露分析工具

    参考资料 100%正确的内存泄漏分析工具 ------ tMemMonitor (TMM)

  8. HTML5-新API选择器

    新的选择器document.querySelector("selector");selector:根据CSS选择器返回第一个匹配到的元素,如果没有匹配到,则返回null;支持: C ...

  9. 在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client

    在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client   阅读目录 验证代码流程 Refreshing a Token Built-In Providers 这个包能够让你 ...

  10. java 个人总结

    每周课程总结链接: 第一周 第二周 第三周 第四周 第五周 第六周 第七周 第八周 第九周 第十周 java实验报告链接: 实验一 实验二 实验三 实验四 实验五 代码托管链接 课程收获: 学习任何语 ...