나는 내 자신의 (자동 생성된) 서버에 설치할 여러 서비스를 구축하고 있습니다. Ubuntu 14.04의 Upstart에서 기본적으로 서비스가 활성화되어 있는 Ubuntu 16.04로 마이그레이션하고 있으며(설치 시 서비스를 시작하지 않으려면 추가 작업을 수행해야 함) systemd를 새로운 기본 서비스 프레임워크로 사용하려고 합니다. .
이 서비스는 내가 직접 만든 deb 패키지를 사용하여 설치됩니다. systemd 단위 사양으로 파일을 --with systemd
추가 rules
하고 추가하여 deb 생성을 업그레이드했습니다 .package-name.service
제가 발견한 문제는 으로 [Install]
섹션을 추가해도 WantedBy=multi-user.target
시스템에서 서비스가 시작되지 않는다는 것입니다.
대신 서비스가 설치되고 systemctl status package-name
표시됩니다.
● package-name.service - My Service
Loaded: loaded (/lib/systemd/system/package-name.service; disabled; vendor preset: enabled)
Active: inactive (dead)
rules
내가 시작한 것처럼 내 시스템에는 시스템 재정의가 없습니다 .시스템 페이지를 사용한 데비안 패키징게다가dh_systemd_enable 매뉴얼 페이지나는 사용할 수 있다아니요서비스를 활성화하지 않기로 선택한 경우.
또한 상태 표시를 보면 dh-systemd
서비스가 활성화된 것처럼 보이지만(공급업체 사전 설정 비트) 그것만으로는 충분하지 않습니다. 내가 무엇을 놓치고 있나요?
답변1
실제로 아무것도 추가할 필요가 없습니다 override_dh_auto_install
.
--with systemd
및 설치된 패키지에 (과 사이에 대시 없음)이 필요합니다 .with
systemd
rules
dh-systemd
답변2
규칙의 override_dh_auto_install 대상에서 dh_systemd_enable(기본적으로 서비스 실행) 및 dh_systemd_start(실제로 설치 후 시작)를 호출하여 이 문제를 해결했습니다. 따라서 다음과 같습니다.
%:
dh $@ --with-systemd
override_dh_auto_install:
dh_auto_install
dh_systemd_enable || true
dh_systemd_start || true
답변3
나는 또한이 문제에 직면했습니다. 파일 dh_systemd_enable
의 내용에 대해 특정 기대치가 있는 것으로 나타났습니다 foo.service
.
187-215행에서 이를 볼 수 있습니다.deb-systemd-helper.
특히 foo.service
파일에 섹션이 있고 별칭이 다음과 같지 않은 필드가 [Install]
하나 이상 있는지 확인하세요 . 이로 인해 탐지에 필요한 서비스가 호출됩니다. 서비스가 자동으로 시작되도록 하려면 추가해야 합니다 .Alias
foo.service
deb-systemd-helper enable
WantedBy=multi-user.target
foo.service
다음은 내 파일의 약간 수정된 버전입니다.
[Unit]
Description=foo service, foos
After=bar.service
Requires=bar.service
[Service]
ExecStart=/path/to/my/script/foo
Restart=always
RestartSec=5
[Install]
Alias=foo
WantedBy=multi-user.target
몇 가지 디버그 플래그를 활성화하고 Perl 스크립트에 디버그 문을 추가하여 deb-systemd-helper
이를 확인할 수 있었습니다. Ubuntu 16.04 시스템에서는 여기에서 찾았습니다 /usr/bin/deb-systemd-helper
.
따라서 다음 명령을 반복적으로 실행하고 디버그 문을 추가하면 문제의 원인을 찾을 수 있습니다.
$ sudo DPKG_MAINTSCRIPT_PACKAGE=1 _DEB_SYSTEMD_HELPER_DEBUG=1 deb-systemd-helper enable foo.service
답변4
방금 이 문제가 발생했습니다. 필요한 [Install] 섹션이 있음에도 불구하고 여전히 기본적으로 장치를 활성화하지 않습니다.
해결 방법은 .service 파일의 Windows 끝을 UNIX 끝으로 변환하는 것입니다.
dos2unix my.service