Apache Airflow/삽질

[Airflow] lockfile.AlreadyLocked: /home/airflow/airflow/airflow-scheduler.pid is already locked

비번변경 2022. 7. 30. 19:18

현상

에어플로우 웹 서버나 스케쥴러를 백그라운드로 실행했다.

airflow scheduler -D
airflow webserver --port 8081 -D

하지만 웹에서 접속이 되지 않아 확인했더니 스케쥴러의 프로세스가 존재하지 않았다.

동작 프로세스 없음

 

원인

웹 서버와 스케쥴러의 에러 로그를 확인해보니 두 요소 모두 아래와 같은 FileExistsError, lockfile.AlreadyLocked가 발생하고 있었다.

$ view airflow/airflow-webserver.err

Traceback (most recent call last):
  File "/home/airflow1/venv/airflow/lib/python3.8/site-packages/lockfile/pidlockfile.py", line 77, in acquire
    write_pid_to_pidfile(self.path)
  File "/home/airflow1/venv/airflow/lib/python3.8/site-packages/lockfile/pidlockfile.py", line 161, in write_pid_to_pidfile
    pidfile_fd = os.open(pidfile_path, open_flags, open_mode)
FileExistsError: [Errno 17] File exists: '/home/airflow1/airflow/airflow-webserver-monitor.pid'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/airflow1/venv/airflow/bin/airflow", line 37, in <module>
    args.func(args)
  File "/home/airflow1/venv/airflow/lib/python3.8/site-packages/airflow/utils/cli.py", line 80, in wrapper
    return f(*args, **kwargs)
  File "/home/airflow1/venv/airflow/lib/python3.8/site-packages/airflow/bin/cli.py", line 1158, in webserver
    with ctx:
  File "/home/airflow1/venv/airflow/lib/python3.8/site-packages/daemon/daemon.py", line 389, in __enter__
    self.open()
  File "/home/airflow1/venv/airflow/lib/python3.8/site-packages/daemon/daemon.py", line 381, in open
    self.pidfile.__enter__()
  File "/home/airflow1/venv/airflow/lib/python3.8/site-packages/lockfile/__init__.py", line 197, in __enter__
    self.acquire()
  File "/home/airflow1/venv/airflow/lib/python3.8/site-packages/daemon/pidfile.py", line 57, in acquire
    super(TimeoutPIDLockFile, self).acquire(timeout, *args, **kwargs)
  File "/home/airflow1/venv/airflow/lib/python3.8/site-packages/lockfile/pidlockfile.py", line 87, in acquire
    raise AlreadyLocked("%s is already locked" %
lockfile.AlreadyLocked: /home/airflow1/airflow/airflow-webserver-monitor.pid is already locked

스케쥴러의 경우에는 airflow-scheduler.pid 파일이 문제가 되었다.

 

airflow-scheduler.pid, airflow-webserver-monitor.pid 파일은 각각 스케쥴러, 웹 서버의 프로세스 아이디를 저장한 파일이다. 각 프로세스가 종료되면서 파일을 정리해야 하는데, 정리하지 않고 종료된 것이 원인이다.

 

 

해결

문제가 되던 파일을 삭제하면 된다.

rm airflow-webserver-monitor.pid
rm airflow-scheduler.pid

파일을 삭제하고 다시 프로세스를 동작시키면 정상적으로 프로세스가 시작한 것을 확인할 수 있다.

동작 프로세스 확인

 

 

참고 문서

https://stackoverflow.com/questions/51839397/airflow-scheduler-refuses-to-launch-on-demon-mode