ฉันต้องการเรียกใช้สคริปต์ Bash ก่อนที่จะปิดระบบหรือรีบูต Pi ของฉัน (ใช้งาน Raspbian ล่าสุดซึ่งเป็นอนุพันธ์ของ Debian)
เช่น. ถ้าฉันพิมพ์ sudo shutdown now หรือ sudo restart now ใน command prompt ก็ควรจะรันสคริปต์ Bash ของฉันก่อนที่จะดำเนินการปิดระบบ/รีบูตต่อ
ฉันสร้างสคริปต์ง่ายๆ สำหรับการทดสอบเท่านั้น เพื่อให้แน่ใจว่าวิธีการทำงานก่อนที่จะไปยุ่งกับการเขียนสคริปต์จริง:
#!/bin/bash
touch /home/pi/ShutdownFileTest.txt
จากนั้นฉันคัดลอกไฟล์ (เรียกว่า CreateFile.sh) ไปที่ /etc/init.d/CreateFile จากนั้นฉันสร้าง symlink ใน /etc/rc0.d/ และ /etc/rc6.d/:
sudo ln -s /etc/init.d/CreateFile K99Dave
ฉันไม่แน่ใจว่าควรตั้งชื่อที่เหมาะสมสำหรับ symlink อย่างไร บางเว็บบอกว่า "ขึ้นต้นชื่อไฟล์ด้วยตัว K" บางเว็บก็บอกว่า "เริ่มต้นด้วยตัว S" บางเว็บก็บอกว่า "เริ่มต้นด้วย K99 เพื่อให้มันทำงานถูกเวลา"...
จริงๆ แล้วฉันได้ลองทำสิ่งต่อไปนี้ทั้งหมดแล้ว (ไม่ใช่ทั้งหมดในคราวเดียว แต่ทีละครั้ง):
sudo ln -s /etc/init.d/CreateFile S00Dave
sudo ln -s /etc/init.d/CreateFile S99Dave
sudo ln -s /etc/init.d/CreateFile K00Dave
sudo ln -s /etc/init.d/CreateFile K01rpa
sudo ln -s /etc/init.d/CreateFile K99Dave
หลังจากสร้างแต่ละ symlink แล้ว ฉันมักจะรัน:
sudo chmod a+x /etc/init.d/CreateFile && sudo chmod a+x /etc/rc6.d/<name of symlink>
จากนั้นฉันก็รีบูททุกครั้ง
แต่ละครั้ง ไฟล์ที่ /home/pi/ShutdownFileTest.txt ไม่ได้ถูกสร้างขึ้น สคริปต์ไม่ได้ถูกดำเนินการ
ฉันพบความคิดเห็นนี้ในโพสต์เก่าๆ โดยแนะนำว่า ข้างต้นเป็นวิธีการที่ล้าสมัย:
วิธีที่ทันสมัยในการทำเช่นนี้คือผ่าน systemd ดู "man systemd-shutdown" สำหรับรายละเอียด โดยพื้นฐานแล้ว ให้ใส่เชลล์สคริปต์ที่สามารถเรียกใช้งานได้ใน /lib/systemd/system-shutdown/ โดยจะมีการส่งผ่านอาร์กิวเมนต์เช่น "หยุด" หรือ "รีบูต" ซึ่งช่วยให้คุณสามารถแยกแยะกรณีต่างๆ ได้หากต้องการ
ฉันคัดลอกสคริปต์ของฉันไปที่ /lib/systemd/system-shutdown/, chmod +x'd แล้วรีบูท แต่ก็ยังไม่ประสบความสำเร็จ
ฉันสังเกตเห็นความคิดเห็นข้างต้นบอกว่าสคริปต์ถูกส่งผ่าน "หยุด" หรือ "รีบูต" เป็นอาร์กิวเมนต์ เนื่องจากมันควรจะทำงานเหมือนกันในทั้งสองกรณี ฉันคิดว่ามันไม่จำเป็นต้องจัดการกับข้อโต้แย้งนั้นจริงๆ ฉันก็ไม่รู้ว่าจะจัดการกับข้อโต้แย้งนั้นอย่างไร ดังนั้นฉันจึงไม่แน่ใจว่าฉันต้องทำอะไรบางอย่างเพื่อให้มันได้ผลหรือไม่...
ใครช่วยบอกฉันทีว่าฉันไปไหนผิด?
ขอบคุณล่วงหน้าเดฟ