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

推荐订阅源

J
Java Code Geeks
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
U
Unit 42
A
About on SuperTechFans
Vercel News
Vercel News
B
Blog
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
腾讯CDC
D
Docker
V
Visual Studio Blog
博客园 - 叶小钗
The Cloudflare Blog
Jina AI
Jina AI
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏

博客园 - 网无忌

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