System has not been booted with systemd as init system (PID 1). Can't operate
Failed to connect to bus: Host is down
이 에러는 주로 WSL(Windows Subsystem for Linux)에서 발생하는 에러로서, 정식 Linux OS가 아니라서 systemd를 가지고 작업을 하기에 적합하지 않은 환경이라서 발생하는 것임
Linux는 오랫동안 initd가 최초의 프로세스로 기능했으나 근래에는 systemd가 그 역할을 물려받아서 대체되었음. 그러나 WSL은 여전히 init 프로세스(PID 1)가 이 역할을 하고 있어서 호환성에 문제가 있음
해결 방법
systemctl 명령을 직접 사용하기는 어려우나 service 명령이 이를 대체할 수 있음
systemctl start nginx.service
대신에 다음 명령으로 바꿔서 실행하면 됨
service nginx start
systemd가 관리해주고 systemctl로 제어할 수 있는 서비스들은 /lib/systemd/system 디렉토리나 /lib/systemd/user 디렉토리 하위에 위치함
find /lib/systemd/ -name "ssh.service"
/lib/systemd/system/ssh.service
[Unit]
Description=OpenBSD Secure Shell server
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
Alias=sshd.service
서비스 파일의 내용을 살펴보고 이걸 수동으로 실행하는 방법이 있음
ExecStart로 정의된 명령을 보면 /usr/sbin/sshd -D $SSHD_OPTS이고 SSHD_OPTS 변수의 값은 EnvironmentFile인 /etc/default/ssh 파일에 정의되어 있음
단순한 명령 실행이 아니라 Linux 커널에 크게 의존하는 경우에는 systemd와 systemctl 문제를 해결한 뒤에도 원하는대로 동작하지 않을 수 있으므로 WSL이 아닌 진짜 Linux 환경을 준비해서 사용하는 것을 권장함. 예를 들면, 가상 머신 기술(VirtualBox나 VMWare)을 이용하여 Linux를 설치하고 사용하는 것이 필요함