在脚本中使用svnadmin备份svn项目,直接运行脚本能正常备份,但放到crontab中定时任务就备份了个寂寞。
一、原因
-
- 环境变量缺失:cron执行环境与用户交互环境不同,可能缺少
PATH
等关键环境变量,导致系统无法找到svnadmin命令。
- 环境变量缺失:cron执行环境与用户交互环境不同,可能缺少
-
- 相对路径问题:cron的工作目录(通常是
$HOME
)与脚本位置不一致,导致相对路径失效。
- 相对路径问题:cron的工作目录(通常是
-
- 用户权限限制:cron可能以不同用户(如root)运行,对目标文件的读写权限不足。
二、分析测试
-
- 启动空环境试运行脚本
env -i /bin/bash --noprofile --norc
-
- 运行脚本,报错
svnadmin: command not found
,这是环境变量缺失,在空环境中无法启用svnadmin。
- 运行脚本,报错
bash-4.2# /data/svnbk.sh
/data/svnbk.sh: line 50: svnadmin: command not found
-
- 退出空环境,查找
svnadmin
具体位置
- 退出空环境,查找
# which svnadmin
/usr/local/svn/bin/svnadmin
-
- 将绝对路径添加到脚本中 /usr/local/svn/bin
#!/bin/bash
# 设置环境变量
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/svn/bin
# 其他代码
-
- 再次重复,进入空环境试运行脚本就可以了。如果有其他问题,可以一步一步根据报错信息来改正。
评论区