Systemd Type=포킹은 하위 프로세스를 캡처하지 않습니다(업데이트됨, systemd로 인해 발생하지 않음)

Systemd Type=포킹은 하위 프로세스를 캡처하지 않습니다(업데이트됨, systemd로 인해 발생하지 않음)

고쳐 쓰다:

이 문제를 해결했습니다. 여기에서 내 경험을 공유하겠습니다.

  • 새로운 vncsession은 하위 프로세스의 상태를 분기하고 확인합니다.
  • 키즈체크 /home/$USER/.vnc/. 사실 가장 큰 문제는 이 폴더입니다. 이 폴더는 이전에 생성된 것으로 보이며 SELinux 컨텍스트가 vncsession과 다릅니다. 폴더를 삭제하고 비밀번호를 다시 만드세요.
  • TigerVNC를 컴파일하려면 다음 명령을 따르십시오.속도 사양, RPM 버전은 접두사를 사용 /usr하고 git 버전은 /usr/local.
  • 실제로 오류 메시지를 포착하려면 모두를 다음 perror으로 바꾸십시오.syslog(LOG_CRIT, ...

가장 큰 문제는 포크된 프로세스의 오류가 반영되지 journalct -t vncsession않거나journalctl -u vncserver@:$DISPLAY. 근본 원인을 찾으려면 vncsession의 소스 코드를 수정해야 합니다.

원래 질문:

Fedora 33에서 TigerVNC를 사용하고 있습니다. TigerVNC의 최신 업데이트는 Switch vncserver에서 vncsession. 최신 변경 사항을 반영하여 시스템 단위 파일이 업데이트되었습니다. 그런데 최신 systemd 유닛 파일로 VNC를 시작할 수 없어 디버깅 중입니다. 서비스가 제대로 실행되고( -xvncsession이 올바르게 호출되는지 확인하기 위해 래퍼 bash 코드에 추가함) 서비스가 시작됩니다.비활성.

유닛 파일의 기본 구조는 다음과 같습니다.

Type=forking
ExecStart=/.../vncsession-start DISPLAY

vncsession-start는 실제로 래퍼입니다.

...
exec /.../vncsession USER DISPLAY

문제는 내가 systemctl start서비스할 때 오류 없이 종료된다는 것입니다(마스터 PID만 나열되고 ExitCode=0). 그러나 나는 두 가지 다른 방법으로 실행합니다.

  • Bash에서 직접 실행: 실행되고 Xvnc가 시작됩니다.
  • 유닛 파일을 으로 수정 ExecStart=/bin/bash -cx 'strace -f vncsession USER DISPLAY'하고 변경 Type=simple: Xvnc도 시작됩니다.

첫 번째 시도는 잘못된 vnc 구성 문제를 해결하는 것입니다. 두 번째 시도는 SELinux 설정을 확인하는 것입니다.

문서에 따르면 시스템 호출이 처리됩니다 Type=forking. fork()나는 vncsessionstrace로 확인했고 내가 본 것은 다음과 같습니다:

  • 배쉬 execvnc 세션
  • vnc 세션 호출 clone(),아니요 fork()
  • vncsession을 실행한 다음 execev()start Xvnc를 호출합니다.

그래서 내 질문은 다음과 같습니다. 1) 이 상황에 적합한 것은 무엇이며 올바른 선택 Type=입니까 ? forking2) 이런 종류의 문제를 디버깅하는 방법은 무엇입니까?

감사합니다!

관련 정보