
저는 시스템 단위 파일, 특히 *.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 공급자가 있는 작은 방랑 상자입니다. 나는 사용하고있다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
전체 스크립트가 생성되지만 자체 버전이 있으면 자리 표시자만 변경됩니다.