文档章节

crontab之坑爹的环境变量

Mr_Qi
 Mr_Qi
发布于 2017/07/25 20:07
字数 487
阅读 99
收藏 2

如前文所述,最近在做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;

     

  2. 默认读取当前环境变量,因此在脚本中加入如下
    #!/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;
    

    此问题已经踩过多次坑,当牢记!!!

© 著作权归作者所有

共有 人打赏支持
Mr_Qi

Mr_Qi

粉丝 277
博文 356
码字总数 365332
作品 0
南京
程序员
私信 提问
细述:GoAccess实时日志监控

本文章基于Ubuntu16.04系统/Nginx1.10.3日志环境 注:Nginx使用apt-get方式安装,日志格式为默认 源码安装 $ apt-get install gcc g++ libncursesw5-dev$ wget http://tar.goaccess.io/goac...

问题终结者
08/15
0
0
crontab系统使用雷区(为什么cron任务没运行)

写好的程序,手动执行没问题,上crontab就报错 Crontab任务的执行环境与手动执行时的执行环境不同。 手动执行时,任务的执行环境为当前用户或指定用户的执行环境,典型的执行环境是环境变量,...

panzhc
2014/01/08
0
0
Crontab Job 命令过长的处理

如果您是查crontab命令被截断的问题,请先查下命令中是否存在%没有被转义。 背景 在docker中启动容器,结合django-crontab,可以在容器中传入crontab job具体使用 请参考 django-crontab。然...

lovekwf
02/24
0
0
crontab 执行环境变量的问题

记录一下一个折磨我N天的crontab的问题 问题是这样的 我写了个php脚本run.php ,脚本里面调用了一下hive命令(hadoop相关的东西)生成hive_result.txt,同时在hive命令执行前和执行后都会用php...

loveczp
2013/12/17
4.6K
3
【案例分享】crontab执行脚本异常问题

很多时候我们会遇见这种情况,我们千辛万苦写了一个脚本,经过测试,一切正常,然后放到了crontab里面执行,结果,不管怎么配置,就是执行不正常。 结果发现环境问题,居然是这个异常的元凶。...

智能化IT系统
08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

storm 环境搭建

1.下载解压 下载地址:http://storm.apache.org/downloads.html

MrPei
8分钟前
0
0
Python Base - 读写文件,字符串拼接,单引号

字符转义 读写文件cvs 字符串拼接,替换 import csvcsv_file_name = 'cardbin.csv'# insert into `card_bin_code` (name_of, code_of, card_no_prefix, bank_code) values ('中国银行......

园领T
9分钟前
0
0
基于JQUERY BOOTSTRAP 最简单的loading遮罩层

<%--loading遮罩层--%><div class="modal fade" id="loadingModal" backdrop="static" keyboard="false">   <div style="width: 200px;height:20px; z-index: 20000; position: abs......

颖辉小居
10分钟前
0
0
springboot+kafka

1,首先springboot对kafka的支持也很好,同样是在配置文件中配置好参数,然后就可以直接使用。先说一下,很简单,,,不要怕 2,我用的依赖是 <dependency> <groupId>org.springframewor...

我真是小菜鸡
14分钟前
2
0
webservice动态客户端自我记录备份(spring boot)

动态客户端相比直接调用webservice的客户端代码要简单很多,但实际上很多工作是java自己替我们做掉了。简单记录一下内容,以备后续使用: pom文件只需要引入: <!-- CXF webservice --><de...

checkboxMan
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部