Score:0

สร้างบริการ Systemd ใน Ubuntu เพื่อเรียกใช้ MKDocs

ธง ye

ฉันใช้เซิร์ฟเวอร์ที่มี MKDocs สำหรับเอกสารประกอบ

ในการใช้ MKDocs จากไดเร็กทอรีที่คุณต้องเรียกใช้โปรเจ็กต์ mkdocs ให้บริการ -a 192.168.3.107:8080 เพื่อที่จะได้เริ่มต้น

จนถึงตอนนี้ฉันใช้ /usr/bin/tmux new-session -d -s "MKDOCS" "cd /root/mkdocs && mkdocs เสิร์ฟ -a 192.168.3.107:8080" เพื่อให้มันทำงานในพื้นหลัง แต่นี่เป็นวิธีแก้ปัญหาที่สมบูรณ์มากและฉันต้องการเรียกใช้เป็น systemd Service

ฉันลองทำสิ่งนี้ แต่มันใช้งานไม่ได้:

[หน่วย]
Description=บริการ mkdocs
ConditionPathExists=/root/mkdocs
[บริการ]
ประเภท = ง่าย
ผู้ใช้ = ราก
WorkingDirectory=/usr/local/bin
ExecStart=/root/mkdocs ให้บริการ -a 192.168.3.107:8080
RemainAfterExit=ใช่

[ติดตั้ง]
WantedBy=multi-user.target

หลังจากที่ฉันเรียกใช้บริการด้วยการเริ่มต้น สถานะจะแสดง:

root@server:~/mkdocs# สถานะบริการ mkdocs
â mkdocs.service - บริการ mkdocs
     โหลดแล้ว: โหลดแล้ว (/etc/systemd/system/mkdocs.service; ปิดใช้งาน; การตั้งค่าล่วงหน้าของผู้ขาย: เปิดใช้งาน)
     ใช้งานอยู่: ล้มเหลว (ผลลัพธ์: exit-code) ตั้งแต่วันพุธที่ 2022-02-02 13:54:44 CET; 3 นาที 46 วินาทีที่แล้ว
    กระบวนการ: 379585 ExecStart=/root/mkdocs ให้บริการ -a 192.168.3.107:8080 (รหัส=ออก, สถานะ=203/EXEC)
   PID หลัก: 379585 (รหัส=ออก สถานะ=203/EXEC)

ฉันได้รับการแสดง journalctl -xe:

-- ตัวระบุงานคือ 368094
2 ก.พ. 13:54:44 server.domain.local systemd[379585]: mkdocs.service: ไม่สามารถดำเนินการคำสั่ง: ปฏิเสธการอนุญาต
2 ก.พ. 13:54:44 server.domain.local systemd[379585]: mkdocs.service: ล้มเหลวในขั้นตอนการวางไข่ EXEC /root/mkdocs: สิทธิ์ถูกปฏิเสธ
-- เรื่อง: ไม่สามารถดำเนินการกระบวนการ /root/mkdocs
-- กำหนดโดย: systemd
-- การสนับสนุน: http://www.ubuntu.com/support
-- 
-- กระบวนการ /root/mkdocs ไม่สามารถดำเนินการและล้มเหลว
-- 
-- หมายเลขข้อผิดพลาดที่ส่งคืนโดยกระบวนการนี้คือ ERRNO
2 ก.พ. 13:54:44 server.domain.local systemd[1]: mkdocs.service: ออกจากกระบวนการหลักแล้ว, รหัส=ออก, สถานะ=203/EXEC
-- หัวเรื่อง: ออกจากกระบวนการหน่วยแล้ว
-- กำหนดโดย: systemd
-- การสนับสนุน: http://www.ubuntu.com/support
-- 
-- กระบวนการ ExecStart= ที่เป็นของหน่วย mkdocs.service ได้ออกแล้ว
-- 
-- รหัสออกจากกระบวนการคือ 'ออก' และสถานะการออกคือ 203
02 ก.พ. 13:54:44 server.domain.local systemd[1]: mkdocs.service: ล้มเหลวด้วยผลลัพธ์ 'exit-code'
-- หัวเรื่อง: หน่วยล้มเหลว
-- กำหนดโดย: systemd
-- การสนับสนุน: http://www.ubuntu.com/support
-- 
-- หน่วย mkdocs.service เข้าสู่สถานะ 'ล้มเหลว' พร้อมผลลัพธ์ 'exit-code'

