Microsoft가 systemd를 너무 많이 홍보하고 있다면 왜 System V를 사용하여 Ubuntu 18.04 LTS WSL에서 서비스를 다시 시작해야 합니까? [폐쇄]

Microsoft가 systemd를 너무 많이 홍보하고 있다면 왜 System V를 사용하여 Ubuntu 18.04 LTS WSL에서 서비스를 다시 시작해야 합니까? [폐쇄]

어제 WSL에서 apache2 서버를 다시 시작해야 했는데 놀랍게도 systemctlUbuntu에서처럼 사용할 수 없었습니다. 대신 sudo /etc/init.d/apache2 restart.

하지만 내 생각에 Lennart Poettering은 Microsoft와 관련이 있는 것 같습니다. 여기서 무슨 일이 벌어지고 있는 걸까요?

답변1

제목과 질문 사이에 해결해야 할 몇 가지 질문과 설명이 있습니다.

Microsoft가 systemd를 너무 세게 밀었다면

Lennart Poettering이 Microsoft와 연결되어 있다고 생각했습니다.

의견에서 지적했듯이 Microsoft와 Poettering, Microsoft와 Systemd 사이에는 아무런 관계가 없습니다.

우분투처럼 사용할 수 없다는 것에 놀랐습니다 systemctl. 대신 sudo /etc/init.d/apache2 restart로 되돌려야 합니다.

이는 WSL에서 예상됩니다. WSL의 "누락된 부분" 중 하나는 대체 PID1 하이퍼바이저(일명 Systemd, 공정하게 말하면 몇 가지 다른 기능도 있음)에 대한 지원으로 남아 있습니다.

WSL github 저장소에서 이와 관련된 많은 질문을 찾을 수 있지만 두 가지 주요 질문은 다음과 같습니다.

문제의 핵심은 WSL이 자체 /init프로세스를 사용하여 Windows와 Linux/WSL 간의 상호 운용성의 상당 부분을 부트스트랩한다는 것입니다. 부분 목록을 만들었습니다.우분투 답변에 물어보세요.

Systemd의 전체 설계(적어도 이와 관련하여)에서는 PID1이 필요합니다.어느모든 기능이 잘 작동합니다.

그것은가능한WSL2를 사용하여 새 PID 네임스페이스를 시작하고 Systemd를 PID1로 사용하고 네임스페이스를 입력하고 systemctl함수를 사용합니다. 그러나 많은 경고 사항도 함께 제공됩니다.

그러나 이를 실제로 보려면("일반적인 사용"이 아님) 다음을 수행하십시오.

sudo -b unshare --pid --fork --mount-proc /lib/systemd/systemd --system-unit=basic.target
# Wait 10-20 seconds for things to start up
sudo -E nsenter --all -t $(pgrep -xo systemd) runuser -P -l $USER -c "exec $SHELL"

를 통해 Apache를 시작할 수 있어야 합니다 systemctl.

이로 인해 여러 가지 결과가 발생합니다.다른그러나 문제는 다음과 같습니다.

  • Systemd가 WSL 처리기를 제거했기 때문에 Windows 실행 파일을 실행할 수 없습니다 binfmt_misc.
  • Windows 경로는 WSL2/Linux 경로에 추가되지 않습니다.
  • systemd-tmpfiles소켓이 제거되어 Windows 11에서 WSLg가 작동하지 않습니다.
  • 다른 사람

WSL2와 Systemd가 함께 작동하도록 설계된 일부 타사 스크립트(Genie, WSL2Hacks 등)가 있지만진짜대부분의 경우에는 필요하지 않습니다.

보시다시피 대부분의 작업에서는 간단히 init.d스크립트를 사용할 수 있습니다(배포판에 제공된 경우). PID1이 필요하지 않은 Supervisord와 같은 대체 프로세스 관리자를 사용하는 것을 고려할 수도 있습니다. Windows 11에서 자동으로 실행되고 필요한 시작 작업을 실행하도록 설정할 수도 있습니다.

개인적으로 저는 WSL에서 Systemd가 아닌 배포판을 사용해 왔습니다. dinit지금까지는 프로세스 관리자가 포함된 Artix(Arch 기반 배포판)가 매우 유망해 보입니다.

관련 정보