美文网首页
crontab之坑爹的环境变量

crontab之坑爹的环境变量

作者: 3c69b7c624d9 | 来源:发表于2017-11-30 02:04 被阅读619次

如前文所述,最近在做mysql的备份mysqldump之跳过指定表

问题描述

在使用crontab的时候再次碰到了错过很多次的神坑。特此记录一下

  1. 手动执行脚本没有问题,crontab执行无结果
  2. 手动执行脚本无异常,crontab执行结果异常(不一致)

脚本如下

    #!/bin/bash
    /usr/local/mysql/bin/mysqldump -uroot -pXXX --skip-lock-tables --databases f6dms_trial $(mysql -uroot -pXXX -Df6dms_trial -Bse "show tables like 'tm_monitor_avg_price_%'"|awk '{print "--ignore-table=f6dms_trial."$1}'|xargs)| gzip > /data/backup/f6dms-trial_`date '+%Y-%m-%d-%H:%M:%S'`.sql.gz;
    /usr/local/mysql/bin/mysqldump -uroot -pXXX --skip-lock-tables --databases f6db_trial f6report_new_trial | gzip > /data/backup/f6db-trial_`date '+%Y-%m-%d-%H:%M:%S'`.sql.gz;
    30 1 * * * /data/shell/backupdb.sh;

注意到写到mysqldump是用了绝对路径

  1. 第一次写的时候没有用绝对路径,执行后直接没有dump,遂改造成用绝对路径(没有读取默认环境变量,导致无法识别mysqldump指令)
  2. 第二次改造时忘记了这件事情直接使用了mysql

默认情况下直接手动执行没有问题(读取到了当前环境变量)

当使用crontab时,并不会默认读取当前环境变量,导致备份数据库依然全备份 (mysql指令不能识别导致无法拼接出 --ignore-table)

解决方案

  1. 使用绝对路径,不关心path
        #!/bin/bash
        /usr/local/mysql/bin/mysqldump -uroot -pXXX --skip-lock-tables --databases f6dms_trial $(/usr/local/mysql/bin/mysql -uroot -pXXX -Df6dms_trial -Bse "show tables like 'tm_monitor_avg_price_%'"|awk '{print "--ignore-table=f6dms_trial."$1}'|xargs)| gzip > /data/backup/f6dms-trial_`date '+%Y-%m-%d-%H:%M:%S'`.sql.gz;
        /usr/local/mysql/bin/mysqldump -uroot -pXXX --skip-lock-tables --databases f6db_trial f6report_new_trial | gzip > /data/backup/f6db-trial_`date '+%Y-%m-%d-%H:%M:%S'`.sql.gz;
    
  1. 默认读取当前环境变量,因此在脚本中加入如下
        #!/bin/bash
        ###################
        . /etc/profile
        . ~/.bash_profile
        ##################
        mysqldump -uroot -pXXX --skip-lock-tables --databases f6dms_trial $(mysql -uroot -pXXX -Df6dms_trial -Bse "show tables like 'tm_monitor_avg_price_%'"|awk '{print "--ignore-table=f6dms_trial."$1}'|xargs)| gzip > /data/backup/f6dms-trial_`date '+%Y-%m-%d-%H:%M:%S'`.sql.gz;
        mysqldump -uroot -pXXX --skip-lock-tables --databases f6db_trial f6report_new_trial | gzip > /data/backup/f6db-trial_`date '+%Y-%m-%d-%H:%M:%S'`.sql.gz;
此问题已经踩过多次坑,当牢记!!!

相关文章

  • crontab之坑爹的环境变量

    如前文所述,最近在做mysql的备份mysqldump之跳过指定表 问题描述 在使用crontab的时候再次碰到了...

  • 坑爹

    坑爹…豆瓣就是个坑爹货

  • ubuntu下crontab默认编辑器从nano修改为vim

    ubuntu下crontab的默认编辑器是nano,更喜欢用vim编辑。当crontab程序启动时,会读取环境变量...

  • 坑爹的爹坑

    01 村里的奇葩事,真事!就是奇葩的让人咂舌。张明白有一个‘奇葩’的爹,人称张算计。 清明节,村里的张算计死了。人...

  • 坑爹?爹挖的坑

    坑爹的儿子都是被爹坑的 白米先生 字数 474 · 阅读 1 2020-06-13 09:35 说起来像绕口令。 ...

  • 坑爹的爹

    2023年1月31日 星期三 下午4:44 昨晚上娃爹又一晚上没回来了! 第一次一晚上跟他正面对决!从来没有这么直...

  • 2018-02-08

    坑爹,坑娘。还没见过坑儿子的

  • 近期linux shell脚本总结

    crontab执行脚本时是不带任何环境变量的,用sh测试正常运行的脚本在布置成crontab定时任务后不一定能正常...

  • linux crontab: 定时任务

    参考 crontab 定时任务 Linux之crontab定时任务

  • crontab定时执行PHP脚本

    1.脚本要有执行权限。 2.bash环境变量和crontab环境变量不一致问题,需要引入bashrc 3.cron...

网友评论

      本文标题:crontab之坑爹的环境变量

      本文链接:https://www.haomeiwen.com/subject/qoymbxtx.html