postinst 维护者脚本阻止 systemd 单元文件在安装时自动启动

postinst 维护者脚本阻止 systemd 单元文件在安装时自动启动

我正在创建一个小型 Debian 软件包来安装 systemd 单元文件,特别是*.service文件。

我的包裹看起来像:

myservice
      | 
      |--debian
            |- comapat
            |- preinst
            |- postinst
            |- rules
            |- myservice.service

当我安装软件包时,systemd 服务会自动禁用并且不会启动。

安装后立即systemctl status myservice显示

root@ubuntu-xenial:~# systemctl status myservice
  ● myservice.service - My Service - echos output and says when it started
  Loaded: loaded (/lib/systemd/system/myservice.service; disabled; vendor preset: enabled)
  Active: inactive (dead)

但是,当我安装我的包时没有postinst脚本,systemd 服务会自动启用,并且它们会在安装后启动。

root@ubuntu-xenial:~# systemctl status myservice
● myservice.service - MyService - echos output and says when it started
Loaded: loaded (/lib/systemd/system/myservice.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-02-09 15:06:36 UTC; 10s ago
Main PID: 5024 (sh)
Tasks: 2
Memory: 172.0K
  CPU: 1ms
CGroup: /system.slice/myservice.service
       ├─5024 /bin/sh -c echo 'myservice.service started' && echo $(date +%s) && sleep infinity
       └─5026 sleep infinity

我很困惑,因为我的 postinst 是“小而愚蠢”:

#!/bin/sh -e
# POSTINST script for myservice
set -e

echo "\033[36m HI I'M A POSTINST SCRIPT `date +"%s"` \033[39m"

为什么 postinst 的存在会覆盖 systemd 服务的“自动启用和启动”?

debhelper 的哪一部分处理这个问题,我错过了什么?

或者我应该在postinst维护者脚本中添加什么才能让我的服务在安装时启动并运行?


注意:我的环境是一个带有 virtualbox 提供程序的小型 vagrant box。我正在使用ubuntu-xenial64 流浪盒。不确定这个环境是否会影响这个。

答案1

您需要将debhelper占位符添加到您的postinst

#DEBHELPER#

所以你的postinst应该看起来像

#!/bin/sh
# POSTINST script for intera
set -e

echo "\033[36m HI I'M A POSTINST SCRIPT `date +"%s"` \033[39m"

#DEBHELPER#

exit 0

如果您不包含它,debhelper则不会将其自动生成的postinst片段添加到您的维护者脚本中。当您根本没有时postinst,它只会生成整个脚本;但如果您有自己的版本,它只会更改占位符。

相关内容