通过模拟Cron执行环境来复现脚本执行失败的过程

有时候,某个脚本手动执行时一切正常,但设置成Cron计划任务后就执行失败。
大多数情况都是由环境变量问题(尤其是 PATH)造成的,这是因为 Cron 默认使用极简的环境变量(如 PATH=/usr/bin:/bin),所以如果脚本中使用的命令未被定义时,就会出现问题了,比如最常见的:mysqldump。
 

1. 模拟进入Cron模式

 

#进入极简模式
env -i /bin/bash --noprofile --norc
#在该模式下输入命令或脚本

 
上面的命令中:
env -i 的作用是清空当前环境变量,创建一个全新的、无任何继承环境变量的环境。
/bin/bash 的作用是指定使用 Bash Shell 来执行脚本。
--noprofile 的作用是不加载 /etc/profile 或 ~/.bash_profile 等全局配置文件。
--norc 的作用是不加载 ~/.bashrc 等用户配置文件。
 

2. 问题解决

 
如果发现在Cron模式下脚本执行失败,并提示找不到命令,那就是环境变量的问题了。
可以在脚本中定义需要的环境:
export PATH=/usr/local/mysql/bin:$PATH
也可以在脚本中,使用命令的绝对位置。
 

3. 退出Cron环境

 
在纯净环境中,直接输入 exit 或按 Ctrl+D,退出当前 Shell。

posted @   网无忌  阅读(11)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示