无法通过WSL 2 Ubuntu20.4上的Ansible启动服务



我正在尝试使用Ubuntu20.4在WSL2上运行Ansible剧本。大多数任务都能正常工作,但所有管理服务的任务(例如启动nginx(都会失败。

可靠代码:

- name: NGINX - enable and start nginx service
systemd:
name: nginx
enabled: yes
state: started

我在命令行中得到以下错误:

TASK [ansible-role-nginx : NGINX - enable and start nginx service]
fatal: [webapp]: FAILED! => {"changed": false, "msg": "Service is in unknown state", "status": {}}

关于WSL 2系统的信息:
uname-a:

Linux CPX-TRWO066I0YQ 5.4.72-microsoft-standard-WSL2 #1 SMP Wed Oct 28 23:40:43 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

lsb_release-a:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal

ansible--版本:

ansible 2.9.16
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/ubuntu/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.8.5 (default, May 27 2021, 13:30:53) [GCC 9.3.0]

systemd——版本:

systemd 245 (245.4-4ubuntu3.6)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid

当我通过命令sudo service nginx start启动服务时,它工作正常。

如果你对这个案子有任何建议或解决方案,请告诉我。

实际上您遇到了两个问题。首先,看起来您是在专门使用Ansible systemd模块。这是行不通的,因为如果不付出大量努力,WSL就无法支持systemd。

正如您所注意到的,由于WSL Ubuntu 20.04发行版确实提供了对service命令的回退,因此应该能够简单地将其与Ansible服务模块交换。例如:

- name: NGINX - enable and start nginx service
service:
name: nginx
enabled: yes
state: started

但接下来你会遇到第二个问题——WSL没有提供任何类型的";启动脚本";支持正如我们已经提到的,systemd不受支持,但旧的SysVInit也不受支持。WSL使用自己的init系统作为PID1来引导本机Windows服务和WSL/Linux之间的互操作性。

因此;启用";flag什么都不会做。

真正的问题是你想在什么时候启动服务:

  • Windows何时启动
  • 用户何时登录
  • 当WSL实例第一次手动启动时(例如,通过Windows终端调用(

前两个应该可以通过运行类似wsl -u root service nginx start的Windows任务管理器脚本来实现。";登录";绝对是一个更简单的用例。我注意到,如果WSL实例没有在用户会话中启动,Windows会终止它,这会带来一些问题。如果你遇到这种情况,有一个可能的解决方法,但我建议用一个单独的问题/答案来解决

在第一次WSL调用时启动nginx将涉及:

  • 设置sudoers(当然是通过visudo(以允许用户在没有密码的情况下运行sudo service nginx start
  • 编辑启动文件(例如.bash_profile(以包含类似service nginx status || sudo service nginx start的内容

相关内容

  • 没有找到相关文章

最新更新