惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
月光博客
月光博客
博客园 - Franky
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
有赞技术团队
有赞技术团队
V
V2EX
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
腾讯CDC
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
Martin Fowler
Martin Fowler
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
WordPress大学
WordPress大学
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
Microsoft Security Blog
Microsoft Security Blog

博客园 - 网无忌

体验Coding Plan 本地安装Dify 关于Docker Desktop的常用配置 渐变文字的小技巧 机器学习基础 pydantic中关于属性必填和选填的区别 CentOS的常用命令 密码中含有特殊字符造成mysqldump备份失败的一个小教训 查看mysql当前的执行任务,并关闭其中的指定任务 配置WSL2实现与宿主机的网络互通 超简单的 rsync 命令,实现文件的增量同步 十九年白驹过隙,老园子聊发少年狂 Linux中安装anaconda 矢量数据库Chromadb的入门信息 在wsl中部署puppeteer的相关笔记 向量数据库横比 整理了一下目前各Linux发行版的清单 盘点各领域的包管理器 使用 jstat 命令查看 JVM 的GC信息 记录一个在js环境生成随机(伪造)数据的小插件,方便生成调试数据 使用Puppeter实现的全屏网页截图的小工具 开启 mysql 的 general_log
通过模拟Cron执行环境来复现脚本执行失败的过程
网无忌 · 2025-02-18 · via 博客园 - 网无忌

有时候,某个脚本手动执行时一切正常,但设置成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。