Điểm:4

Cách khởi động một dịch vụ cụ thể khi khởi động Ubuntu trên WSL2

lá cờ th

tôi cần phải chạy bắt đầu dịch vụ sudo postgresql mỗi khi tôi khởi động Ubuntu trên WSL2.

Làm cách nào để dịch vụ tự động khởi động khi tôi khởi động Ubuntu?

WSL không sử dụng systemd, vì vậy Sudo systemctl kích hoạt postgresql không hoạt động.

$ Sudo systemctl trạng thái postgresql
Hệ thống chưa được khởi động với systemd là hệ thống init (PID 1). 
Không thể hoạt động. Không thể kết nối với xe buýt: Máy chủ không hoạt động

Có một cách tiêu chuẩn để bắt đầu một dịch vụ khi khởi động?

Chỉnh sửa

Tôi muốn bắt đầu dịch vụ khi khởi động Ubuntu, không phải khi khởi động Windows.

muru avatar
lá cờ us
Điều này có trả lời câu hỏi của bạn không? [WSL Ubuntu, có cách nào dễ dàng để bash tự động khởi động khi khởi động Windows không?](https://askubuntu.com/questions/1177273/wsl-ubuntu-is-there-an-easy-way-to-have- bash-start-autoally-on-windows-sta)
muru avatar
lá cờ us
(Nếu ý bạn không phải là khởi động khi khởi động, mà chỉ khi bạn chạy WSL, thì chỉ cần đặt `sudo service postgresql start` vào `.bashrc` của bạn sẽ hoạt động tốt.)
ironsand avatar
lá cờ th
Tôi chỉ muốn bắt đầu một dịch vụ khi WSL được khởi chạy. Và tôi sẽ tránh dùng lệnh `sudo` trong `.bashrc`. Theo cách đó, tôi luôn cần nhập mật khẩu của mình khi mở các tab mới.
muru avatar
lá cờ us
Bạn sẽ thêm quy tắc NOPASSWD chỉ cho lệnh này, vì vậy bạn sẽ không được nhắc nhập mật khẩu.
ironsand avatar
lá cờ th
Tôi đã thêm `ironsand ALL=NOPASSWD:/usr/sbin/service postgresql` vào `/etc/sudoer` và khởi động lại wsl, nhưng tôi vẫn cần nhập mật khẩu mỗi lần. Có lẽ đây là một câu hỏi khác, tôi có nên mở một câu hỏi mới không?
muru avatar
lá cờ us
Nếu bạn sử dụng một đối số cho lệnh, thì nó phải khớp chính xác với dòng lệnh (`sudo service postgresql` != `Sudo service postgresql start`. Hãy thử thêm `start` vào dòng sudoers. Bạn không nên có để khởi động lại WSL, các thay đổi đối với `sudoers` sẽ có hiệu lực ngay lập tức.
Điểm:6
lá cờ vn

Với việc phát hành Windows 11 gần đây, có hai cách ưu tiên để thực hiện việc này.

cửa sổ 11

Giờ đây, bạn có thể thực thi một dòng lệnh tùy ý khi bắt đầu một phiên bản bằng cách tạo/chỉnh sửa /etc/wsl.conf (thông qua Sudo) với nội dung sau:

[khởi động]
lệnh = "dịch vụ postgresql bắt đầu"

Lệnh này chạy với quyền root và không tạo đầu ra. Nếu bạn cần chạy nhiều lệnh, chúng phải được phân tách bằng dấu chấm phẩy (hoặc đại loại như &&) bên trong lệnh = chuỗi.

cửa sổ 10

Trên WSL với Windows 10, IMHO, vẫn còn một cách dễ dàng hơn là đặt một sudo lệnh trong khởi động của bạn và lo lắng về sudoers.

sudoers chắc chắn là cách kinh điển (không có ý định chơi chữ, chỉ là một tai nạn vui vẻ) để thực hiện điều đó trên Ubuntu, nhưng trên WSL, việc sử dụng cú pháp sau trong ~/.bashrc:

 wsl.exe -u trạng thái postgresql dịch vụ gốc || wsl.exe -u dịch vụ gốc postgresql bắt đầu

wsl.exe -u gốc không yêu cầu mật khẩu. Từ PowerShell và CMD, nó có thể được gọi mà không cần người cũ, nhưng từ bên trong WSL, nó yêu cầu tiện ích mở rộng.

Lưu ý, mỗi @bomb007nhận xét của bạn, điều này sẽ tạo ra một hoặc hai thông báo mỗi khi bạn bắt đầu. Để ngăn chặn điều này, sử dụng:

wsl.exe -u trạng thái postgresql của dịch vụ gốc > /dev/null || wsl.exe -u dịch vụ root postgresql bắt đầu > /dev/null
mbomb007 avatar
lá cờ so
Để tránh nhìn thấy đầu ra mỗi khi bạn mở WSL, hãy sử dụng `wsl.exe -u root service postgresql status > /dev/null || thay vào đó, wsl.exe -u root service postgresql start > /dev/null`.
Jeppe avatar
lá cờ es
Giải pháp Windows 11 không hoạt động với tôi.. dịch vụ vẫn không hoạt động. Tôi có thể nói rằng nó tải chậm hơn trước khi nó hiển thị `Ngủ trong 1 giây để hệ thống giải quyết`.
NotTheDr01ds avatar
lá cờ vn
@Jeppe Có vẻ như bạn đang sử dụng tập lệnh Systemd - Có lẽ là WSL2Hacks hoặc Genie? Điều đó sẽ thay đổi *rất nhiều* hành vi trên hệ thống của bạn. Tuy nhiên, nếu bạn có Systemd "đang hoạt động", chỉ cần sử dụng các phương thức `systemctl` thông thường để tự khởi động -- Đại loại như `sudo systemctl enable `. Nhưng thực sự khuyên bạn nên hiểu những cảnh báo có thể có mà bạn có thể gặp phải với Systemd trong WSL2. Đây chỉ là một trong nhiều thứ sẽ khác.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.