서비스를 시작하려면 점유된 /dev/tty를 지우십시오.

서비스를 시작하려면 점유된 /dev/tty를 지우십시오.

로그인 프롬프트 전에 출력을 사용하여 Ubuntu 서버의 특정 tty에서 서비스를 실행하고 싶습니다. tty3에서 htop을 실행하는 서비스를 성공적으로 만들었습니다.

[Unit]
Description=htop on tty3

[Service]
Type=simple
ExecStart=/usr/bin/htop
ExecStop=/bin/kill -HUP ${MAINPID}
StandardInput=tty
StandardOutput=tty
TTYPath=/dev/tty3
Restart=always
RestartSec=2

[Install]
WantedBy=getty.target

이것은 기본적으로 잘 작동하며 예상대로 tty3(alt+f3)으로 전환하면 예상대로 htop이 표시되고 프로세스를 종료하면 즉시 다시 시작됩니다. 다른 tty에서 서비스를 중지하고 시작/다시 시작해도 예상대로 잘 작동합니다.

그러나 다른 서비스의 노력에 대해 나를 다소 좌절시키는 이상한 경우가 있습니다. 위 서비스를 중지하고 tty3으로 전환하면 로그인 프롬프트가 표시되고, 다시 다른 tty로 전환하고 서비스를 다시 시작하면 htop이 다시 돌아오지 않습니다. 나는 이것이 정상적인 로그인/터미널/무엇이든 이제 /dev/tty3을 요구하기 때문에 이것이라고 생각합니다. 그래서 내 서비스는 /dev/tty3을 요구할 수 있을 때까지 기다리고 있습니다.

그래서 내 질문은 일반 bash 터미널이 이를 요청한 후 이 서비스나 유사한 서비스를 다시 시작할 수 있도록 특정 tty를 어떻게 지우는가입니다.

답변1

아래의 "가상 터미널" 단락을 참조하십시오.http://0pointer.de/blog/projects/serial-console.html

기본적으로 가상 터미널 #1-#6으로 전환하면 logind해당 프로세스가 의 템플릿을 기반으로 자동으로 시작됩니다. 자동 시작 횟수는 및 의 두 가지 설정으로 제어됩니다. `/etc/systemd/logind.conf.d/*.conf 문서에서 주석 처리를 제거하고 조정하여 기본값에서 벗어나 이러한 설정을 수정할 수 있습니다.getty/lib/systemd/system/[email protected]gettylogindNAutoVTs=ReserveVT=/etc/systemd/logind.conf

또는 더 높은 TTY 번호를 사용할 수 있습니다. gettys에는 #1-#6을, GUI에는 #7과 #8(빠른 사용자 전환을 위해 1개 추가)을 남겨둡니다. 또한 #9-#12는 무료로 사용할 수 있습니다.

관련 정보