Score:0

จะสร้างไฟล์ยูนิตเทมเพลต systemd "เริ่มต้นทั้งหมด" จากสคริปต์พุ่งพรวดด้วยบริการต่างๆ ได้อย่างไร

ธง jp

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

ต้นตำรับพุ่งพรวด ตัวแทนจำหน่าย-start-all.conf

บันทึกคอนโซล
เริ่มต้นที่ตัวแทนจำหน่ายเริ่มต้น
สคริปต์
    ประกาศ -a ตัวแทนจำหน่าย = ("เขตเวลา" "หมดเวลา" "สอบถาม" "ปฏิเสธ")

    สำหรับพิมพ์ "${dealers[@]}"
    ทำ
        ถ้ารายการ initctl | grep "^dealer (ประเภท $)"
        แล้ว
            หยุดตัวแทนจำหน่าย type=$type
        ไฟ
        เริ่มต้นดีลเลอร์ type=$type
        echo "dealer$type เริ่มแล้ว"
    เสร็จแล้ว
สคริปต์สิ้นสุด

ส่วนอื่นของมัน ตัวแทนจำหน่าย.conf, ควรหั่นให้สวยและแห้งโดยใช้ %ผม ใน ExecStart ส่วนเช่น:

ExecStart=/usr/bin/php -f /path/to/dealer%i.php

บันทึกคอนโซล

ตัวอย่าง $type

หยุดที่ตัวแทนจำหน่ายหยุด

สคริปต์
        sudo -u root php -f /path/to/dealer$type.php
สคริปต์สิ้นสุด

สคริปต์หลังหยุด

ถ้า [ -z "$UPSTART_STOP_EVENTS" ]
    แล้ว
        echo "dealer$type หยุดที่ `วันที่ +"%F %T.%N"` เรียกใช้ 'initctl emit Dealer-stop' จากนั้น 'initctl emit Dealer-Start' ใน `ชื่อโฮสต์` เพื่อให้กลับมาทำงานอีกครั้ง" | เมล -s "dealer$type หยุดทำงาน" [email protected]
    อื่น
        echo "dealer$type ถูกหยุดด้วยตนเองเมื่อ `วันที่ +"%F %T"`"
ไฟ
สคริปต์สิ้นสุด

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

Score:0
ธง cz

เทมเพลตหน่วย systemd เป็นแม่แบบ. คุณจะไม่ใส่อาร์เรย์ลงไปแต่คุณกำลังจะไป ยกตัวอย่าง สำหรับแต่ละกรณีที่คุณต้องการ เช่น:

systemctl เปิดใช้งานตัวแทนจำหน่าย@TimeZone
systemctl เปิดใช้งานตัวแทนจำหน่าย@หมดเวลา
...

ที่ไหน %ผม ที่ปรากฏในเทมเพลตจะถูกแทนที่ด้วยสิ่งที่คุณระบุ

คุณยัง ไม่สามารถใช้งานได้ %ผม ในชื่อไบนารี ใน ExecStart=. จะต้องเป็นเส้นทางที่มีอยู่และ %ผม ใช้ในการโต้แย้ง ตัวอย่างเช่น:

ExecStart=/usr/bin/php -f /path/to/dealer%i.php
DevOpsSauce avatar
jp flag
ขอขอบคุณ. ฉันมีส่วน /usr/bin/php แต่ลืมพิมพ์ในคำถามของฉัน ฉันจะลองดูและกลับมายอมรับ
DevOpsSauce avatar
jp flag
ฉันพยายามเปิดใช้งานด้วย `systemctl enable dealer@TimeZone` และได้รับข้อผิดพลาด: "ไฟล์หน่วยไม่มีการกำหนดค่าการติดตั้ง (WantedBy, RequredBy, นอกจากนี้ การตั้งค่านามแฝงในส่วน [ติดตั้ง] และ DefaultInstance สำหรับหน่วยเทมเพลต)
Michael Hampton avatar
cz flag
@IRGeekSauce นั่นเป็นปัญหาที่ไม่เกี่ยวข้องกันโดยสิ้นเชิง
DevOpsSauce avatar
jp flag
เพิ่ม `[ติดตั้ง] WantedBy=multi-user.target` และไม่มีข้อผิดพลาดในเวลานั้น ตอนนี้กลับไปที่งานเดิมในมือ
DevOpsSauce avatar
jp flag
ฉันได้รับที่ทำงาน ฉันเพิ่มไฟล์ `dealers.target` ด้วย `Requires=dealer-names-here` ยังไม่แน่ใจทั้งหมดเกี่ยวกับเรื่องนี้ แต่อย่างน้อยก็ได้รับคำตอบจากคำถามเริ่มต้น ขอขอบคุณสำหรับความช่วยเหลือของคุณ.

โพสต์คำตอบ

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