Score:0

จะส่งตัวแปรสำหรับไฟล์ systemd unit ที่เรียกใช้สคริปต์ php ได้อย่างไร

ธง jp

ฉันต้องการสร้างหลายอินสแตนซ์ของบริการ systemd เป็นไปได้ไหมที่จะส่งพารามิเตอร์เมื่อเริ่มบริการ ซึ่งจะเป็นพารามิเตอร์สำหรับสคริปต์ php?

ตัวอย่างเช่น สมมติว่าฉันมีสคริปต์ test_systemd.phpด้วยสองพารามิเตอร์ ม็อด และ หน่วยความจำ ตามลำดับ

PHP:

<?php
$val = getopt(null, ['mod:','rem:']);
echo $val['mod']."\n";
echo $val['rem']."\n";
echo "\n";

?>

ถ้าฉันเรียกใช้ผ่าน php ฉันก็แค่ทำ php test_systemd.php --mod foo --rem บาร์

ซึ่งจะสะท้อนออกมา

ฟู
บาร์

ตามเอกสาร systemd ฉันควรใช้ สิ่งแวดล้อม=แต่ฉันไม่แน่ใจว่าจะทำอย่างไร สมมติว่าฉันมีไฟล์ systemd unit ที่เรียกว่า ทดสอบ systemd-params.service:

คำอธิบาย=การทดสอบพารามิเตอร์ระบบ
ต้องการ=network-online.target
After=network-online.target

[บริการ]
ExecStart=/usr/bin/php -f /path/to/test_systemd.php
StandardOutput=file:/var/log/test-multiple-systemd.log
สิ่งแวดล้อม=???? <--- เกิดอะไรขึ้นที่นี่?

[ติดตั้ง]
#สตาร์ทหลังบูท
WantedBy=multi-user.target

ฉันไม่เข้าใจว่าฉันต้องการอะไรที่นี่ เป็นไปได้หรือไม่สำหรับสองพารามิเตอร์ (ม็อด และ หน่วยความจำ) ที่จะถูกส่งผ่านเมื่อเริ่มต้นอินสแตนซ์ของบริการ?

ฉันพบ นี้ ตัวอย่างและมีสอง สิ่งแวดล้อม เส้น แต่หนึ่งในนั้นเป็นค่าคงที่! ฉันต้องการ สอง ค่าไดนามิก เช่น:

สภาพแวดล้อม = mod = %i สิ่งแวดล้อม=rem=%i

ตัวอย่างข้อมูลโค้ดมีลักษณะดังนี้:

[บริการ]
พิมพ์=แจ้ง
Environment=LANG=C <--- STATIC แต่ต้องการไดนามิกอื่น
Environment=HTTPD_INSTANCE=%i <--- ไดนามิก ยอดเยี่ยม แต่ต้องการอย่างอื่น
ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-%i
ExecStartPre=/bin/chown root.apache /run/httpd/instance-%i
ExecStartPre=/bin/mkdir -m 700 -p /var/lib/httpd/instance-%i
ExecStartPre=/bin/chown apache.apache /var/lib/httpd/instance-%i
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND -f conf/%i.conf
ExecReload=/usr/sbin/httpd $OPTIONS -k สง่างาม -f conf/%i.conf
Chris avatar
it flag
ตัวอย่างข้อมูลโค้ดที่คุณให้หมายถึง [เทมเพลตบริการ](https://www.freedesktop.org/software/systemd/man/systemd.service.html#Service%20Templates) คุณสามารถส่ง *ตัวแปร* ได้เพียงตัวเดียวด้วยวิธีนี้ *เป็นไปได้ที่บริการ systemd จะใช้อาร์กิวเมนต์เดียวผ่านไวยากรณ์ "[email protected]"*
DevOpsSauce avatar
jp flag
ดังนั้นฉันไม่สามารถมีสองข้อโต้แย้งสำหรับสคริปต์ php?
Score:0
ธง it

ตามเอกสาร systemd ฉันควรใช้ สิ่งแวดล้อม=, แต่ฉัน ฉันไม่แน่ใจว่าจะทำอย่างไร สมมติว่าฉันมีไฟล์ systemd unit เรียกว่า ทดสอบ systemd-params.service:

นี่คือตัวอย่างการใช้ สิ่งแวดล้อม=

คำอธิบาย=การทดสอบพารามิเตอร์ระบบ
ต้องการ=network-online.target
After=network-online.target

[บริการ]
สภาพแวดล้อม = "MOD = foo" "REM = บาร์"
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=file:/var/log/test-multiple-systemd.log

[ติดตั้ง]
#สตาร์ทหลังบูท
WantedBy=multi-user.target

นี่ไม่ใช่สิ่งที่คุณกำลังมองหาเพราะตัวแปรเป็นค่าคงที่


ฉันพบ นี้ ตัวอย่างและมีสอง สิ่งแวดล้อม เส้น แต่หนึ่งในนั้นเป็นค่าคงที่! ฉันต้องการ สอง ค่าไดนามิก เช่น:

ตัวอย่างข้อมูลโค้ดที่คุณอ้างถึง แม่แบบบริการ. คุณสามารถผ่าน ตัวแปรเดียวเท่านั้น ทางนี้. เป็นไปได้ที่บริการ systemd จะใช้อาร์กิวเมนต์เดียวผ่านไวยากรณ์ "[email protected]"

นี่คือตัวอย่างการใช้งาน

คำอธิบาย=การทดสอบพารามิเตอร์ระบบ
ต้องการ=network-online.target
After=network-online.target

[บริการ]
สภาพแวดล้อม = MOD = %i
สภาพแวดล้อม = REM = บาร์
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=file:/var/log/test-multiple-systemd.log

[ติดตั้ง]
#สตาร์ทหลังบูท
WantedBy=multi-user.target

จากนั้นคุณเริ่มบริการดังนี้:

systemctl เริ่มการทดสอบ [email protected]
systemctl เริ่มการทดสอบ [email protected]

มันจึงยังไม่ใช่สิ่งที่คุณกำลังมองหา เพราะคุณยังมีตัวแปรสแตติกอยู่หนึ่งตัว


วิธีเดียวที่ฉันเห็น (ไม่ได้ทดสอบ) ในการส่งผ่านตัวแปรหลายตัวจะใช้ ไฟล์สิ่งแวดล้อม= คำสั่งและไฟล์ปรับแต่งที่คั่นด้วย พลวัต ชื่อโดยใช้ @การโต้แย้ง ไวยากรณ์

[บริการ]
EnvironmentFile=/path/to/config/%i
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=file:/var/log/test-multiple-systemd.log

ตัวอย่างไฟล์คอนฟิกใน /เส้นทาง/to/config/สมมุติว่า คอนเฟิร์ม1:

MOD=ฟู
REM = บาร์

จากนั้นคุณเริ่มบริการดังนี้:

systemctl เริ่มการทดสอบ [email protected]
systemctl เริ่มการทดสอบ [email protected]
...

โพสต์คำตอบ

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