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

推荐订阅源

G
Google Developers Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 聂微东
F
Fortinet All Blogs
H
Help Net Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
DataBreaches.Net
MyScale Blog
MyScale Blog
B
Blog
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
IT之家
IT之家
The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
博客园_首页
L
LangChain Blog
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Blog of Author Tim Ferriss
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky

博客园 - 网无忌

体验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。