• crontab的两大坑:百分号和环境变量


    今天想给服务器加个自动备份mysql数据库的功能(别怪我这么久才加,阿里云每天全盘备份的,不怕丢数据库),本以为只要5分钟就能搞定的,结果入了两个大坑。

    我的crontab是这样写的:

     * * * mysqldump -u user -pxxxx database > "/alidata/backup/imyzf.com/$(date +%F %T).sql"

    首先,是百分号(%)。

    在crontab -e中输入的命令里,第一个%会被认为是标准输入的开始,接下来的%都会被认为是换行。所以在这里原本只是格式化日期的%被当成了标准输入,命令就出问题了。(详见:http://www.hcidata.info/crontab.htm)
    解决方案有两种,一是用上面链接里提到的sed;我采用了另外一种方法,把命令写到了sh文件里(为什么?因为还有一个大坑)。

    然后,是环境变量。

    即使解决了上面的问题,还是不能正常执行任务,因为crontab的环境变量是另外定义的。通过cat /etc/crontab你会发现默认的PATH是/sbin:/bin:/usr/sbin:/usr/bin,而我们的mysqldump是在/alidata/server/mysql/bin里的。

    所以要修改默认设置,或者简单点,在sh文件里另外加上一行修改PATH,最后成了这样:

    #!/bin/bash
    PATH="$PATH:/alidata/server/mysql/bin"
    mysqldump -u user -pxxxx database > "/alidata/backup/www.imyzf.com/$(date +%F %T).sql"

    然后,我的crontab写成了这样(使用/dev/null是为了丢弃mysqldump使用标准输出的提示):

     * * * /alidata/backup/www.imyzf.com/backup.sh > /dev/null 2>&1

    好了,终于搞定了!

  • 相关阅读:
    关于 OpenSmtp 邮件标题过长后出现乱码问题的解决
    用于解析 sohu 新闻页面的 XSLT 文件
    CEGUI 0.7x实现下划线描边图文混排等效果
    Hash算法说明
    D3DXMatrixShadow 函数
    DLL动态链接库和LIB静态链接库之程序员经验分析
    printf格式控制符的完整格式(转载)
    深入说明HDR技术
    Irrlicht不定期分析
    8.3实例程序:平面阴影
  • 原文地址:https://www.cnblogs.com/Dhouse/p/7053080.html
Copyright © 2020-2023  润新知