crontab 无法正常读取环境变量[已解决]

前提环境:

最近公司redis问题,决定写了个脚本自动恢复:

1、判断redis进程少于6个时:重启服务和创建集群,并自动刷缓存

2、判断redis中集群的个数,少于6个实例后,自动创建集群

脚本 及crontab :

脚本

vi create_cluster.sh

echo yes| /usr/local/redis-3.2.1/src/redis-trib.rb create --replicas 1 192.168.200.94:7001 192.168.200.94:7002 192.168.200.94:7003 192.168.200.94:7004 192.168.200.94:7005 192.168.200.94:7006

crontab内容

*/1 * * * * /usr/local/redis-3.2.1/cluster-conf/auto_Analysis_Recovery_redis_and_load_cache.sh >> /usr/local/redis-3.2.1/cluster-conf/Recovery_redis_and_load_cache-$(date +\%Y\%m\%d).log 2>&1 &

问题及处理

手工执行脚本是正常,crontab中执行报错:

/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
    from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'   
     from /usr/local/redis-3.2.1/src/redis-trib.rb:25:in `<main>'

网上的答案都是要安装gem insall redis ;自己查看确认是安装过的且版本正常。
手工能执行说明没有问题,那说明环境没有问题。问题就是在crontab 执行时肯定是丢失了一些信息;

crontab有一个坏毛病,就是不会默认从用户profile文件中读取环境变量参数,经常导致在手工执行某个脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错.
看了这个就知道怎么修改脚本了,脚本的头上用缺省的#!/bin/sh就可以,然后然后第一个部分先写这些:

###################
. /etc/profile
. ~/.bash_profile
##################

脚本就变成了
vi create_cluster.sh

#!/bin/sh
. /etc/profile
. ~/.bash_profile
echo yes| /usr/local/redis-3.2.1/src/redis-trib.rb create --replicas 1 192.168.200.94:7001 192.168.200.94:7002 192.168.200.94:7003 192.168.200.94:7004 192.168.200.94:7005 192.168.200.94:7006

再次执行crontab 已经可以自动创建redis集群了。

猜你喜欢

转载自blog.csdn.net/yy4545/article/details/105550151