Score:4

วิธีเริ่มบริการเฉพาะเมื่อ Ubuntu เริ่มทำงานบน WSL2

ธง th

ฉันจำเป็นต้องวิ่ง sudo บริการ postgresql เริ่มต้น ทุกครั้งเมื่อฉันเริ่ม Ubuntu บน WSL2

ฉันจะทำให้บริการเริ่มต้นโดยอัตโนมัติเมื่อเริ่ม Ubuntu ได้อย่างไร

WSL ไม่ได้ใช้ systemd ดังนั้น sudo systemctl เปิดใช้งาน postgresql ไม่ทำงาน

$ sudo systemctl สถานะ postgresql
ระบบไม่ได้บู๊ตด้วย systemd เป็นระบบเริ่มต้น (PID 1) 
ไม่สามารถใช้งานได้ ไม่สามารถเชื่อมต่อกับบัส: โฮสต์ไม่ทำงาน

มีวิธีมาตรฐานในการเริ่มบริการเมื่อเริ่มต้นหรือไม่

แก้ไข

ฉันต้องการเริ่มบริการเมื่อเริ่มต้น Ubuntu ไม่ใช่เมื่อเริ่มต้น Windows

muru avatar
us flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [WSL Ubuntu มีวิธีง่ายๆ ในการให้ bash เริ่มโดยอัตโนมัติเมื่อเริ่มต้น Windows หรือไม่](https://askubuntu.com/questions/1177273/wsl-ubuntu-is-there-an-easy-way-to-have- ทุบตีเริ่มต้นโดยอัตโนมัติบน windows-sta)
muru avatar
us flag
(หากคุณไม่ได้หมายถึง start on boot แต่เฉพาะเมื่อคุณเรียกใช้ WSL ให้ใส่ `sudo service postgresql start` ใน `.bashrc` ของคุณควรใช้งานได้ดี)
ironsand avatar
th flag
ฉันแค่ต้องการเริ่มบริการเมื่อเปิดตัว WSL และฉันจะหลีกเลี่ยงคำสั่ง `sudo` ใน `.bashrc` ด้วยวิธีนี้ ฉันจำเป็นต้องพิมพ์รหัสผ่านเสมอเมื่อเปิดแท็บใหม่
muru avatar
us flag
คุณต้องเพิ่มกฎ NOPASSWD สำหรับคำสั่งนี้ ดังนั้นคุณจะไม่ต้องป้อนรหัสผ่าน
ironsand avatar
th flag
ฉันเพิ่ม `ironsand ALL=NOPASSWD:/usr/sbin/service postgresql` ใน `/etc/sudoer` และรีสตาร์ท wsl แต่ฉันยังต้องป้อนรหัสผ่านทุกครั้ง นี่อาจเป็นคำถามอื่น ฉันควรเปิดคำถามใหม่หรือไม่
muru avatar
us flag
หากคุณใช้อาร์กิวเมนต์กับคำสั่ง จะต้องตรงกับบรรทัดคำสั่งทุกประการ (`sudo service postgresql` != `sudo service postgresql start` ลองเพิ่ม `start` ในบรรทัด sudoers ด้วย คุณไม่ควรมี หากต้องการรีสตาร์ท WSL การเปลี่ยนแปลงเป็น `sudoers` จะมีผลทันที
Score:6
ธง vn

ด้วย Windows 11 รุ่นล่าสุด มีสองวิธีที่แนะนำในการดำเนินการนี้

วินโดวส์ 11

ขณะนี้ คุณสามารถเรียกใช้บรรทัดคำสั่งโดยอำเภอใจเมื่อเริ่มต้นอินสแตนซ์โดยการสร้าง/แก้ไข /etc/wsl.conf (ผ่าน sudo) ด้วยสิ่งต่อไปนี้:

[บูต]
คำสั่ง = "บริการ postgresql เริ่มต้น"

คำสั่งนี้ทำงานเป็นรูทและไม่สร้างเอาต์พุต หากคุณต้องการเรียกใช้หลายคำสั่ง ควรคั่นด้วยเครื่องหมายอัฒภาค (หรืออะไรทำนองนี้ &&) ข้างใน คำสั่ง= สตริง

วินโดวส์ 10

บน WSL กับ Windows 10 ยังมีวิธีที่ง่ายกว่า IMHO มากกว่าการใส่ไฟล์ ซูโด คำสั่งในการเริ่มต้นของคุณและกังวลเกี่ยวกับ ซูโดเออร์.

ซูโดเออร์ เป็นวิธีที่เป็นที่ยอมรับ (ไม่มีการเล่นสำนวนเป็นเพียงอุบัติเหตุที่มีความสุข) ที่จะทำบน Ubuntu แต่บน WSL การใช้ไวยากรณ์ต่อไปนี้ในของคุณง่ายกว่า ~/.bashrc:

 wsl.exe -u บริการ root postgresql สถานะ || wsl.exe -u บริการ root postgresql เริ่มต้น

wsl.exe -u รูท ไม่ต้องใช้รหัสผ่าน จาก PowerShell และ CMD สามารถเรียกได้โดยไม่ต้องใช้ exeแต่จากภายใน WSL นั้นต้องการส่วนขยาย

หมายเหตุ ต่อ @mbomb007ความคิดเห็นของ สิ่งนี้จะสร้างหนึ่งหรือสองข้อความทุกครั้งที่คุณเริ่ม หากต้องการระงับสิ่งนี้ ให้ใช้:

wsl.exe -u บริการ root สถานะ postgresql > /dev/null || wsl.exe -u บริการ root postgresql start > /dev/null
mbomb007 avatar
so flag
เพื่อหลีกเลี่ยงการเห็นเอาต์พุตทุกครั้งที่คุณเปิด WSL ให้ใช้ `wsl.exe -u root service postgresql status > /dev/null || wsl.exe -u root service postgresql start > /dev/null` แทน
Jeppe avatar
es flag
โซลูชัน Windows 11 ใช้งานไม่ได้สำหรับฉัน .. บริการยังคงไม่ทำงาน ฉันสามารถบอกได้ว่ามันโหลดช้าลงก่อนที่จะแสดง `Sleeping for 1 seconds to let systemd set` แม้ว่า
NotTheDr01ds avatar
vn flag
@Jeppe ดูเหมือนว่าคุณกำลังใช้สคริปต์ Systemd - บางที WSL2Hacks หรือ Genie นั่นจะเปลี่ยนพฤติกรรม *มากมาย* ในระบบของคุณ หากคุณมี Systemd "ใช้งานได้" ให้ใช้เมธอด `systemctl` ปกติเพื่อเริ่มอัตโนมัติ -- บางอย่างเช่น `sudo systemctl enable `. แต่ขอแนะนำอย่างยิ่งให้คุณเข้าใจถึงข้อควรระวังที่อาจเกิดขึ้นกับ Systemd ภายใต้ WSL2 นี่เป็นเพียงหนึ่งในหลายสิ่งหลายอย่างที่จะแตกต่างออกไป

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา