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

当crontab无法正常读取环境变量时,问题可能在于脚本执行环境。通过检查发现系统已安装所需依赖,排除环境问题。通过在脚本头部添加#!/bin/sh并预先设置环境变量,成功解决了crontab执行脚本时创建redis集群的错误。

前提环境:

最近公司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集群了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太阳花先生可爱多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值