4

私は現在、systemdでデーモン化されたdh_virtualenvでpythonアプリをパッケージ化しています。

dh_systemd プラグインを使用してファイル my_app.service を自動的にインストールすると、.deb パッケージがインストールされますが、セロリを使用して、アプリのタスクをスケジュールする別のサービスで別のプロセスを実行したいと考えています。

そのため、別のサービス ファイル my_app.scheduler.service を作成しましたが、debian パッケージ ルールでこのファイル/アプリ/サービスを宣言する方法がわからないため、パッケージ全体をインストールするときに、両方のサービス ファイルがコピーされ、したがって、独立して起動されます。

dpkg-buildpackage コマンドの debian conf ファイルは次のとおりです。

デビアン/コントロール

Source: my_app
Section: python
Priority: extra
Maintainer: me
Build-Depends: debhelper (>= 9), python, dh-virtualenv (>= 0.6), dh-systemd (>= 1.5), adduser
Standards-Version: 3.9.5

Package: my_app
Architecture: any
Pre-Depends: dpkg (>= 1.16.1), python2.7, ${misc:Pre-Depends}
Depends: ${python:Depends}, ${misc:Depends}
Description: blabla

デビアン/ルール:

#!/usr/bin/make -f

%:
    dh $@ --with python-virtualenv --with=systemd

デビアン/インストール

etc/my_app.config /etc/

デビアン/ディレクトリ:

/var/lib/my_app
/var/log/my_app

そしてもちろん .service ファイル:

debian/my_app.service

[Unit]
Description=APP

[Service]
Type=simple
User=app_user
EnvironmentFile=/etc/my_app.config
ExecStart=/usr/share/python/my_app/bin/gunicorn -w 10 -b 0.0.0.0:6000 -t 600 my_app_python_package:app

[Install]
WantedBy=multi-user.target

debian/my_app.scheduler.service

[Unit]
Description=APP Scheduler

[Service]
Type=simple
User=app_user
EnvironmentFile=/etc/my_app.config
ExecStart=/usr/share/python/my_app/bin/celery worker -A my_app_python_package.tasks 

[Install]
WantedBy=multi-user.targetroot
4

2 に答える 2