ฉันให้สิทธิ์ไดเรกทอรีทั้งหมดกับ chmod -R 777 /root/mkdocs แต่ฉันยังคงได้รับข้อผิดพลาดเดียวกัน

หวังว่าจะมีคนช่วยให้ฉันทำงานได้ ขอขอบคุณ

แก้ไข:

ฉันเปลี่ยนเส้นทางแล้ว สิทธิ์ยังคง 777 ดังนั้นรหัสตอนนี้คือ:

แต่ก็ยังใช้งานไม่ได้ ฉันได้รับ:

root@server:/test# systemctl daemon-reload
root@server:/test# systemctl เริ่ม mkdocs.service
root@server:/test# systemctl สถานะ mkdocs.service
â mkdocs.service - บริการ mkdocs
     โหลดแล้ว: โหลดแล้ว (/etc/systemd/system/mkdocs.service; ปิดใช้งาน; การตั้งค่าล่วงหน้าของผู้ขาย: เปิดใช้งาน)
     ใช้งานอยู่: ล้มเหลว (ผลลัพธ์: exit-code) ตั้งแต่วันพุธที่ 2022-02-02 14:17:24 CET; 4 วินาทีที่แล้ว
    กระบวนการ: 380128 ExecStart=/test mkdocs ให้บริการ -a 192.168.3.107:8080 (รหัส=ออก, สถานะ=203/EXEC)
   PID หลัก: 380128 (รหัส=ออก สถานะ=203/EXEC)

02 ก.พ. 14:17:24 server.domain.local systemd[1]: เริ่มบริการ mkdocs
2 ก.พ. 14:17:24 server.domain.local systemd[380128]: mkdocs.service: ไม่สามารถดำเนินการคำสั่ง: ปฏิเสธการอนุญาต
2 ก.พ. 14:17:24 server.domain.local systemd[380128]: mkdocs.service: ล้มเหลวในขั้นตอนการวางไข่ EXEC / ทดสอบ: ปฏิเสธการอนุญาต
2 ก.พ. 14:17:24 server.domain.local systemd[1]: mkdocs.service: ออกจากกระบวนการหลักแล้ว, รหัส=ออก, สถานะ=203/EXEC
2 ก.พ. 14:17:24 server.domain.local systemd[1]: mkdocs.service: ล้มเหลวด้วยผลลัพธ์ 'exit-code'

และ สมุดรายวันctl -xe แสดง:

