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

関連情報