簡體   English   中英

無法在 WSL 2 Ubuntu20.04 上通過 Ansible 啟動服務

[英]Cannot start service via Ansible on WSL 2 Ubuntu20.04

我正在嘗試使用 Ubuntu20.04 在 WSL 2 上運行 Ansible playbook。 大多數任務正常工作,但是管理服務的所有任務(例如啟動 nginx)都失敗了。

Ansible代碼:

  - 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 系統的信息:
用戶名 -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 --version:

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 --version:

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 使用它自己的初始化系統作為 PID 1 來引導原生 Windows 服務和 WSL/Linux 之間的互操作性。

所以“啟用”標志不會做任何事情。

問題真的是你想什么時候啟動服務:

  • Windows何時啟動?
  • 用戶何時登錄?
  • 首次手動啟動 WSL 實例時(例如,通過 Windows 終端調用)?

前兩個應該可以使用運行wsl -u root service nginx start類的 Windows 任務管理器腳本。 “登錄”絕對是一個更簡單的用例。 如果 WSL 實例不是在用戶會話中啟動,我已經注意到 Windows 終止 WSL 實例的一些問題。 如果您遇到這種情況,有一種可能的解決方法,但我建議單獨提出一個問題/答案來涵蓋它。

在第一次 WSL 調用時啟動nginx將涉及:

  • 設置sudoers (當然是通過visudo )以允許您的用戶在沒有密碼的情況下運行sudo service nginx start
  • 編輯您的啟動文件(例如.bash_profile )以包含諸如service nginx status || sudo service nginx start service nginx status || sudo service nginx start

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM