Airflow自帶的時區是UTC時區,通常跟當前的環境時區不一樣,因此我們需要對時區進行修改。
1、修改airflow的配置文件airflow.cfg
default_timezone = Asia/Shanghai
2、進入airflow包的安裝位置,也就是site-packages的位置,由於我們airflow環境是部署在容器里面的,site-packages的位置通常在這里容器的
/usr/local/lib/python3.7/site-packages/
3、修改airflow/utils/timezone.py
timezone.py 文件所在目錄/usr/local/lib/python3.7/site-packages /airflow/utils
在 utc = pendulum.timezone(‘UTC’) 這行(第27行)代碼下添加:
from airflow import configuration as conf
try:
tz = conf.get("core", "default_timezone")
if tz == "system":
utc = pendulum.local_timezone()
else:
utc = pendulum.timezone(tz)
except Exception:
pass
修改utcnow()函數:
原代碼 d = dt.datetime.utcnow()
修改為 d = dt.datetime.now()
4、修改airflow/utils/sqlalchemy.py
在utc = pendulum.timezone(‘UTC’) 這行代碼下添加:
from airflow import configuration as conf
try:
tz = conf.get("core", "default_timezone")
if tz == "system":
utc = pendulum.local_timezone()
else:
utc = pendulum.timezone(tz)
except Exception:
pass
5、改airflow/www/templates/admin/master.html
該文件所在目錄:
/usr/local/lib/python3.7/site-packages/airflow/www/templates/admin
把代碼 var UTCseconds = (x.getTime() + x.getTimezoneOffset()*60*1000);
改為 var UTCseconds = x.getTime();
把代碼 "timeFormat":"H:i:s %UTC%",
改為 "timeFormat":"H:i:s",
7、修改Docker容器的時間和宿主時間一致
在容器中修改下/etc/localtime文件的名稱,避免沖突
cd /etc/
mv localtime localtime_bak
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
查看容器和宿主機的時間,將會看到兩個時間一致
8、最后重啟airflow-webserver即可
