如何以交互式方式在cron的极简环境下运行脚本?
模拟cron环境交互式测试脚本的方法
要在和cron完全一致的极简环境下交互式测试脚本,不用反复设置crontab等待执行,你可以按以下步骤操作:
第一步:获取真实的cron环境变量
先在crontab中添加一个临时任务,让cron输出它的环境变量到文件:crontab -e添加一行:
* * * * * env > ~/cron_env.txt等待一分钟后,cron会执行这个任务,
~/cron_env.txt里就保存了cron运行时的完整环境变量。之后可以把这行临时任务从crontab里删掉。第二步:用cron环境启动交互式shell
用env -i清空当前shell的环境,再导入刚才获取的cron环境变量,启动一个不加载任何个人配置的交互式bash:env -i $(cat ~/cron_env.txt) bash --noprofile --norc进入这个shell后,你运行脚本的环境就和cron完全一致了,可以直接编辑、测试脚本,快速排查环境相关的问题(比如Perl模块路径缺失、自定义环境变量不存在等)。
简化方式:直接模拟cron默认环境
如果你不想等cron生成环境文件,也可以直接手动构造cron的典型默认环境(大部分系统的cron默认环境类似):env -i HOME=$HOME LOGNAME=$USER USER=$USER PATH=/usr/bin:/bin SHELL=/bin/bash bash --noprofile --norc这个命令会创建一个极简环境,PATH仅包含系统默认的基础路径,不加载
.bash_profile、.bashrc等配置文件,和cron的运行环境高度匹配。注意:匹配cron的默认shell
有些系统的cron默认用/bin/sh而不是bash,如果你脚本的shebang是#!/bin/sh,测试时可以把最后换成sh:env -i $(cat ~/cron_env.txt) sh -i
内容的提问来源于stack exchange,提问作者Jacob Wegelin
相关产品推荐
相关产品推荐

