Python 使用airflow restapi触发dag不';不起作用,但在UI中单击会起作用
嗨,我有一个简单的DAG,它使用Python 使用airflow restapi触发dag不';不起作用,但在UI中单击会起作用,python,airflow,Python,Airflow,嗨,我有一个简单的DAG,它使用bash操作符和DockerOperator。我想从python脚本触发,如下所示: import requests import json from datetime import datetime from pprint import pprint headers = { 'accept':'application/json', 'content-type':'application/json', } auth = ('airflow','
bash操作符
和DockerOperator
。我想从python脚本触发,如下所示:
import requests
import json
from datetime import datetime
from pprint import pprint
headers = {
'accept':'application/json',
'content-type':'application/json',
}
auth = ('airflow','airflow')
body = {
"conf": {},
"dag_run_id":"testrun03",
"execution_date":datetime.now().strftime("%y-%m-%dt%h:%m:%sz"),
}
result = requests.post(
"http://localhost:8080/api/v1/dags/r_dag/dagruns",
headers=headers,
auth=auth,
data=json.dumps(body)
)
pprint(result.content.decode('utf-8'))
它给了我这个输出:
('{\n'
' "conf": {},\n'
' "dag_id": "r_dag",\n'
' "dag_run_id": "testrun03",\n'
' "end_date": null,\n'
' "execution_date": "2021-05-22T23:59:34+00:00",\n'
' "external_trigger": true,\n'
' "start_date": "2021-05-23T06:59:34.746354+00:00",\n'
' "state": "running"\n'
'}\n')
当我得到dag_run_id时:
{
"conf": {},
"dag_id": "r_dag",
"dag_run_id": "testrun03",
"end_date": "2021-05-23T06:59:35.543319+00:00",
"execution_date": "2021-05-22T23:59:34+00:00",
"external_trigger": true,
"start_date": "2021-05-23T06:59:34.746354+00:00",
"state": "success"
}
但是当我进入UI并检查日志时,它是空的,并且图形视图显示图形的白色轮廓。当我悬停时,它说DAG还没有运行。当我在UI中单击run时,它会按预期工作。我想以编程方式触发DAG也是一样的?我是否错过了另一个步骤?我能够重现这个问题。在Apache Airflow上创建了一个
编辑:确保发送的请求的执行日期与实例使用的时区相同。在我的案例中,我发送的请求是UTC+2,导致执行日期为“future”的dag运行。谢谢,我会尝试一下。我将脚本更改为
datetime.utcnow()
,但遇到了相同的行为。当我进入浏览->DAG运行时,状态被标记为成功,但当我进一步点击它时,它显示它还没有运行。请给我们看DAG好吗?嗨,我终于找到了。这确实是utc时间戳问题。当我改为utcnow()
时,我在strftime()
格式上犯了一个错误。我没有大写一些占位符,所以它不是预期的时间戳。现在可以了。谢谢