![脚本在由 cron 运行时的行为有所不同](https://linux22.com/image/1342847/%E8%84%9A%E6%9C%AC%E5%9C%A8%E7%94%B1%20cron%20%E8%BF%90%E8%A1%8C%E6%97%B6%E7%9A%84%E8%A1%8C%E4%B8%BA%E6%9C%89%E6%89%80%E4%B8%8D%E5%90%8C.png)
我有一个每晚运行的脚本,它返回的结果与我手动运行的结果不同。我意识到这是一个常见问题,我的问题很可能在于运行 cron 时未获取的环境变量。
我已将 PATH 手动添加到 crontab 的开头,并添加了以下行
. ~/.bash_profile
到脚本的开头。还可能发生什么?
答案1
至少你尝试过。
我同意这很可能是一个环境问题,而了解你真正使用的环境的最佳方法是将环境捕获到文件中,然后对它们进行区分,因此..添加
set > /tmp/myEnvrionrment.$$
就在你的
. ~/.bash_profile
编辑
(.$$
附加到 /tmp 文件名的变量是 Shell 的“当前进程 id”变量,因此是一个相对唯一的数字,每次运行脚本时都应该不同。J)
从 cmd 行运行脚本,然后从 cron 运行
然后
diff /tmp/myEnvrionemnt.*
假设那里只有两个文件,否则,查看这些文件上的时间戳并删除其他文件,这样您就只有 2 个文件,1 个代表 cmd 行运行,另一个代表 crontab 运行。
如set
所示,局部变量(应包括导出变量),这应该可行。如果在两个输出文件中都获得相同的列表,则尝试
export > /tmp/myExportedVars.$$
如上所述,并尝试比较它们。
不仅要查看 PATH,还要查看 LD_* 变量和 LANG 变量。
免疫学和免疫学研究所