Amazon Linux 2 EC2中手动执行脚本redis-cli正常,crontab执行报错命令未找到
解决crontab执行备份脚本时找不到redis-cli的问题
问题原因
crontab运行时的环境变量PATH比用户手动登录时的PATH精简很多(默认通常只有/usr/bin:/bin),而你编译安装的redis-cli所在目录不在这个默认PATH里,所以手动执行能找到命令,crontab执行时却找不到。
可行解决方法
在脚本中使用redis-cli的绝对路径调用
- 手动执行
which redis-cli,得到redis-cli的绝对路径(比如/home/ec2-user/redis/src/redis-cli) - 打开备份脚本
backup-elasticache-to-s3.sh,把所有redis-cli的调用替换成这个绝对路径,比如把redis-cli --tls ...改成/home/ec2-user/redis/src/redis-cli --tls ...
- 手动执行
将redis-cli复制到系统默认PATH目录
执行以下命令(替换成你的redis-cli实际路径):sudo cp /home/ec2-user/redis/src/redis-cli /usr/bin/ sudo chmod 755 /usr/bin/redis-cli这样系统所有环境都能直接找到redis-cli,不管是手动还是crontab执行都没问题。
在crontab中指定PATH
编辑ec2-user的crontab:crontab -e在文件最顶部添加一行(替换成redis-cli所在的实际目录):
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/ec2-user/redis/src保存退出后,crontab执行时就会包含这个目录,能找到redis-cli。
在脚本开头设置PATH
打开备份脚本,在#!/bin/bash下面添加一行(替换成redis-cli所在的实际目录):export PATH=$PATH:/home/ec2-user/redis/src这样脚本执行时会自动把该目录加入环境变量,解决找不到命令的问题。
内容的提问来源于stack exchange,提问作者PirateApp
相关产品推荐
相关产品推荐

