crontab命令执行数据库同步脚本不生效

原创 2018年04月17日 11:15:37

在同步mysql数据库中的数据到mongo中时,脚本能够手动成功执行,但是用定时任务启动却一定看不到结果,在邮件中发现没有pymysql模块:

Return-Path: <root@test.com>
X-Original-To: root
Delivered-To: root@test.com
From: root@test.com (Cron Daemon)
To: root@test.com
Subject: Cron <root@test> sh /data/cron/backup.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Date: Tue,  1 Apr 2014 10:58:01 -0400 (EDT)
Status: R
 
/data/cron/backup.sh: line 27: mysql: command not found

从上面可以看到,说mysql命令没有找到,于是执行了一下命令:

[root@test data]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin

这样就知道了问题所在,在crontab里的执行环境变量与root用户设置的环境变量不一致,从上面两个可以看出区别:
crontab里的环境变量:X-Cron-Env: <PATH=/usr/bin:/bin>

root用户的环境变量:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin

现在我们已经知道了,mysql这个命令是放在/usr/local/mysql/bin下面,而crontab的PATH变量中却没有这一条,所以出现mysql: command not found的问题。

同时,我们可以新建一个脚本,在crontab里验证一下PATH变量:
[root@test data]# vi path.sh
#!/bin/bash
 
echo $PATH
 
# 保存后,加入到crontab
 
[root@test data]# crontab -e
 */1 * * * * /data/path.sh

1分钟后,可以看到:

/usr/bin:/bin

知道了问题,那就好解决了,有两种:

1. 在备份脚本里,手动设置一下,例如:

#!/bin/bash
 
. /etc/profile
 
....余下内容...
这里需要“. /etc/profile”,是因为朋友的mysql是自己编译的,把mysql的路径都添加到这里:
PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin
export PATH

2. 直接设置用户的crontab,添加路径/usr/local/mysql/bin,例如:
[root@test data]# crontab -e
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:/root/bin
MAILTO=root
HOME=/
 
0 */12 * * * sh /data/cron/backup.sh

保存之后,就可以正常备份了。

另外可以了解一个文件/etc/crontab:
[root@test data]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
 
# For details see man 4 crontabs
 
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

apiDoc自动化文档同步工具

-
  • 1970年01月01日 08:00

crontab里运行php无法连接到数据库

我在my.cnf中注释掉log-bin=mysql-bin和binlog_format=mixed后,无法启动mysql 我重启vps后,能启动mysql啦 用web方式运行php,正常...
  • ImGoTop
  • ImGoTop
  • 2010-05-22 12:48:00
  • 687

使用inotify实现实时文件同步shell脚本

inotify.sh #!/bin/bash src=/data/www/ /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %...
  • 5iasp
  • 5iasp
  • 2013-03-26 09:04:55
  • 1393

Linux 下Crontab 里的命令无法执行的问题

在Linux系统下使用crontab定时/重复的执行某个命令去调用程序时,遇到程序无法调用,没有结果时解决的经验和办法。...
  • u012552296
  • u012552296
  • 2017-04-27 11:28:16
  • 233

crontab命令不执行的问题排查

我们经常会遇到在crontab中建立了计划任务,但是命令却不执行的情况,遇到这种情况,可以按照如下思路进行排查: 1. 查看crond服务是否开启 service crond status 如果服务未...
  • cookiesoe
  • cookiesoe
  • 2016-01-20 15:19:23
  • 236

LR脚本中连接sql server数据库

 在系统的管理工具->数据源中新建一个sql server数据源:Data Source=zloracle; UID=ZLIN;PWD=PASSWORD lr脚本的代码:char strconn[10...
  • lengyue_112
  • lengyue_112
  • 2007-01-08 12:56:00
  • 1907

(五)jmeter自带和badboy录制测试脚本---学习笔记

1.使用badboy录制脚本. a.登录badboy官网,下载badboy软件,,,,,http://www.badboy.com.au/  b.下载完成后,双击安装,全部默认安装直到完成. ...
  • zjq001X
  • zjq001X
  • 2016-10-31 13:52:15
  • 2551

U3D脚本不自动编译

症状:UnityVS插件升级之后,用VS修改脚本后,U3D不再会重新编译脚本;对策:1、勾选“Auto Refresh”选项 2、如果方法1不奏效,试着切一次平台(本质上是重新导入资源)后解决;...
  • gyymen
  • gyymen
  • 2016-12-09 08:34:44
  • 446

js 替换反斜杠(\)

js 替换反斜杠(\)
  • u014481096
  • u014481096
  • 2015-11-07 11:09:38
  • 540

【source命令在shell脚本中执行为何不生效】source not working from within shell script

http://stackoverflow.com/questions/4380595/source-not-working-from-within-shell-script I have...
  • JiaJianJunNeusoft
  • JiaJianJunNeusoft
  • 2011-12-31 14:07:52
  • 5569
收藏助手
不良信息举报
您举报文章:crontab命令执行数据库同步脚本不生效
举报原因:
原因补充:

(最多只允许输入30个字)