北京SEO

linux下env环境变量引起的crontab不生效解决办法

2019/10/10/17:46:40  阅读:1815  来源:谷歌SEO算法  标签: 百度K站

有朋友说,他写了一个脚本来做计划任务定时备份数据库,但却一直都备份不成功,手动执行脚本也没有问题,而且在/var/log/cron日志里看到成功执行了,但就是没看到备份的数据库文件.

拿了ssh权限,登录之后,看了之后,和他所说的情况一样,脚本执行成功,但没有生成备份,不过,查了一下发给root的邮件,看到了问题:

  1. Return-Path:<root@test.com>
  2. X-Original-To:root
  3. Delivered-To:root@test.com
  4. From:root@test.com(CronDaemon)
  5. To:root@test.com
  6. Subject:Cron<root@test>sh/data/cron/backup.sh
  7. Content-Type:text/plain;charset=UTF-8
  8. Auto-Submitted:auto-generated
  9. X-Cron-Env:<LANG=en_US.UTF-8>
  10. X-Cron-Env:<SHELL=/bin/sh>
  11. X-Cron-Env:<HOME=/root>
  12. X-Cron-Env:<PATH=/usr/bin:/bin>
  13. X-Cron-Env:<LOGNAME=root>
  14. X-Cron-Env:<USER=root>
  15. Date:Tue,1Apr201410:58:01-0400(EDT)
  16. Status:R--phpfensi.com
  17. /data/cron/backup.sh:line27:mysql:commandnotfound

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

  1. [root@testdata]#echo$PATH
  2. /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变量:

  1. [root@testdata]#vipath.sh
  2. #!/bin/bash
  3. echo$PATH
  4. #保存后,加入到crontab
  5. [root@testdata]#crontab-e
  6. */1****/data/path.sh

1分钟后,可以看到:/usr/bin:/bin,知道了问题,那就好解决了,有两种.

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

  1. #!/bin/bash
  2. ./etc/profile
  3. ....余下内容...

这里需要“. /etc/profile”,是因为朋友的mysql是自己编译的,把mysql的路径都添加到这里:

PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin

export PATH

2.直接设置用户的crontab,添加路径/usr/local/mysql/bin,例如:

  1. [root@testdata]#crontab-e
  2. SHELL=/bin/bash
  3. 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
  4. MAILTO=root
  5. HOME=/
  6. --phpfensi.com
  7. 0*/12***sh/data/cron/backup.sh

保存之后,就可以正常备份了,另外可以了解一个文件/etc/crontab:

  1. [root@testdata]#cat/etc/crontab
  2. SHELL=/bin/bash
  3. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  4. MAILTO=root
  5. HOME=/
  6. #Fordetailsseeman4crontabs
  7. #Exampleofjobdefinition:
  8. #.----------------minute(0-59)
  9. #|.-------------hour(0-23)
  10. #||.----------dayofmonth(1-31)
  11. #|||.-------month(1-12)ORjan,feb,mar,apr...
  12. #||||.----dayofweek(0-6)(Sunday=0or7)ORsun,mon,tue,wed,thu,fri,sat
  13. #|||||
  14. #*****user-namecommandtobeexecuted

广告内容

linux下env环境变量引起的crontab不生效解决办法 linux下env环境变量引起的crontab不生效解决办法 linux下env环境变量引起的crontab不生效解决办法

相关阅读

热门评论

sunshine技术博客 sunshine技术博客

sunshine技术博客

总篇数164

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法