หากคุณเป็นนักพัฒนา Linux คุณจะทราบถึงความสำคัญของความสม่ำเสมอและความน่าเชื่อถือของเซสชันของคุณ กระบวนการที่ใช้เวลานานใน Linux จำเป็นต้องดำเนินต่อไปแม้ว่าคุณจะออกจากระบบเซสชันแล้วก็ตาม โชคดีที่ Linux มีคำสั่งที่ใช้งานได้เพื่อจุดประสงค์นี้ ที่ คำสั่ง nohup ช่วยให้คุณสามารถรันคำสั่งอย่างต่อเนื่องในเบื้องหลังได้ วิธีนี้ช่วยป้องกันข้อมูลสูญหายและประหยัดเวลาอันมีค่า คู่มือนี้จะอธิบายทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับคำสั่ง Linux nohup ตั้งแต่ไวยากรณ์และตัวเลือกไปจนถึงตัวอย่างที่เป็นประโยชน์และการแก้ไขปัญหาข้อผิดพลาดทั่วไป
ทำความเข้าใจเกี่ยวกับไวยากรณ์ nohup ของ Linux
คำสั่ง nohup นั้นใช้งานง่ายและตรงไปตรงมา ช่วยให้คุณสามารถเรียกใช้คำสั่งหรือสคริปต์ในเบื้องหลัง ดังนั้นคุณจึงมั่นใจได้ว่าคำสั่งหรือสคริปต์จะยังคงทำงานต่อไปแม้ว่าคุณจะออกจากระบบเทอร์มินัลแล้วก็ตาม นี่คือวิธีการใช้งาน:
nohup [command] [arguments] &
คุณควรเปลี่ยน [สั่งการ] ด้วยคำสั่งหรือสคริปต์ที่คุณต้องการเรียกใช้ และ [การโต้แย้ง] คืออาร์กิวเมนต์หรือตัวเลือกใดๆ ที่คำสั่งต้องการ ที่ & สัญลักษณ์ส่งคำสั่งให้ทำงานในพื้นหลัง ลองดูตัวอย่าง:
nohup myscript.sh &
ในตัวอย่างนี้ myscript.sh เป็นสคริปต์ทุบตีที่จะทำงานต่อไปแม้ว่าคุณจะปิดเทอร์มินัลก็ตาม ผลลัพธ์จะถูกเปลี่ยนเส้นทางไปยังไฟล์ชื่อ nohup.out โดยค่าเริ่มต้น เว้นแต่คุณจะระบุเส้นทางอื่น
สำรวจตัวเลือก nohup
แม้ว่าคำสั่ง nohup จะไม่มีทางเลือกมากมาย แต่การทำความเข้าใจวิธีใช้งานอย่างมีประสิทธิภาพด้วยคำสั่งต่างๆ และเทคนิคการเปลี่ยนเส้นทางสามารถเพิ่มประสิทธิภาพได้ ก่อนอื่น เรามาดูกันว่าเราจะรับข้อมูลเกี่ยวกับคำสั่ง nohup ได้อย่างไร:
nohup –-help nohup --version
คำสั่งทั้งสองนี้จะให้ข้อมูลที่เป็นประโยชน์แก่คุณโดยแสดงข้อความช่วยเหลือและเวอร์ชันของ nohup
การรันกระบวนการด้วยคำสั่ง nohup
หากคุณต้องการรันกระบวนการด้วยคำสั่ง nohup คุณสามารถทำตามโครงสร้างเดียวกับที่ฉันอธิบายไว้ในส่วนสุดท้าย:
nohup [command]
หากคุณต้องการรันกระบวนการในเบื้องหลัง เพียงเพิ่ม & จนจบคำสั่งของคุณ
การรันหลายกระบวนการในเบื้องหลังด้วยคำสั่ง nohup
ทีนี้ จะเป็นอย่างไรถ้าคุณต้องการรันมากกว่าหนึ่งกระบวนการในเบื้องหลังโดยใช้คำสั่ง nohup?
nohup bash -c '[command A] && [command B]' &
แทนที่ [คำสั่ง ก] และ [คำสั่ง B] ด้วยคำสั่งที่คุณต้องการเรียกใช้ในเบื้องหลัง ลองนึกภาพว่าคุณต้องการอัพเดตแพ็คเกจระบบของคุณก่อน จากนั้นจึงล้างไฟล์ที่ไม่จำเป็น และคุณต้องการทำเช่นนี้โดยใช้คำสั่ง nohup:
nohup bash -c 'sudo apt-get update && sudo apt-get autoremove -y' &
ในตัวอย่างนี้ ไม่นะ อนุญาตให้ทั้งกระบวนการอัปเดตและล้างข้อมูลทำงานต่อไปในเบื้องหลัง ดังนั้นงานบำรุงรักษาระบบของคุณจะเสร็จสมบูรณ์โดยที่คุณไม่ต้องเปิดเครื่องเทอร์มินัลทิ้งไว้
การเปลี่ยนเส้นทางเอาต์พุตแบบกำหนดเอง
ผลลัพธ์ของกระบวนการนี้จะถูกเปลี่ยนเส้นทางไปที่ nohup.out โดยค่าเริ่มต้น แต่ถ้าคุณต้องการรับเอาต์พุตในเส้นทางอื่นล่ะ? นี่คือวิธีที่คุณสามารถทำได้:
nohup [command] > [/path/to/new/output.txt]
อย่าลืมแทนที่ค่าใน [] ด้วยคำสั่งและเส้นทางไฟล์ที่คุณต้องการ
การรวม nohup เข้ากับคำสั่งอื่น ๆ
nohup สามารถใช้ร่วมกับคำสั่งและไพพ์อื่นๆ เพื่อสร้างกลุ่มคำสั่งที่มีประสิทธิภาพได้ ลองดูตัวอย่างนี้:
nohup find / -name "*.log" | xargs grep "ERROR" > error_logs.txt 2>&1 &
นี่. หา คำสั่งใช้เพื่อค้นหาไฟล์บันทึกและ เกรป ใช้เพื่อค้นหาคำว่า “ERROR” เอาต์พุตรวมจะถูกเปลี่ยนเส้นทางไปที่ error_logs.txt.
ในส่วนนี้ เราได้กล่าวถึงตัวเลือกที่พบบ่อยที่สุดและกรณีการใช้งานของคำสั่ง nohup เมื่อเชี่ยวชาญคำแนะนำเหล่านี้ คุณจะสามารถใช้ nohup เพื่อรันกระบวนการ Linux ในเบื้องหลังได้อย่างมีประสิทธิภาพ
ข้อผิดพลาดทั่วไปและการแก้ไขปัญหา
โดยทั่วไปการใช้คำสั่ง nohup นั้นตรงไปตรงมา แต่คุณอาจพบข้อผิดพลาดทั่วไปบางประการในระหว่างกระบวนการ การทำความเข้าใจข้อผิดพลาดเหล่านี้และการรู้วิธีแก้ไขปัญหาสามารถช่วยคุณประหยัดเวลาและความยุ่งยากได้ มาดูกันว่าข้อผิดพลาดทั่วไปเหล่านี้คืออะไร และจะแก้ไขอย่างไร:
การอนุญาตถูกปฏิเสธ
ข้อผิดพลาดนี้เกิดขึ้นเมื่อสคริปต์หรือคำสั่งที่คุณพยายามเรียกใช้ไม่มีสิทธิ์ดำเนินการ ผลลัพธ์ของข้อผิดพลาดมีลักษณะดังนี้: nohup: ล้มเหลวในการเรียกใช้คำสั่ง 'myscript.sh': การอนุญาตถูกปฏิเสธ
ในการแก้ปัญหานี้ คุณต้องตรวจสอบให้แน่ใจว่าสคริปต์หรือคำสั่งมีสิทธิ์ที่ถูกต้อง คุณสามารถเพิ่มการอนุญาตดำเนินการได้โดยใช้ โครโมด สั่งการ:
chmod +x myscript.sh nohup ./myscript.sh &
ไม่พบคำสั่ง
ข้อผิดพลาดนี้เกิดขึ้นหากไม่พบคำสั่งหรือสคริปต์ในตำแหน่งที่ระบุหรือไม่พร้อมใช้งานใน PATH ของคุณ ผลลัพธ์ของข้อผิดพลาดมีลักษณะดังนี้: nohup: ไม่สามารถเรียกใช้คำสั่ง 'myscript.sh': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
เพื่อแก้ไขข้อผิดพลาดนี้ คุณควรตรวจสอบว่ามีคำสั่งหรือสคริปต์อยู่และอยู่ในไดเร็กทอรีที่ถูกต้อง คุณอาจต้องระบุเส้นทางที่แน่นอนไปยังสคริปต์:
nohup /path/to/myscript.sh &
ตรวจสอบให้แน่ใจว่าได้ติดตั้งคำสั่งและพร้อมใช้งานใน PATH ของคุณ
ไม่มีเอาท์พุต
บางครั้งคุณอาจสังเกตเห็นว่าไม่มีเอาต์พุตในเทอร์มินัลหรือในไฟล์เอาต์พุต หากคำสั่งสร้างเอาต์พุต แต่คุณไม่เห็น คำสั่งนั้นอาจถูกเปลี่ยนเส้นทางในเส้นทางอื่นที่ไม่ใช่ไฟล์เริ่มต้น หรืออาจมีปัญหาเกี่ยวกับสิทธิ์ของไฟล์ เพื่อแก้ไขปัญหานี้ คุณจะต้องระบุไฟล์เอาต์พุตอย่างชัดเจนเพื่อให้แน่ใจว่ามีการเปลี่ยนเส้นทางอย่างถูกต้อง:
nohup myscript.sh > output.log 2>&1 &
ตามตัวอย่าง คำสั่งนี้เปลี่ยนเส้นทางทั้งเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานไปยังไฟล์ชื่อ output.log.
สคริปต์ไม่ทำงานในพื้นหลัง
บางครั้งสคริปต์หรือคำสั่งของคุณดูเหมือนจะทำงานอยู่ แต่ไม่ได้ทำงานอยู่เบื้องหลัง เหตุผลมักจะง่าย คุณอาจลืมเพิ่ม & สัญลักษณ์ที่ส่วนท้ายของคำสั่งเพื่อรันในพื้นหลัง วิธีแก้ปัญหาก็ทำได้ง่ายเช่นกัน เพียงตรวจสอบให้แน่ใจว่าคุณได้เพิ่มสิ่งนั้นแล้วและคุณก็พร้อมแล้ว
กระบวนการหยุดทำงานหรือไม่ตอบสนอง
กระบวนการที่เริ่มต้นด้วย nohup อาจหยุดทำงานหรือไม่ตอบสนอง สิ่งนี้สามารถเกิดขึ้นได้หากกระบวนการกำลังรออินพุตหรือหากมีปัญหากับทรัพยากรที่กระบวนการพยายามเข้าถึง มีสองวิธีแก้ไขปัญหานี้:
- ตรวจสอบอินพุตที่จำเป็น: ตรวจสอบให้แน่ใจว่าคำสั่งไม่ต้องการอินพุตแบบโต้ตอบใดๆ
- ปัญหาด้านทรัพยากร: ตรวจสอบว่าคำสั่งสามารถเข้าถึงทรัพยากรที่จำเป็น (เช่น ไฟล์ เครือข่าย)
เขียนทับ nohup.out
หากคุณใช้งานหลายกระบวนการในเบื้องหลังโดยใช้คำสั่ง nohup คุณอาจเขียนทับไฟล์โดยไม่ได้ตั้งใจ nohup.out ไฟล์. เพื่อหลีกเลี่ยงปัญหานี้ คุณสามารถเลือกเส้นทางเฉพาะสำหรับแต่ละกระบวนการได้ วิธีนี้ทำให้แต่ละกระบวนการมีไฟล์เอาท์พุตที่เป็นเอกลักษณ์และเส้นทางเริ่มต้นจะไม่ถูกเขียนทับ
เมื่อเรียนรู้เกี่ยวกับข้อผิดพลาด nohup ทั่วไปและวิธีแก้ปัญหา คุณสามารถใช้คำสั่ง nohup ได้โดยไม่มีปัญหาใดๆ
บทสรุป
คำสั่ง nohup เป็นเครื่องมือที่ยอดเยี่ยมสำหรับผู้ใช้ Linux ที่ต้องการรันกระบวนการในเบื้องหลัง เพราะจะทำให้แน่ใจได้ว่ากระบวนการของคุณยังคงทำงานต่อไปแม้ว่าจะออกจากระบบแล้วก็ตาม ในคู่มือนี้ เราได้กล่าวถึงไวยากรณ์พื้นฐาน สำรวจตัวเลือกต่างๆ และหารือเกี่ยวกับข้อผิดพลาดทั่วไปพร้อมกับเคล็ดลับในการแก้ปัญหา การเรียนรู้คำสั่ง nohup ช่วยให้คุณสามารถจัดการงานที่ใช้เวลานานได้อย่างมีประสิทธิภาพ ซึ่งช่วยเพิ่มความสามารถในการผลิตและทักษะการจัดการระบบของคุณ
หากคุณเป็นนักพัฒนา Linux ที่ต้องการเพิ่มประสบการณ์ Linux ของคุณให้สูงสุด ลองพิจารณาอัปเกรดเป็นเวอร์ชันที่เชื่อถือได้ ลินุกซ์ วีพีเอส. บริการ VPS บนคลาวด์ของเราให้การสนับสนุนตลอด 24 ชั่วโมงทุกวันและรับประกันความพร้อมใช้งาน 99.95% ซึ่งหมายความว่าแอปพลิเคชันของคุณทำงานได้อย่างราบรื่นตลอดเวลา และคุณสามารถรับความช่วยเหลือได้ตลอดเวลาของวัน ด้วยโครงสร้างพื้นฐานที่แข็งแกร่งและทรัพยากรที่เชื่อถือได้ VPS ของเราได้รับการออกแบบมาเพื่อตอบสนองความต้องการของโปรแกรมเมอร์ Linux นอกจากนี้คุณยังสามารถติดตั้งการกระจาย Linux ที่คุณต้องการไว้ล่วงหน้าได้ ทำให้การตั้งค่ารวดเร็วและง่ายดาย ยกระดับโปรเจ็กต์ Linux ของคุณไปอีกระดับด้วย VPS ที่ให้พลังและความยืดหยุ่นที่คุณต้องการ
คำถามที่พบบ่อย
อะไรคือความแตกต่างระหว่าง ไม่นะ และ &?
ไม่นะ ป้องกันไม่ให้กระบวนการถูกยกเลิกเมื่อผู้ใช้ออกจากระบบในขณะที่ & รันกระบวนการในเบื้องหลัง โดยใช้ ไม่นะ รับรองว่ากระบวนการจะดำเนินต่อไปหลังจากออกจากระบบ และรวมเข้าด้วยกัน & อนุญาตให้มันทำงานในพื้นหลัง
เหตุใดจึงใช้ nohup?
ไม่นะ ใช้เพื่อให้แน่ใจว่าคำสั่งหรือสคริปต์ยังคงทำงานต่อไปแม้ว่าผู้ใช้จะออกจากระบบหรือปิดเทอร์มินัลแล้วก็ตาม เป็นสิ่งสำคัญสำหรับกระบวนการที่ใช้เวลานานซึ่งจำเป็นต้องยังคงใช้งานอยู่โดยที่ผู้ใช้ไม่ต้องดำเนินการใดๆ
ไฟล์ nohup out คืออะไร?
ที่ nohup.out file เป็นไฟล์เอาต์พุตเริ่มต้นโดยที่ nohup เปลี่ยนเส้นทางเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานของคำสั่ง หากไม่มีการระบุไฟล์เอาต์พุตอื่น เอาต์พุตของคำสั่งจะถูกบันทึกไว้ nohup.out ในไดเร็กทอรีปัจจุบัน