คำตอบขึ้นอยู่กับว่าตัวแปรควรจะเป็นค่าคงที่ (นั่นคือไม่ควรแก้ไขโดยผู้ใช้รับหน่วย) หรือตัวแปร (ควรตั้งค่าโดยผู้ใช้)
เนื่องจากเป็นหน่วยในพื้นที่ของคุณขอบเขตจึงค่อนข้างพร่ามัวและไม่ว่าจะด้วยวิธีใด อย่างไรก็ตามหากคุณเริ่มแจกจ่ายและจะสิ้นสุดลง/usr/lib/systemd/system
สิ่งนี้จะกลายเป็นเรื่องสำคัญ
ค่าคงที่
หากค่าไม่จำเป็นต้องเปลี่ยนแปลงตามอินสแตนซ์วิธีที่ต้องการจะวางไว้Environment=
ในไฟล์หน่วยโดยตรง:
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
ข้อดีของการทำเช่นนั้นคือตัวแปรจะถูกเก็บไว้ในไฟล์เดียวกับหน่วย ดังนั้นไฟล์หน่วยจะง่ายต่อการย้ายระหว่างระบบ
ค่าตัวแปร
อย่างไรก็ตามโซลูชันข้างต้นใช้งานไม่ได้เมื่อ sysadmin ควรเปลี่ยนค่าของตัวแปรสภาพแวดล้อมแบบโลคัล โดยเฉพาะอย่างยิ่งจะต้องตั้งค่าใหม่ทุกครั้งที่มีการอัปเดตไฟล์หน่วย
สำหรับกรณีนี้ต้องใช้ไฟล์พิเศษ อย่างไร - มักจะขึ้นอยู่กับนโยบายการกระจาย
ทางออกหนึ่งที่น่าสนใจอย่างยิ่งคือการใช้/etc/systemd/system/myservice.service.d
ไดเรกทอรี ไม่เหมือนกับโซลูชันอื่น ๆ ไดเร็กทอรีนี้ได้รับการสนับสนุนโดย systemd เองและดังนั้นจึงไม่มีพา ธ เฉพาะการแจกจ่าย
ในกรณีนี้คุณวางไฟล์เช่น/etc/systemd/system/myservice.service.d/local.conf
นั้นเพิ่มส่วนที่ขาดหายไปของไฟล์หน่วย:
[Service]
Environment="FOO=bar baz"
หลังจากนั้น systemd จะรวมสองไฟล์เมื่อเริ่มบริการ (อย่าลืมsystemctl daemon-reload
หลังจากเปลี่ยนไฟล์ใดไฟล์หนึ่ง) และเนื่องจากเส้นทางนี้ถูกใช้โดยตรงโดย systemd คุณจึงไม่ได้ใช้EnvironmentFile=
สิ่งนี้
หากค่าควรเปลี่ยนแปลงในระบบที่ได้รับผลกระทบบางระบบเท่านั้นคุณอาจรวมทั้งวิธีแก้ไขปัญหาโดยให้ค่าเริ่มต้นโดยตรงในหน่วยและการแทนที่แบบโลคัลในไฟล์อื่น
sysconfig
เส้นทางนั้นเฉพาะกับ Fedora แต่คำถามเกี่ยวกับ Arch Linux คำตอบโดย paluh น่าสนใจยิ่งขึ้นฉันคิดว่า