ตั้งค่า PATH สำหรับหน่วย systemd


13

หนึ่งจะตั้งค่าเส้นทางสำหรับเปลือกที่ไม่ใช่การเข้าสู่ระบบใน CentOS 7 ได้อย่างไร

โดยเฉพาะฉันมีหน่วย systemd /usr/local/texlive/2016/bin/x86_64-linuxที่ต้องการในไบนารี

ฉันพยายามที่จะตั้งใน/etc/environmentที่มีแต่แล้วเส้นทางของฉันคือPATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATH/usr/local/texlive/2016/bin/x86_64-linux:$PATH:/usr/local/sbin:/usr/sbin

ฉันสร้าง/etc/profile.d/texlive.shด้วยexport PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"แต่ใช้งานได้กับเชลล์ล็อกอินเท่านั้น

ฉันดูSet Path สำหรับผู้ใช้ทุกคน (ล็อกอินและเชลล์ที่ไม่ได้เข้าสู่ระบบ)แต่ได้พยายามแก้ไขปัญหาข้างต้นแล้ว

ฉันดูที่วิธีเพิ่มเส้นทางไปยังระบบ $ PATH สำหรับเชลล์ที่ไม่ใช่การเข้าสู่ระบบของผู้ใช้และเชลล์ล็อกอินบนเดเบียนแต่ไม่มีวิธีแก้ปัญหาที่ยอมรับได้และฉันไม่แน่ใจว่าฉันต้องการแก้ไข/etc/login.defsเพราะอาจมีการเปลี่ยนแปลงในการอัปเดต

คำตอบ:


17

คำตอบที่ง่ายที่สุดคือการตั้งค่าPATHเป็นส่วนหนึ่งของExecStartคำสั่งของคุณในไฟล์ systemd Unit ตัวอย่างเช่นหากคุณมี

ExecStart=/bin/mycmd arg1 arg2

จากนั้นเปลี่ยนเป็น

ExecStart=/bin/bash -c 'PATH=/new/path:$PATH exec /bin/mycmd arg1 arg2'

การขยายตัวของ$PATHจะทำได้โดยทุบตีไม่ใช่ systemd ทางเลือกเช่นการใช้Environment=PATH=/new/path:$PATHจะไม่ทำงานตาม systemd $PATHจะไม่ขยาย


หากฉันตัดคำสั่งด้วยวิธีนี้และใช้ไฟล์ profile.d (ฉันต้องการเพิ่มพา ธ สำหรับล็อกอินเชลล์ด้วย) ฉันจะต้องตั้งค่าพา ธ ใน ExecStart หรือไม่ หรือว่าจะอ่านจาก profile.d
Agrajag9

ฉันคิดว่าคุณจะต้องตั้งค่า PATH ใน ExecStart ทุบตีอาจจะอ่านจาก profile.d เท่านั้นหากเป็นเชลล์การเข้าสู่ระบบ คุณสามารถลองเพิ่ม--loginก่อนหน้า-cเพื่อบังคับใช้สิ่งนี้แทนการตั้งค่า PATH แต่คุณจะทำการ bash รันการตั้งค่าจำนวนมากที่อาจทำงานได้ไม่ดีในสภาพแวดล้อม systemd ที่เปลือยเปล่าและให้ข้อผิดพลาดในบันทึกประจำวัน
2560
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.