-- หน่วย mkdocs.service เข้าสู่สถานะ 'ล้มเหลว' พร้อมผลลัพธ์ 'exit-code'
02 ก.พ. 14:20:32 server.domain.local systemd[1]: เริ่มบริการ mkdocs
-- เรื่อง: งานเริ่มต้นสำหรับหน่วย mkdocs.service เสร็จสิ้นเรียบร้อยแล้ว
-- กำหนดโดย: systemd
-- การสนับสนุน: http://www.ubuntu.com/support
-- 
-- งานเริ่มต้นสำหรับหน่วย mkdocs.service เสร็จสิ้นเรียบร้อยแล้ว
-- 
-- ตัวระบุงานคือ 368972
2 ก.พ. 14:20:32 server.domain.local systemd[380164]: mkdocs.service: ไม่สามารถดำเนินการคำสั่ง: ปฏิเสธการอนุญาต
2 ก.พ. 14:20:32 server.domain.local systemd[380164]: mkdocs.service: ล้มเหลวในขั้นตอนการวางไข่ EXEC / ทดสอบ: ปฏิเสธการอนุญาต
-- เรื่อง: ไม่สามารถดำเนินการกระบวนการ / ทดสอบได้
-- กำหนดโดย: systemd
-- การสนับสนุน: http://www.ubuntu.com/support
-- 
-- กระบวนการ /test ไม่สามารถดำเนินการได้และล้มเหลว
-- 
-- หมายเลขข้อผิดพลาดที่ส่งคืนโดยกระบวนการนี้คือ ERRNO
2 ก.พ. 14:20:32 server.domainlocal systemd[1]: mkdocs.service: ออกจากกระบวนการหลักแล้ว, รหัส=ออก, สถานะ=203/EXEC
-- หัวเรื่อง: ออกจากกระบวนการหน่วยแล้ว
-- กำหนดโดย: systemd
-- การสนับสนุน: http://www.ubuntu.com/support
-- 
-- กระบวนการ ExecStart= ที่เป็นของหน่วย mkdocs.service ได้ออกแล้ว
-- 
-- รหัสออกจากกระบวนการคือ 'ออก' และสถานะการออกคือ 203
02 ก.พ. 14:20:32 server.domain.local systemd[1]: mkdocs.service: ล้มเหลวด้วยผลลัพธ์ 'exit-code'
-- หัวเรื่อง: หน่วยล้มเหลว
-- กำหนดโดย: systemd
-- การสนับสนุน: http://www.ubuntu.com/support
-- 
-- หน่วย mkdocs.service เข้าสู่สถานะ 'ล้มเหลว' พร้อมผลลัพธ์ 'exit-code'

มันไม่สมเหตุสมผลเลยเนื่องจากการอนุญาตคือ 777

uz flag
Jos
ทำไมมันไม่ทำงาน? ดูเหมือนว่าคุณจะมาถูกทางแล้ว เกิดอะไรขึ้นกับ `sudo systemctl start mkdocs` หรือ `sudo systemctl status mkdocs`
ye flag
@Jos ฉันแก้ไขคำถามเดิมพร้อมข้อมูลเพิ่มเติม ขอบคุณที่ลองดู
uz flag
Jos
มันเป็นปัญหาสิทธิ์ โปรแกรมปฏิบัติการมีสิทธิ์ที่ไม่ถูกต้อง หรือคุณไม่ได้เริ่มบริการด้วย `sudo` ไม่ว่าในกรณีใด `/root` ไม่ใช่ตำแหน่งที่ดีสำหรับโปรแกรมปฏิบัติการของเซิร์ฟเวอร์
ye flag
@Jos ฉันอัปเดตโพสต์ด้วย EDIT ฉันเปลี่ยนเส้นทางและให้สิทธิ์ 777 แต่ก็ยังมีปัญหาอยู่ หวังว่าคุณจะลองดู ขอบคุณ. ฉันเชื่อว่าปัญหาคือวิธีที่ฉันเขียนคำสั่ง ฉันควรจะอยู่ในไดเร็กทอรีที่มี docs และเรียกใช้ mkdocs ซึ่งพบ: whereis mkdocs mkdocs: /usr/local/bin/mkdocs /usr/share/man/man1/mkdocs.1.gz
ye flag
@guiverc ฉันอัปเดตแท็กแล้ว ฉันกำลังทดสอบจริงในวันที่ 20.04
Score:0
ธง ye

ฉันจัดการแก้ไขได้โดยสร้างสคริปต์: /root/mkdocs/run.sh

#!/bin/bash
ซีดี /root/mkdocs
mkdocs ให้บริการ -a 192.168.3.107:8080

และเปลี่ยนบริการเป็น:

[หน่วย]
Description=บริการ mkdocs
ConditionPathExists=/root/mkdocs
[บริการ]
ประเภท = ง่าย
ผู้ใช้ = ราก
WorkingDirectory=/usr/local/bin
ExecStart=/usr/bin/env bash /root/mkdocs/run.sh
RemainAfterExit=ใช่

[ติดตั้ง]
WantedBy=multi-user.target

ฉันจะทิ้งคำตอบนี้ไว้เผื่อมีคนมองหาคำตอบนี้ในอนาคต ไฟล์จะต้องอยู่ใน /etc/systemd/system/mkdocs.service

โพสต์คำตอบ

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