气流任务已退出,返回码为1,没有任何警告/错误消息

时间:2020-05-03 02:24:34

标签: airflow

Apache Airflow版本:1.10.10

Kubernetes版本(如果您正在使用kubernetes)(使用kubectl version):不使用Kubernetes或docker

环境:CentOS Linux版本7.7.1908(核心)Linux 3.10.0-1062.el7.x86_64

Python版本:3.7.6

执行器:LocalExecutor

发生了什么

我写了一个简单的dag来清理气流日志。当我使用“气流测试”命令对其进行测试时,一切正常,我也在WebUI中手动触发了该操作,该界面使用“气流运行”命令启动了任务,但仍然可以。

但是,当我重新启动服务器并重新启动Web服务器和调度程序服务(以守护程序模式)后,,每次我触发完全相同的dag 时,它仍会像通常,但是在启动新进程来运行任务后立即退出代码1。

我现在也再次使用“ airflow test”命令来检查我的代码是否有问题,但是使用“ airflow test”时一切似乎都正常,但是在使用“ airflow run”时静默退出,这真的很奇怪。

这是在WebUI中手动触发的任务日志(我已将日志级别更改为DEBUG,但仍然找不到有用的东西),或者您可以阅读附件的日志文件:task error log.txt

读取本地文件:/root/airflow/logs/airflow_log_cleanup/log_cleanup_worker_num_1/2020-04-29T13:51:44.071744+00:00/1.log [2020-04-29 21:51:53,744] {base_task_runner.py:61}调试-计划以用户身份运行 [2020-04-29 21:51:53,750] {taskinstance.py:686}调试-依赖项'先前的Dagrun状态'通过:正确,任务未设置Depends_on_past。 [2020-04-29 21:51:53,754] {taskinstance.py:686}调试-依赖性“不在重试期间”通过:正确,未将任务实例标记为重试。 [2020-04-29 21:51:53,754] {taskinstance.py:686}调试-依赖项'任务实例状态'通过:正确,排队的任务状态有效。 [2020-04-29 21:51:53,754] {taskinstance.py:669}信息-满足了所有依赖性 [2020-04-29 21:51:53,757] {taskinstance.py:686}调试-依赖项'先前的Dagrun状态'通过:正确,任务未设置Depends_on_past。 [2020-04-29 21:51:53,760] {taskinstance.py:686}调试-依赖项'Pool Slots Available'通过:正确,(('%s中有足够的开放插槽来执行任务','default_pool' ) [2020-04-29 21:51:53,766] {taskinstance.py:686}调试-依赖性“不在重试期间”通过:正确,未将任务实例标记为重试。 [2020-04-29 21:51:53,768] {taskinstance.py:686}调试-依赖项'Task Concurrency'通过:正确,未设置Task并发。 [2020-04-29 21:51:53,768] {taskinstance.py:669}信息-完全满足

的依赖关系

[2020-04-29 21:51:53,768] {taskinstance.py:879}信息-

[2020-04-29 21:51:53,768] {taskinstance.py:880}信息-开始尝试1之2

[2020-04-29 21:51:53,768] {taskinstance.py:881}信息-

[2020-04-29 21:51:53,779] {taskinstance.py:900}信息-在2020-04-29T13:51:44.071744 + 00:00执行 [2020-04-29 21:51:53,781] {standard_task_runner.py:53}信息-启动进程29718以运行任务 [2020-04-29 21:51:53,805] {logging_mixin.py:112}信息-[2020-04-29 21:51:53,805] {cli_action_loggers.py:68}调试-调用回调:[] [2020-04-29 21:51:53,818] {logging_mixin.py:112}信息-[2020-04-29 21:51:53,817] {cli_action_loggers.py:86}调试-调用回调:[] [2020-04-29 21:51:58,759] {logging_mixin.py:112}信息-[2020-04-29 21:51:58,759] {base_job.py:200}调试-[心跳] [2020-04-29 21:51:58,759] {logging_mixin.py:112}信息-[2020-04-29 21:51:58,759] {local_task_job.py:124}调试-自上次心跳以来的时间(0.01 s) <心率(5.0 s),睡眠4.98824 s [2020-04-29 21:52:03,753] {logging_mixin.py:112}信息-[2020-04-29 21:52:03,753] {local_task_job.py:103}信息-任务已退出,返回码为1

如何复制它

我真的不知道如何复制它。因为它突然发生,并且看起来像是永久的??

我们需要了解的其他信息

我试图弄清楚“气流测试”和“气流运行”之间的区别,我想这可能与流程分叉有关吗?

我曾尝试解决此问题的方法,但都失败了:

  • 清除所有dag / dag运行/任务实例信息,删除/ root / airflow下的所有文件(配置文件除外),然后重新启动我的服务

  • 再次重新启动服务器

  • 卸载气流并重新安装

1 个答案:

答案 0 :(得分:0)

我终于弄清楚了如何重现此错误。

当您在airflow.cfg中配置电子邮件并且dag包含电子邮件操作符或使用smtp serivce时,如果您的smtp密码包含诸如“ ^”之类的字符,则dag的第一个任务将100%退出,返回码为1,没有任何错误信息,就我而言,第一个任务只是一个python运算符。

尽管我认为搞混smtp服务对我来说很不好,但是应该有一些合理的提示,实际上我花了整整一个星期的时间来调试它,我必须重置气流环境中的所有内容并慢慢更改配置以查看何时执行该错误会发生。

希望此信息对您有帮助