要解决Airflow v1.10.1中SSHOperator不记录SSH命令日志的问题,可以使用以下方法:
do_xcom_push
参数将SSH命令的输出传递给下一个任务。这样可以手动记录SSH命令的输出日志。from airflow.operators import SSHOperator
ssh_task = SSHOperator(
task_id='ssh_task',
ssh_command='your_ssh_command',
do_xcom_push=True, # 将SSH命令的输出传递给下一个任务
dag=dag
)
在下一个任务中,可以使用ti.xcom_pull()
方法获取SSH命令的输出,并记录日志。
output = ti.xcom_pull(task_ids='ssh_task')
# 记录SSH命令的输出日志
logging.info("SSH command output: %s", output)
subprocess
模块执行SSH命令,并将输出记录到日志中。import subprocess
def run_ssh_command(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate()
# 记录SSH命令的输出日志
logging.info("SSH command output: %s", output)
if error:
# 记录错误日志
logging.error("SSH command error: %s", error)
ssh_command = 'your_ssh_command'
run_ssh_command(ssh_command)
请注意,这种方法可能会导致Airflow DAG的可移植性降低,因为它依赖于本地系统上的SSH客户端。此外,确保在执行SSH命令时,已经配置了正确的SSH密钥或凭据。
上一篇:Airflow Unittest.cfg 权限问题?
下一篇:Airflow Web UI LDAP身份验证抛出AttributeError: 'NoneType'对象没有属性'username'