SystemD: 서비스가 종료되고 다시 시작될 때까지 로그인 화면이 표시되지 않도록 하이브 단위 파일

SystemD: 서비스가 종료되고 다시 시작될 때까지 로그인 화면이 표시되지 않도록 하이브 단위 파일

여러 응용 프로그램을 설치 및 구성하는 데 사용하는 서비스 단위 파일이 있는데 종료 시 시스템을 다시 시작해야 합니다. 이 스크립트를 sysVinit 스크립트에서 centOS 7.1의 systemD로 마이그레이션하려고 하는데 시스템 로그인 화면에서 스크립트가 완료될 때까지 기다릴 수 없습니다.

이전과 이후에 sysinit.target, basic.target, network-online.target을 필수By, WantedBy로 설정하려고 시도했지만 재부팅이 완료될 때까지 로그인 화면을 막는 것은 없습니다.

이 문제를 해결한 사람이 있거나 어떤 서비스가 로그인 화면을 제어하는지 아는 사람이 있나요?

답변1

이를 수행하는 한 가지 방법은 를 사용하는 다른 서비스보다 먼저 서비스가 시작되도록 지정하는 것입니다 Before=. 이 경우 GUI가 없고 콘솔 로그인을 방지하고 싶으므로 를 사용해야 합니다 [email protected]. (단, 매개변수화된 서비스이므로 참고하세요. 이 경우 다음 부분은 @실행할 장치를 나타냅니다 getty.) 예를 들어:

[Unit]
Description=Run script to set up environment
[email protected] [email protected] [email protected] [email protected] [email protected] [email protected]

[Service]
Type=oneshot
ExecStart=/bin/myscript

getty이렇게 하면 TTY 1-6에서 부팅하기 전에 스크립트가 실행됩니다.

또는 (빈) 파일을 만들어서 알릴 수 있습니다.[email protected] 아니요시작합니다. 이것의 장점은 getty1-6뿐만 아니라 모든 인스턴스에 조건을 자동으로 추가한다는 것입니다.

이렇게 하려면 서비스가 시작되기 전에 파일을 만듭니다.

[Unit]
Description=Run script to set up environment

[Service]
Type=oneshot
ExecStartPre=/bin/touch /etc/no-login-console
ExecStart=/bin/myscript
ExecStopPost=/bin/rm /etc/no-login-console

그런 다음 실행하십시오. 그러면 편집기가 열리고 기본 서비스 파일에 효과적으로 추가될 "오버레이" 파일이 생성됩니다. 이렇게 하면 서비스를 사용자 정의할 수 있으면서도 최신 버전의 CentOS 서비스 파일을 계속 사용할 수 있습니다. 열리는 편집기에서 다음을 입력합니다.systemctl edit [email protected]

[Unit]
ConditionPathExists=!/etc/no-login-console

이는 서비스가 /etc/no-login-console존재하지 않는 경우에만 시작하도록 지시합니다. 편집기를 저장하고 종료합니다. 실행하면 기본 서비스 파일과 재정의가 표시됩니다.systemctl cat [email protected]

편집: CentOS 7.1과 함께 제공되는 버전처럼 보이지만 systemctl edit사용할 수 없습니다. 대신 (서비스 파일의 경로는 어디에 있습니까?)을 실행하고 위의 텍스트를 파일에 추가하십시오. 그런 다음 실행하고 실행하면 삽입된 파일을 읽었다는 내용이 출력에 표시되어야 합니다.systemctl catsystemdsudo vim /lib/systemd/system/[email protected]/condition-path.conf/lib/systemd/system/[email protected]systemctl daemon-reloadsystemctl status getty@

답변2

display-managerUbuntu 16.04에서는 서비스 입니다 . 예를 들어:

[Unit]
Description=Purge home
Before=display-manager.service

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/clean-home.sh

[Install]
WantedBy=display-manager.service

관련 정보