在气流任务中,我执行此操作:
try:
db_hd = sqlite3.connect(self.sqlite_db)
except sqlite3.Error as e:
print("sqlite_db:", self.sqlite_db)
print("system user:", getpass.getuser(), pwd.getpwuid(os.getuid()).pw_name)
raise
打印在日志中的
[2019-08-21 16:50:05,915] {logging_mixin.py:95} INFO - sqlite_db: /opt/secure/sqlite.db
[2019-08-21 16:50:05,915] {logging_mixin.py:95} INFO - system user: mysecairflowuser mysecairflowuser
[2019-08-21 16:50:05,915] {models.py:1806} ERROR - unable to open database file
文件权限为:
-rw-rw----. 1 root airflow 2048 Aug 16 17:59 /opt/secure/sqlite.db
mysecairflowuser在气流组中:
[root@myserver ~]# grep mysecairflowuser /etc/group
airflow:x:1105:myairflowuser,mysecairflowuser
selinux处于许可模式:
[root@myserver ~]# getenforce
Permissive
所有工作服务器上的文件权限,组,系统用户,selinux设置均相同。在所有工作进程上,该进程以mysecairflowuser运行,systemd服务文件为:
[Unit]
Description=Airflow worker
After=network.target
[Service]
EnvironmentFile=/etc/airflow/deci.global.env
User=mysecairflowuser
Group=airflow
Type=simple
ExecStart=/usr/local/bin/airflow worker
[Install]
WantedBy=multi-user.target
如果我在任何工作服务器上以mysecairflowuser身份登录后执行本地Python代码,它都可以正常工作,因此我确定mysecairflowuser可以访问此文件。
如果我向具有chmod o+r /opt/secure/sqlite.db
的任何用户授予读取权限,则在执行Airflow任务期间不会出现任何错误。
知道是什么原因造成的吗?
环境:CentOS 7上的Airflow v1.10.1,使用Celery,一个运行调度程序和Web服务器的主服务器以及数名工作人员。