Systemdユニットファイルの作成して、Waitressをデーモン化します。
まず、/etc/systemd/system/waitress.serviceという名前でユニットファイルを作成します。
以下の設定はディレクトリ構造が以下の場合の設定内容です。
- home
- user
- myapp
- bin # WorkingDirectory
- flaskapp # Environment
/etc/systemd/system/waitress.service
[Unit]
Description=Waitress Flask App
After=network.target
[Service]
Type=simple
User=user
Group=user
WorkingDirectory=/home/user/myapp/flaskapp
Environment="PATH=/home/user/myapp/flaskapp/bin"
ExecStart=/home/user/myapp/flaskapp/bin/waitress-serve --port=8000 flaskapp.app:app
Restart=always
[Install]
WantedBy=multi-user.target
/home/user/myapp/flaskapp/bin/waitress-serveのファイルには、実行権限がついている必要があります。以下のコマンドを実行してファイルの実行権限を確認します。
ls -al /home/user/myapp/flaskapp/bin/waitress-serve
systemdデーモンの再読み込み ユニットファイルを追加・変更した場合は、以下のコマンドでsystemdに再読み込みさせます。
sudo systemctl daemon-reload
sudo systemctl enable waitress
sudo systemctl start waitress
sudo systemctl status waitress
waitress のステータスがfailedとなっている場合、SELinux を一度permissiveにして、エラーが解消されるか試してみます。
エラーが解消されれば、SELinux が原因の為、エラーを解消していきます。
journalctl -xe | grep SELinuxを実行し、エラーを確認します。
5月 21 21:06:19 localhost.localdomain setroubleshoot[980]: SELinux により、/usr/bin/lsmd による getattr アクセスが、ファイル /usr/bin/passt-repair で拒否されました。 完全な SELinux メッセージを見るには、sealert -l 96302691-bdb1-45bb-acdb-1fc739f33f20 を実行します
上記のようなログがあった場合、sealert -l 96302691-bdb1-45bb-acdb-1fc739f33f20 を実行し、内容を確認しポリシーの設定を登録していきます。設定の仕方はメッセージに記載されています。
Python に関する制限が影響している可能性がある場合は、httpd_execmemなどの設定を確認し、無効になっている場合は有効にします。
sudo getsebool -a | grep httpd_execmem
# 無効になっている場合は、有効にする
sudo setsebool -P httpd_execmem on
sudo setsebool -P domain_can_mmap_files on