คู่มือนี้จะแสดงให้คุณเห็นถึงวิธีการใช้คำสั่ง 'nohup' เพื่อเรียกใช้กระบวนการในพื้นหลัง เพื่อให้ทำงานต่อไปได้แม้ว่าคุณจะออกจากระบบหรือถูกตัดการเชื่อมต่อ
ฉันทำงานบนเซิร์ฟเวอร์ระยะไกลเป็นจำนวนมาก ฉันใช้ SSH เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ของฉัน บ่อยครั้งที่ฉันเรียกใช้กระบวนการที่ต้องปล่อยให้ทำงานแม้ว่าฉันจะปิดการเชื่อมต่อ SSH แล้ว นี่อาจเป็นเชลล์สคริปต์ที่แยกวิเคราะห์ไฟล์บันทึกของฉันหรือการกู้คืนฐานข้อมูล mysql ขนาดใหญ่มาก นั่นคือเมื่อฉันหันไปใช้ยูทิลิตีบรรทัดคำสั่ง Linux ที่เรียกว่า "nohup" “Nohup” ย่อมาจาก “no hangup” ซึ่งแปลว่า “ละเว้นสัญญาณวางสาย” สัญญาณ "วางสาย" คือสิ่งที่เกิดขึ้นเมื่อคุณออกจากระบบ สิ่งที่ “nohup” ทำคือให้คุณล็อกอินเข้าสู่เซิร์ฟเวอร์ เปิดกระบวนการ และออกจากระบบ กระบวนการทำงานต่อไปแม้หลังจากที่คุณออกจากระบบแล้ว เมื่อคุณเข้าสู่ระบบอีกครั้ง คุณจะสามารถเข้าถึงกระบวนการนั้นได้อีกครั้ง โดยที่ยังทำงานอยู่
ไวยากรณ์พื้นฐานของ “nohup” คือ:
# nohup [คำสั่ง] &
แทนที่ "[command]" ด้วยชื่อเชลล์สคริปต์ของคุณหรือคำสั่ง “&” ที่ส่วนท้ายทำให้คำสั่งหรือสคริปต์ทำงานเป็นกระบวนการพื้นหลัง นี่คือตัวอย่างวิธีที่คุณจะใช้ “nohup” เพื่อสำรองข้อมูลฐานข้อมูล mysql ขนาดใหญ่บนเซิร์ฟเวอร์ระยะไกลของคุณ ขั้นแรก ฉันเข้าสู่ระบบเซิร์ฟเวอร์ระยะไกลโดยใช้ SSH:
# ssh [email protected]
จากนั้นฉันก็รันคำสั่ง “mysqldump -ucalvin -phobbes largedatabase> largedatabase.db” ในโหมด “nohup” โดยเพิ่ม “nohup” ก่อนและ “&” หลังคำสั่ง:
# nohup mysqldump -ucalvin -phobbes largedatabase> largedatabase.db &
[1] 3999
# nohup:ต่อท้ายเอาต์พุตไปที่ `nohup.out'
มีเอาต์พุตสองบรรทัดที่คุณได้รับ “3999” ในบรรทัดแรกคือ ID กระบวนการของกระบวนการที่ฉันเพิ่งเกิด ในขณะที่ “nohup:ต่อท้ายเอาต์พุตไปที่ 'nohup.out'” หมายความว่าเอาต์พุตที่มักจะมาถึงเทอร์มินัลกำลังถูกส่งต่อไป ไฟล์ชื่อ “nohup.out” ในไดเร็กทอรีที่คุณเรียกใช้คำสั่ง คุณสามารถตรวจสอบว่ากระบวนการยังคงทำงานอยู่หรือไม่โดยค้นหาผ่านกระบวนการที่ทำงานอยู่ทั้งหมดโดยใช้ ID กระบวนการ:
# ป.ล. -ef | grep 3999
คาลวิน 3999 29848 0 18:42 ? 00:00:00 /usr/bin/mysqldump
calvin 6575 31852 0 18:44 pts/2 00:00:00 grep 3999
เมื่อดำเนินการเสร็จสิ้น คุณจะเห็นผลลัพธ์ในบรรทัดคำสั่งดังนี้:
[1]+ เสร็จสิ้น nohup mysqldump -ucalvin -phobbes largedatabase> largedatabase.db
คุณสามารถตรวจสอบไฟล์ “nohup.out” เพื่อตรวจสอบข้อผิดพลาดหรือข้อความอื่น ๆ ที่ส่งออกไปในขณะที่กระบวนการทำงาน หากไฟล์ยังคงว่างเปล่าก็ไม่เป็นไร หมายความว่าไม่มีการส่งออกข้อความในขณะที่กระบวนการกำลังทำงาน
ตอนนี้คุณรู้วิธีรันกระบวนการในเบื้องหลังแล้ว ทำไมไม่ลองเรียนรู้เคล็ดลับและกลเม็ดอื่นๆ ของ linux บ้างล่ะ