ฉันมีสคริปต์ที่ฉันต้องการดำเนินการก่อนที่เครื่องจะปิดหรือรีบูต:
/etc/init.d/init.sh
#!/bin/sh
### เริ่มข้อมูลเริ่มต้น
# ให้: init.sh
# จำเป็น-เริ่มต้น: $all
# จำเป็นต้องหยุด:
# เริ่มต้นเริ่มต้น: 2 3 4 5
# Default-Stop: 0 1 6
# คำอธิบายสั้น ๆ : xxx
# คำอธิบาย: xxx
### สิ้นสุด INIT INFO
ถ้า [ "$1" = "เริ่มต้น" ]; แล้ว
echo "ข้อความบันทึก"
su - azureuser -c '/bin/bash /my/script/dir/script1.sh'
echo "ข้อความบันทึก"
su - azureuser -c '/bin/bash /my/script/dir/script2.sh -p "parameter2"'
ไฟ
ถ้า [ "$1" = "หยุด" ]; แล้ว
echo "ข้อความบันทึก"
su - azureuser -c '<บางคำสั่งเชลล์>'
ซีดี /my/script/dir/sub
./script3.sh พารามิเตอร์ 3
su - azureuser -c 'cd /my/script/dir/sub; ./script4.sh พารามิเตอร์ 4 --option1 --option2 --option3 ค่าบางอย่าง'
ไฟ
ทางออก 0
(ฉันทำให้เส้นทางและชื่อไฟล์สับสน แต่ยังคงโครงสร้างโดยรวมสำหรับเธรดนี้ไว้ เห็นได้ชัดว่าไม่มีชื่อใดเหมือนอยู่ที่นี่)
สคริปต์ทำงานได้ดีระหว่างการเริ่มต้น แต่บ่นว่าการล้างข้อมูลที่ควรเกิดขึ้นใน หยุด
ไม่ได้ดำเนินการบล็อก และฉันไม่เห็นข้อความบันทึกใดๆ ที่มาจาก หยุด
บล็อกใน syslog เรียกใช้สคริปต์จากบรรทัดคำสั่ง (sudo /etc/init.d/init.sh หยุด
) ทำงานได้อย่างมีเสน่ห์กับทั้งสองอย่าง เริ่ม
และ หยุด
พารามิเตอร์ ดังนั้นฉันจึงสับสนว่าทำไมมันไม่ทำงานเมื่อฉันหยุดเครื่องของฉัน ค่อนข้างแน่ใจว่าสคริปต์ระดับรันทำงานในฐานะรูท
symlinks ต่อไปนี้มีอยู่ในระบบของฉัน:
/etc/rc0.d/K01init.sh
/etc/rc1.d/K01init.sh
/etc/rc2.d/S99init.sh
/etc/rc3.d/S99init.sh
/etc/rc4.d/S99init.sh
/etc/rc5.d/S99init.sh
/etc/rc6.d/K01init.sh
ซึ่งทั้งหมดชี้ไปที่สคริปต์เดียวกัน ฯลฯ/init.d/init.sh. จากเธรดอื่นที่ฉันได้ลองโดยไม่ใช้ .sh
คำต่อท้ายซึ่งไม่ได้เปลี่ยนแปลงอะไรเลย
สิทธิ์สำหรับ สคริปต์1
และ สคริปต์2
เป็นทั้งสองอย่าง 750
และสำหรับ สคริปต์3
และ สคริปต์4
แม้แต่ 755
ฉันไปผิดที่ไหนที่นี่? ฉันใช้ Ubuntu 18.04 และระดับการรันปัจจุบันของฉันคือ 5 (แต่นั่นไม่ควรเกี่ยวข้อง เพราะควรจะประมาณ 0 และ 6 ที่นี่) ตัวสคริปต์เอง (รวมถึงสคริปต์ย่อย) ไม่ได้มีการอภิปรายที่นี่ มันทำงานได้ดีในสภาพแวดล้อมอื่นและการรันด้วยตนเองนำไปสู่สถานะที่ต้องการในสภาพแวดล้อมนี้ ดังนั้นการตั้งค่า (หรือความเข้าใจ) ของสคริปต์เริ่มต้นของฉันจึงต้องผิดพลาดในที่ใดที่หนึ่ง
หากเกี่ยวข้อง: ฉันกำลังพูดถึงการรีบูตทั้งสองทาง sudo รีบูต
และ ผ่าน Azure GUI (เป็นเครื่องเสมือน) ไม่แน่ใจว่ากลไกการรีบูต Azures แตกต่างกันหรือไม่ ทั้งสองวิธีไม่ทำงาน