Score:0

ตัวแปรสภาพแวดล้อมใน systemd ExecStart ส่วนคำสั่ง ExecStop ไม่ทำงานตามที่คาดไว้

ธง us

ฉันกำลังทำงานกับไฟล์หน่วยสำหรับบริการ systemd บางอย่าง คำนำหน้าเส้นทางไปยังไบนารีบางส่วนของฉันค่อนข้างยาวและมีการใช้หลายครั้งในคำสั่ง ExecStart=, ExecStartPost= และ ExecStop=

ฉันมีตัวแปรสภาพแวดล้อมบางอย่างที่กำหนดไว้ (ซึ่งจำเป็นต้องส่งผ่านไปยังบริการด้วย) เช่น:

สภาพแวดล้อม=ORACLE_HOME=/u01/app/oracle/product/19/db_1

ฉันเชื่อจากส่วน "บรรทัดคำสั่ง" ใน systemd.service(5) ว่าฉันควรจะสามารถใช้การขยายตัวแปรในส่วนคำสั่ง Exec*= - เช่น:

ExecStart=${ORACLE_HOME}/bin/dbstart

เมื่อฉันลองและโหลด systemctl daemon-reload ฉันได้รับข้อผิดพลาดต่อไปนี้ในสมุดรายวัน:

systemd[1]: [/usr/lib/systemd/system/oracle.service:37] เส้นทางปฏิบัติการไม่สมบูรณ์ ละเว้น: ${ORACLE_HOME}/bin/dbstart /u01/app/oracle/product/19/db_1

เอกสาร systemd ค่อนข้างชัดเจนว่าเส้นทางไปยังไฟล์ที่จะเรียกใช้ต้องเริ่มต้น (ยกเว้นคำนำหน้าที่อนุญาต) ด้วย / แต่มีความแตกต่างเล็กน้อยของไวยากรณ์ที่ฉันขาดหายไปซึ่งจะช่วยให้ฉันทำในสิ่งที่ฉันต้องการได้หรือไม่

ในที่สุดฉันต้องการมีไฟล์ที่มีตัวแปรสภาพแวดล้อมที่ใช้เพื่อให้สามารถใช้ในไฟล์ systemd unit และสำหรับการตั้งค่าโปรไฟล์ ฯลฯ

ฉันใช้ RHEL7 และ RHEL8

Score:0
ธง in

คุณสามารถใช้ตัวแปรสภาพแวดล้อมได้ แต่ไม่สามารถใช้เป็นชื่อคำสั่งได้ ส่วน "บรรทัดคำสั่ง" ของ systemd.service(5) ระบุว่า

โปรดทราบว่าอาร์กิวเมนต์แรก (เช่น โปรแกรมที่จะดำเนินการ) อาจไม่ใช่ตัวแปร

Windscale avatar
us flag
ขอบคุณมาก ๆ. ฉันอ่านส่วนนั้นหลายครั้งและทุกครั้งที่พลาด :-/ ฉันเดาว่าฉันอาจจะทำได้ /bin/sh -c '...' เนื่องจากนั่นจะย้ายการขยายตัวแปรไปยังอาร์กิวเมนต์นอกเหนือจากตัวแรก

โพสต์คำตอบ

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