linux下env环境变量引起的crontab不生效处理办法
发布时间:2022-06-19 14:31 所属栏目:61 来源:互联网
导读:有朋友说,他写了一个脚本来做计划任务定时备份数据库,但却一直都备份不成功,手动执行脚本也没有问题,而且在/var/log/cron日志里看到成功执行了,但就是没看到备份的数据库文件. 拿了ssh权限,登录之后,看了之后,和他所说的情况一样,脚本执行成功,但没有生成备
有朋友说,他写了一个脚本来做计划任务定时备份数据库,但却一直都备份不成功,手动执行脚本也没有问题,而且在/var/log/cron日志里看到成功执行了,但就是没看到备份的数据库文件. 拿了ssh权限,登录之后,看了之后,和他所说的情况一样,脚本执行成功,但没有生成备份,不过,查了一下发给root的邮件,看到了问题: 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 --phpfensi.com /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=/ --phpfensi.com 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。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读