Crontab任务中变量赋值无效,但终端执行正常的原因排查
问题描述
用户配置了如下crontab定时任务,尝试将API调用结果赋值给变量OUTPUT1:
0/2 * * * * OUTPUT1=$(/usr/bin/curl -sSL "https://mempool.space/api/blocks/tip/height")
实际执行后,在终端输入echo $OUTPUT1却看不到变量值;但如果直接在终端里运行相同的赋值命令,echo $OUTPUT1就能得到预期结果。
原因分析
- crontab的每一项任务都会启动一个独立的子shell进程来执行,这个进程执行完毕后就会退出,进程内定义的所有变量都会被系统回收,根本不会传递到你当前使用的终端shell环境中。
- 你在终端直接执行赋值命令时,变量是创建在当前终端的shell进程空间里,所以后续能正常读取;但crontab任务的shell和你的终端shell是完全隔离的两个进程,它们的变量空间互不共享。
内容的提问来源于stack exchange,提问作者blacktomcat
相关产品推荐
相关产品推荐

