ฉันคิดว่าปัญหาของคุณเกิดจากพื้นที่ในเนื้อหาของตัวแปรสภาพแวดล้อม ดูตัวอย่างจากsystemd docsการมอบหมายควรเป็นสตริงเดี่ยว:
ตัวอย่าง:
Environment="ONE=one" 'TWO=two two'
ExecStart=/bin/echo $ONE $TWO ${TWO}
ซึ่งจะดำเนินการ / bin / echo กับสี่ข้อโต้แย้ง: one
, two
, และtwo
two two
ตัวอย่าง:
Environment=ONE='one' "TWO='two two' too" THREE=
ExecStart=/bin/echo ${ONE} ${TWO} ${THREE}
ExecStart=/bin/echo $ONE $TWO $THREE
ผลสะท้อนในนี้ถูกเรียกว่าเป็นครั้งที่สองเป็นครั้งแรกที่มีการขัดแย้ง
'one'
, 'two two' too
,
และเป็นครั้งที่สองที่มีการขัดแย้ง
one
, ,two two
too
ฉันทดสอบสิ่งนี้ด้วยบริการต่อไปนี้ (จดเครื่องหมายคำพูดรอบการมอบหมายทั้งหมด):
[Unit]
Description=My Daemon
[Service]
Environment='CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current'
ExecStart=/bin/echo ${CATALINA_OPTS}
[Install]
WantedBy=multi-user.target
และได้ผลลัพธ์ที่ต้องการในjournalctl
:
Apr 26 08:19:29 laptop echo[28439]: -Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current
แน่นอนว่ามันจะใช้ง่ายกว่าEnvironmentFile
แทน การแทนที่Environment
ด้วยข้อมูลต่อไปนี้ให้ผลลัพธ์ที่ต้องการเหมือนกัน:
EnvironmentFile=/tmp/foo
ที่/tmp/foo
มีอยู่ (หมายเหตุขาดคำพูด):
CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current
CATALINA_OPTS
ในsystemd
สภาพแวดล้อมสำหรับ Apachetomcat
7.0.61) การใช้งานEnvironmentFile
จริงเป็นวิธีที่จะไป ขอบคุณ!