文档章节

crontab之坑爹的环境变量

Mr_Qi
 Mr_Qi
发布于 2017/07/25 20:07
字数 487
阅读 46
收藏 2
点赞 0
评论 0

如前文所述,最近在做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
粉丝 251
博文 298
码字总数 312931
作品 0
南京
程序员
Crontab Job 命令过长的处理

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

lovekwf ⋅ 02/24 ⋅ 0

crontab系统使用雷区(为什么cron任务没运行)

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

panzhc ⋅ 2014/01/08 ⋅ 0

crontab 执行环境变量的问题

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

loveczp ⋅ 2013/12/17 ⋅ 3

python crontab 坑

最近用Python写了一些数据统计的脚本,并使用crontab自动执行,但是配置crontab总是要过几个坑才行的,这里总结一下这次遇到的坑。 输出 要将crontab命令的输出记录到日志文件中,可以使用重...

大胡桃夹子 ⋅ 2017/12/06 ⋅ 0

Linux定时任务Crontab

1.安装cron vixie-cron软件包是cron的主程序; crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序 2.设置为开机自启 查看crontab服务是否已设置为开机启动,执行命...

_周小董 ⋅ 05/22 ⋅ 0

【小白学云计算】关于Web服务器Nginx反向代理GitHub Page的一点思考(bash脚本)

1 背景 今天处理了下放在腾讯云的网站的服务器的一个小问题。 由于我把简历放在了GithubPage上了,但是本人又不甘心只能墙外人看到,因此就通过墙内腾讯云服务器,配置了nignx做了反向代理到...

⋅ 2017/12/18 ⋅ 0

linux-crontab之环境变量的问题

  前言      在linux服务器上,计划任务基本都是crontab进行管理的。但是有些脚本手动运行都很正常,一放到crontab里面就不执行了。这一般都是环境变量的问题引起的。      环境变...

linux运维菜 ⋅ 06/02 ⋅ 0

Linux crontab命令

前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服...

bill_wu ⋅ 2015/09/10 ⋅ 0

每天一个linux命令(50):crontab命令

前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服...

长平狐 ⋅ 2013/06/17 ⋅ 0

crontab命令、定时任务范例

一、crond crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程, 系统默认安装,且会自启动crond进程, crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的...

nineep ⋅ 2016/09/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

linux 安装docker

通过以下命令下载安装docker wget -qO- https://get.docker.com | sh 执行以上命令后输出以下内容说明安装成功,注意红框中的内容,docker安装成功后默认只有root能使用,红框中给出的提示是...

haoyuehong ⋅ 3分钟前 ⋅ 0

482. License Key Formatting - LeetCode

Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符(排除-)就追加一个-。 Java实现...

yysue ⋅ 22分钟前 ⋅ 0

聊聊spring cloud gateway的LoadBalancerClientFilter

序 本文主要研究一下spring cloud gateway的LoadBalancerClientFilter GatewayLoadBalancerClientAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springfram......

go4it ⋅ 46分钟前 ⋅ 0

详解:Nginx反代实现Kibana登录认证功能

Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操作如何使用Nginx反向代理...

问题终结者 ⋅ 53分钟前 ⋅ 0

002、nginx配置虚拟主机

一、nginx配置虚拟主机可分为三种方式,分别为: 1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站...

北岩 ⋅ 56分钟前 ⋅ 0

shell脚本之死循环写法

最近在学习写shell脚本,在练习if while等流程控制时,突然它们的死循环写法是怎么样的?经过百度与亲测记录如下: for死循环 #! /bin/bashfor ((;;));do date sleep 1d...

hensemlee ⋅ 58分钟前 ⋅ 0

苹果的ARKit2.0有多可怕,看了就知道

序言 ARKit主要由三部分组成: 跟踪(Tracking) 跟踪是ARKit的核心组件之一,其提供了设备在物理世界中的位置与方向信息,并对物体进行跟踪,如人脸。 2.场景理解(Scene Understanding) 场...

_小迷糊 ⋅ 59分钟前 ⋅ 0

5.1 vim介绍 5.2 vim移动光标 5.3 ,5.4vim一般模式下移动光标,复制粘贴

vim命令 vim是vi的一个升级版;vim可以显示文字的颜色 安装vim这一个包vim-enhanced 如果不知道安装包,可以使用 命令下面命令来查看vim命令是那个包安装的。 [root@linux-128 ~]# yum prov...

Linux_老吴 ⋅ 今天 ⋅ 0

vim一般模式

vim 是什么 vim是什么 ? 在之前接触Linux,编辑网卡配置文件的时候我们用过了vi ,vim简单说就是vi的升级版,它跟vi一样是Linux系统中的一个文本编辑工具。 如果系统中没有vim ,需要安装一...

李超小牛子 ⋅ 今天 ⋅ 0

docker实战

构建企业级Docker虚拟化平台实战 重点剖析虚拟化和云计算概念; 分析Docker虚拟化的概念和原理; 从0开始实战Docker虚拟化平台; 基于Docker构建Nginx WEB服务器和CentOS虚拟机; 基于开源监...

寰宇01 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部