오류 해결 과정

win32com 모듈 ssh 미동작 에러

필만이 2024. 7. 2. 22:07

진행과정

  1. airflow에서 sshoperator를 통해 윈도우에 있는 [2]hwp_to_pdf.py 파일을 동작시킴. task 실패 코드는 아래와 같음
hwp_to_pdf = SSHOperator(
        task_id='hwp_to_pdf',
        ssh_conn_id='ssh_default',
        command=f'cd {default_path} && poetry shell && python [2]hwp_to_pdf.py',  # Windows 경로에서 Python 스크립트 실행 명령어
        conn_timeout=30,  # 연결 시간 초과 설정
        cmd_timeout=60,   # 명령 시간 초과 설정
    )
  1. 정확한 위치를 확인하기 위해 곳곳에 실행 로그를 추가

  2. win32 모듈 동작 부분에서 진행안되는것 확인

    hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")
    hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")  # 보안 경고 창 없애기
    

#한글 프로그램을 보이도록 설정
hwp.XHwpWindows.Item(0).Visible = False

#파일 열기
hwp.Open(os.path.join(path, name))

```
(동작이 그대로 멈춰서 에러 메세지는 timeout error(task 실행 제한시간 60초 ) )

  1. 윈도우의 cmd에서 1번의 명령어(commend) 를 직접 쳐봤음. 2번포함 모두 정상동작

  2. ssh 접속 제대로 된건지 확인 -> 접속됨

  3. 가상환경 활성화 된것 확인 -> 로그에서 확인

  4. 모듈잘 설치됐는가? -> import 에러 안뜸 + 4번으로 코드 정상인것 확인

  5. task 최대 실행시간(cmd_timeout) 늘려봄 -> 여전히 안됨

  6. 진행중

고려하지 않아도 되는것

  • 가상환경(poetry) 활성화 된것 확인

  • ssh 접속 성공 한것도 확인.

  • 모듈 설치 잘 돼있음 -> 로그에 import 에러 안뜸

  • cmd_timeout 시간 늘려도 안됨

  • 코드 자체는 동작함. 다만 win32 모듈 부분만 동작안함.

실행 내용

2024-07-02 20:48:36 - root - DEBUG - 15. 다운로드 파일 처리 시작
2024-07-02 20:48:36 - root - DEBUG - 11. 한글 파일 PDF 변환 시작 (여기서 멈추고 진행안됨)

airflow로그

[2024-07-02, 11:48:36 UTC] {ssh.py:524} INFO - (.venv) weare@DESKTOP-BE1I4GE C:\Users\weare\pro-ollama\pdf-rag>
[2024-07-02, 11:49:36 UTC] {taskinstance.py:1937} ERROR - Task failed with exception
Traceback (most recent call last):
File "/home/airflow/.local/lib/python3.8/site-packages/airflow/providers/ssh/operators/ssh.py", line 178, in execute
result = self.run_ssh_client_command(ssh_client, self.command, context=context)
File "/home/airflow/.local/lib/python3.8/site-packages/airflow/providers/ssh/operators/ssh.py", line 163, in run_ssh_client_command
exit_status, agg_stdout, agg_stderr = self.hook.exec_ssh_client_command(
File "/home/airflow/.local/lib/python3.8/site-packages/airflow/providers/ssh/hooks/ssh.py", line 549, in exec_ssh_client_command
raise AirflowException("SSH command timed out")
airflow.exceptions.AirflowException: SSH command timed out
[2024-07-02, 11:49:36 UTC] {taskinstance.py:1400} INFO - Marking task as FAILED. dag_id=execute_external_script_dag_ssh, task_id=hwp_to_pdf, execution_date=20240702T114809, start_date=20240702T114834, end_date=20240702T114936
[2024-07-02, 11:49:36 UTC] {standard_task_runner.py:104} ERROR - Failed to execute job 741 for task hwp_to_pdf (SSH command timed out; 28723)
[2024-07-02, 11:49:36 UTC] {local_task_job_runner.py:228} INFO - Task exited with return code 1
[2024-07-02, 11:49:36 UTC] {taskinstance.py:2778} INFO - 0 downstream tasks scheduled from follow-on schedule check