使用dh_systemd打包安装多个.service文件

pbo*_*pbo 3 python packaging virtualenv systemd debhelper

目前,我正在包装一个Python应用程序与dh_virtualenv,将其部署在Ubuntu 16.04,与systemd进程化.

我使用dh_systemd插件自动安装文件my_app.service将安装.deb包,但我想在另一个服务中运行另一个进程,使用celery为我的应用程序安排任务.

所以,我创建了另一个服务文件my_app.scheduler.service,但我不知道如何在我的debian打包规则中声明这个文件/ app/service,这样在安装整个包时,两个服务文件都将被复制并且因此将独立发布.

你有任何想法吗?

这是我的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
Run Code Online (Sandbox Code Playgroud)

规则

#!/usr/bin/make -f

%:
    dh $@ --with python-virtualenv --with=systemd
Run Code Online (Sandbox Code Playgroud)

安装

etc/my_app.config /etc/
Run Code Online (Sandbox Code Playgroud)

迪尔斯

/var/lib/my_app
/var/log/my_app
Run Code Online (Sandbox Code Playgroud)

当然还有.service文件:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

提前致谢 :)

编辑/解决方案

我终于找到了答案.对于那些可能有同样问题的人,使用dh_installinit解决了这个问题:)

pbo*_*pbo 8

在这里找到解决方案:

override_dh_installinit:
        dh_installinit --name=service1
        dh_installinit --name=service2
Run Code Online (Sandbox Code Playgroud)

  • 没关系,我终于能够实现它。对于可能遇到困难的其他人,请将服务文件命名为 <package1>.<service1>.service、<package1>.<service2>.service、<package2>.<service1>.service。然后在覆盖部分, dh_installinit -p<package1> --name=<service1> dh_installinit -p<package1> --name=<service2> dh_installinit -p<package2> --name=<service2> (2认同)