私はシステム単位のファイル、特に*.service
ファイルをインストールするための小さなDebianパッケージを作成しています。
私のパッケージは次のとおりです。
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プロバイダがある小さな放浪箱です。使っています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
スクリプト全体が生成されますが、独自のバージョンがある場合はプレースホルダーのみが変更されます。