CentOS7中rc.local配置Airflow Worker开机自启失败求助
解决CentOS7中Airflow Worker开机自启的FileNotFoundError问题
你遇到的核心问题是rc.local执行时的环境变量与交互式shell不一致:虽然你在主命令里用了airflow的完整路径,但Airflow内部通过subprocess.Popen(['airflow', 'serve_logs'])调用子进程时用的是相对路径,而系统开机执行rc.local时的PATH环境变量里并没有包含/root/anaconda3/bin,所以会找不到airflow命令。
解决方案:在rc.local脚本中明确配置PATH环境变量
只需要在执行Airflow命令前,把Anaconda的bin目录添加到PATH中,就能让所有子进程都能找到airflow命令。修改你的rc.local内容如下:
# 优先将Anaconda的bin目录加入PATH,确保子进程能识别airflow命令 export PATH=/root/anaconda3/bin:$PATH export C_FORCE_ROOT=true # 执行airflow worker启动命令 /root/anaconda3/bin/python /root/anaconda3/bin/airflow worker
问题原因详解
当你手动执行sh /etc/rc.local时,是在当前的交互式shell环境下,你的PATH已经包含了/root/anaconda3/bin(日常使用Anaconda时的配置)。但系统开机时执行rc.local是在极简的系统环境上下文中,PATH仅包含系统默认目录(比如/usr/bin、/bin),没有Anaconda的路径,因此子进程里直接调用airflow就会触发"找不到文件"的错误。
可选验证步骤
如果你想确认环境变量的差异,可以在rc.local中添加一行日志输出,开机后查看PATH内容:
# 输出开机时rc.local的PATH到日志文件 echo "rc.local startup PATH: $PATH" >> /tmp/rc_local_env.log
开机后查看/tmp/rc_local_env.log,你会发现里面确实没有/root/anaconda3/bin,这就能验证我们的判断。
内容的提问来源于stack exchange,提问作者piedro
相关产品推荐
相关产品推荐

