นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน
อ่าน: 2258
ความเห็น: 0

shell script ที่จะต้องเรียกใช้คำสั่ง reboot เครื่อง แล้วทำงานต่อไปได้

จะเขียน script ที่มีคำสั่ง reboot อยู่ด้วย ...

จาก e-mail ที่ส่งถึงผม 2-3 วันก่อน ... 

> ผมเขียน script เล็ก ๆ
> ต้องการแบบนี้ครับ
> สมมตินะครับ
> #!/bin/bash
> 1 date
> 2 ls
> 3 sudo apt-get update
> 4 sudo apt-get upgrade -y
> 5 sudo reboot
> 6 sudo apt-get install stardict -y
> 7 sudo apt-get nmap -y
> หมายเหตุ หมายเลขข้างหน้า คือ ตัวกำกับเท่านั้นครับ ไม่ได้ นำไป run
>
> ต้องการให้ run ทั้ง 7 ข้อ ต่อเนื่องกัน แต่พอถึง ข้อ 5 reboot แล้ว
> มันไปทำข้อ 6 ไม่ได้แล้ว

       ครับ เพราะว่าตัว shell ที่เราเรียกใช้สำหรับการ run script
       ตัวนี้มันก็ตายไปพร้อมกับการ reboot ด้วยน่ะแหละครับ

>
> แบบนี้ ต้องทำอย่างไรครับ

       ถ้าเอาเฉพาะ script นี้นะครับ วิธีการที่ง่ายที่สุดก็คือ ย้าย
       การ reboot เอาไปไว้หลังสุด เพราะการติดตั้ง stardict และ nmap
       เท่าที่ผมทราบไม่มี เหตุผลจำเป็นอะไรที่ต้อง reboot
       ก่อนที่จะติดตั้งได้ (เข้าใจว่า บรรทัดที่ 7 คำว่า install หน้า
       nmap หายไป)

       แต่ถ้าคำถามนี้ ถามแบบทั่วไป คือต้องการ script ที่เขียนแล้ว
       ควบคุมให้ reboot เครื่องและ execute ต่อได้หลังจาก reboot
       เครื่องแล้ว

       คำตอบคงจะยาว เพราะมีหลายเรื่องเข้ามาเกี่ยวข้อง โดยเฉพาะเรื่องของ security
       แต่หลักการโดยคร่าวๆก็คือ แยก script เป็น 2 ส่วน

       ส่วนแรก execute ไปตามปกติ จนกระทั่งคำสั่งสุดท้ายคือคำสั่ง reboot
       หรือ shutdown ส่วนส่วนที่สอง (ซึ่งอาจจะสร้างขึ้นมาโดยใช้ script
       ส่วนแรก) จะต้องไปอยู่ในที่ใดที่หนึ่ง ซึ่งจะต้อง execute
       โดยระบบโดยอัตโนมัติหลังจากการ reboot เครื่อง ซึ่งอาจจะใช้
       /etc/rcX.d/ link หรือ อาจจะใช้ /etc/rc.local
       และ script ส่วนที่สองก็ควรที่จะมีส่วนของการ remove ตัวเองหลัง
       จาก run เสร็จแล้ว เพื่อที่จะไม่ถูก run อีกครั้งโดยไม่จำเป็น
       หลังการ boot ครั้งถัดไป

       ถ้าจะใช้ script ข้างต้น มาเป็นตัวอย่าง
       ก็พอที่จะเขียนใหม่ได้ตามนี้ครับ

       ----- start here -----
       #!/bin/bash

       # using ID that should not repeat
       ID="$(date +%Y%m%d%H%M%S)-$$"
       secondpart="/root/autorun-script-${ID}.sh"
       # assume running level 2, NOT likely to work on new ubuntu
       # distro
       linkscript="/etc/rc2.d/99zzz-autorun-script-${ID}.sh"

       # create script that will be executed after reboot
       cat > $secondpart << END
       #!/bin/bash
       sudo apt-get -y install stardict
       sudo apt-get -y install nmap
       rm -vf $linkscript
       END

       # create link
       ln -sf $linkscript $secondpart

       # then we can perform the first part
       date
       ls
       apt-get -y update
       apt-get -y upgrade
       reboot

       # end of script
       ----- end here -----

       ซึ่งน่าจะใช้ได้สำหรับ debian แต่บน ubuntu startup
       คงต้องหาวิธีการจัดการกับ link script ใหม่ครับ

สวัสดีครับ
 
ปล. ขอบคุณเจ้าของคำถามครับ ทำให้มีเรื่องเขียนเพิ่มขึ้นอีกหนึ่ง 
หมวดหมู่บันทึก: เรื่องทั่วไป
คำสำคัญ (keywords): computer  linux  reboot  shell script
สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ Copyright
สร้าง: 15 พฤศจิกายน 2551 00:44 แก้ไข: 16 พฤศจิกายน 2551 01:45 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ไม่มีความเห็น

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 3.214.184.250
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