systemd 서비스 파일에서 Apache Superset을 실행하면 작동하지 않습니다. 오류: Flask 애플리케이션을 찾을 수 없습니다.

systemd 서비스 파일에서 Apache Superset을 실행하면 작동하지 않습니다. 오류: Flask 애플리케이션을 찾을 수 없습니다.

Linux에서 bash 스크립트를 만드는 것이 처음입니다. Apache Superset 대시보드를 설치하고 설정하기 위한 bash 스크립트를 생성하고 싶습니다. 이를 사용하여 문제 없이 모든 종속성과 요구 사항을 설치했습니다. 이제 문제는 서비스가 백그라운드에서 실행되도록 Apache Superset용 시스템 서비스 파일을 생성하려는 것입니다. 이 명령을 실행하면 SSH를 통해 인스턴스에 연결되어 있는 동안에만 지속됩니다. superset run -h 0.0.0.0 -p 8088 --with-threads --reload --debugger 연결을 닫으면 상위 세트 실행이 중지됩니다.

이것이 바로 Apache Superset용 시스템 서비스 파일을 생성하려는 이유입니다.

다음은 systemd를 생성하는 bash 스크립트의 일부입니다.

cat <<EOL | sudo tee /etc/systemd/system/superset.service
[Unit]
Description=Apache Superset service
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu
Environment="PATH=/home/ubuntu/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/home/ubuntu/venv/bin/superset run -h 0.0.0.0 -p 8088 --with-threads --reload --debugger
Restart=always

[Install]
WantedBy=multi-user.target
EOL

# Start and enable Superset service
sudo systemctl enable superset.service
sudo systemctl start superset.service

superset.service의 상태를 확인해보니 실행 중이라고 나옵니다. 하지만 수신 포트를 확인하면 Python과 Superset이 8088을 수신하지 않습니다. 실행 후 로그입니다journalctl -u superset.service

-- Logs begin at Fri 2023-08-18 02:58:49 UTC, end at Fri 2023-08-18 03:12:20 UTC. --
Aug 18 03:11:25 ip-172-31-122-121 systemd[1]: Started Apache Superset service.
Aug 18 03:11:28 ip-172-31-122-121 superset[34618]: Usage: superset [OPTIONS] COMMAND [ARGS]...
Aug 18 03:11:28 ip-172-31-122-121 superset[34618]: Try 'superset --help' for help.
Aug 18 03:11:28 ip-172-31-122-121 superset[34618]: Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" o>
Aug 18 03:11:28 ip-172-31-122-121 systemd[1]: superset.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Aug 18 03:11:28 ip-172-31-122-121 systemd[1]: superset.service: Failed with result 'exit-code'.
Aug 18 03:11:28 ip-172-31-122-121 systemd[1]: superset.service: Scheduled restart job, restart counter is at 1.
Aug 18 03:11:28 ip-172-31-122-121 systemd[1]: Stopped Apache Superset service.
Aug 18 03:11:28 ip-172-31-122-121 systemd[1]: Started Apache Superset service.

이 코드는 이미 bash 스크립트에 있습니다 export FLASK_APP=superset. 제가 무엇을 놓치고 있는지 모르겠습니다. 아니면 이것을 설정할 수 있는 다른 방법이 있습니까?

그런데 Amazon EC2 인스턴스의 Ubuntu 버전은 20.04입니다.

답변1

FLASK_APP서비스 파일을 설정하는 스크립트에만 변수가 설정된 경우 해당 변수는 서비스 자체에 표시되지 않습니다.

Environment서비스 파일의 설정 목록에 이를 추가해야 할 수도 있습니다.

그래서 이렇게 :

Environment="PATH=/home/ubuntu/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment="FLASK_APP=superset"

또는 현재 가지고 있는 명령 대신 서비스 파일이 호출하고 포함될 래퍼 스크립트를 만들 수 있습니다 export FLASK_APP=superset.

관련 정보