ตัวเลือก 1 - ตรวจสอบเส้นทาง
ขั้นตอนแรกคือการดูว่าปัญหาอยู่ที่ตำแหน่งของคำสั่งหรือไม่:
$ ประเภท -a เสียงสะท้อน
เสียงสะท้อนเป็นเปลือกในตัว
เสียงสะท้อนคือ /bin/echo
$ ประเภท -a wmctrl
wmctrl คือ /usr/bin/wmctrl
เดอะ เสียงสะท้อน
คำสั่งถูกสร้างขึ้นในเชลล์และยังอยู่ใน /ถังขยะ
ไดเร็กทอรีซึ่งเป็นไดเร็กทอรียอดนิยมสำหรับโปรแกรม
เดอะ wmctrl
คำสั่งอยู่ใน /usr/bin
ไดเร็กทอรีที่อาจไม่ได้เป็นส่วนหนึ่งของ systemd ของคุณ เส้นทาง
.
คล้ายกับคำถามนี้:
วิธีแก้ไขคือเพิ่มบรรทัดในบริการ systemd:
[บริการ]
สภาพแวดล้อม=PATH=/home/someUser/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
อีกทางเลือกหนึ่งคือการฮาร์ดโค้ดไดเร็กทอรีสำหรับคำสั่งเมื่อคุณเรียกใช้: /usr/bin/wmctrl
.
ตัวเลือก 2 - WantedBy=multi-user.target
บันทึก: นี่เป็นตัวเลือกทั่วไปสำหรับสิ่งเหล่านั้น เริ่มต้นขึ้น และไม่ใช้กับ ปิดตัวลง เหมือนที่ OP กำลังทำอยู่
หากเส้นทางไม่มีปัญหา ขั้นตอนต่อไปคือการตรวจสอบ ต้องการโดย
ตัวเลือก:
คำตอบนั้นอธิบายว่า:
โปรดทราบว่า Wants หรือ WantedBy บอกเพียงว่าระบบควรเริ่มต้นบริการหนึ่งเมื่อใดก็ตามที่บริการหรือเป้าหมายอื่นเริ่มทำงานด้วย แต่ระบบไม่ได้ระบุอะไรเลยเกี่ยวกับลำดับการเริ่มต้น/ปิดระบบ หากคุณต้องการให้บริการ B ทำงานอยู่แล้วเมื่อบริการ A เริ่มทำงาน คุณต้องเพิ่ม Before=A.service ในไฟล์ B.service เพื่อระบุการขึ้นต่อกันของคำสั่งเริ่มต้นอย่างชัดเจน
พิจารณาข้อเท็จจริงที่ว่า GUI อาจไม่ทำงานด้วยซ้ำเมื่อสคริปต์ของคุณถูกเรียกใช้ ดังนั้นจึงไม่มีหน้าต่างสำหรับ wmctrl -l
เพื่อรายงาน.
หากนี่คือปัญหา หลังจาก
(ระหว่างการเริ่มต้น) มากกว่า ต้องการโดย
เป็นทางออกที่น่าจะเป็นไปได้
ตัวเลือก 3 - ใช้ /bin/จริง
จากความคิดเห็นในคำถาม & คำตอบนี้:
แทนที่:
RemainAfterExit=จริง
กับ:
RemainAfterExit=/bin/true
บันทึก: จริง
เป็นเชลล์ในตัวและคำสั่ง:
$ ประเภท -a จริง
จริงเป็นเปลือกในตัว
จริงคือ /bin/จริง