web-dev-qa-db-ja.com

systemdで起動時にFlaskアプリを実行する

flaskアプリを実行する次のsystemdサービスがあります。

[Unit]
Description=My Flask server
After=network.target

[Service]
User=ubuntu
ExecStart=/home/ubuntu/my-server/script.py
WorkingDirectory=/home/ubuntu/my-server/
Restart=on-failure
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

ただし、実行すると

systemctl start my-server.service

私は次のステータスを取得します

my-server.service - My Flask server
   Loaded: loaded (/etc/systemd/system/my-server.service; enabled; vendor preset: enabled)
   Active: active (exited) (Result: exit-code) since Wed 2017-06-21 22:24:18 UTC; 8min ago
 Main PID: 8407 

(code=exited, status=203/EXEC)

Flaskサーバーが終了しないようにするにはどうすればよいですか?スクリプトを直接実行すると

/home/ubuntu/my-server/script.py

正常に動作します。しかし、systemdで実行すると、サーバーはすぐに終了します。

2
k26dr

私自身の問題を修正しました。 systemdスクリプトに一致するようにファイルの所有者を変更し、実行可能にする必要がありました。

chown ubuntu /home/ubuntu/my-server/script.py
chmod +x /home/ubuntu/my-server/script.py
1
k26dr

これが役立つかどうかはわかりませんが、 this は個人プロジェクトのflaskアプリケーションを制御するために使用するサービスファイルです。デフォルトでは、systemdはパーソナライズなしで/ bin/shシェルでスクリプトを実行すると思います。/bin/shシェルに切り替えてコマンドを実行してみてください。環境変数が欠落している可能性があります。

リンクからのユニットファイル:

[Unit]
Description=Persistent Transactions API
After=syslog.target network.target electrum.service

[Service]
User=percy
Group=percy
ExecStart=/bin/bash -c "source /opt/persist_transaction/bin/activate ; /opt/persist_transaction/api.py -c /opt/persist_transaction/config.ini"
Restart=always

[Install]
WantedBy=multi-user.target
2
Christopher