我在 WSL2(适用于 Linux 的 Windows 子系统,v2)上并从以下网址获得了 CentOS 8 WSL:
https ://github.com/yuk7/CentWSL
而且从 Windows Store 下载的 Ubuntu 20 WSL 也没有systemd
启用。
让它像往常一样运行,但是systemd
没有运行,尽管它确实存在于文件系统中:
$ cat /etc/*-release | grep NAME
NAME="CentOS Linux"
PRETTY_NAME="CentOS Linux 8 (Core)"
CPE_NAME="cpe:/o:centos:centos:8"
$ stat /lib/systemd/systemd
File: /lib/systemd/systemd
Size: 2523648 Blocks: 4936 IO Block: 4096 regular file
Device: 2h/2d Inode: 1407374884100769 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-05-31 13:17:53.497597100 +0700
Modify: 2020-04-10 04:52:32.000000000 +0700
Change: 2020-05-30 12:06:52.791586300 +0700
Birth: -
$ systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
/sbin/init
已经是一个符号链接systemd
:
$ stat /sbin/init
File: /sbin/init -> ../lib/systemd/systemd
Size: 22 Blocks: 0 IO Block: 4096 symbolic link
Device: 2h/2d Inode: 2251799814381086 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-10 04:52:20.000000000 +0700
Modify: 2020-04-10 04:52:20.000000000 +0700
Change: 2020-05-30 12:06:53.461589000 +0700
Birth: -
我找到了 2 个初始化文件:
/init
/sbin/init --> /lib/systemd/systemd
可能加载 WSL2 Linux 内核/init
而不是/sbin/init
?
如何systemd
在这个发行版中启用,让 sshd、nginx 等守护进程运行?需要触摸/sbin/init
或那种文件?
我在这里有一个解决方法,但它不适用于那些明确需要 systemd 的服务:
仍在使用
/init
而不是/sbin/init
在 WSL2 上,适用于常规服务,而不是那些明确需要“systemd”的服务。找出 systemctl 在哪里:
which systemctl
使用 systemctl 的路径来执行以下命令。
安装 Python 2(如果默认不可用):
在 Python 中包装 systemctl(或者以某种方式让 systemctl 与 systemd 一起工作,而不是在 PID 1 上):
测试系统ctl:
对于systemd.io 支持和认可的每个发行版,建议使用systemd-genie https://github.com/arkane-systems/genie 。它可以在系统(systemd --system)和用户模式(systemd --user)下工作。t 维护良好,易于与 wsl 和 Windows 终端集成。不需要额外的脚本。
我发现这很有帮助: