ลด 50% ทุกแพ็กเกจ เวลาจำกัด เริ่มต้นที่ $2.48/mo
เหลืออีก 8 นาที
เซิร์ฟเวอร์และ OS

คำสั่ง nohup ใน Linux ทำงานอย่างไร - Syntax, Use Cases และตัวอย่าง

เอดา เลิฟกูด By เอดา เลิฟกูด อ่าน 8 นาที อัปเดตแล้ว 14 กรกฎาคม 2024
nohup command

หากคุณเป็นนักพัฒนาบน Linux คุณย่อมทราบดีว่าความเสถียรของ session นั้นสำคัญเพียงใด กระบวนการที่ทำงานนานบน Linux ต้องทำงานต่อเนื่องแม้หลังจากที่คุณ logout ออกจาก session แล้ว โชคดีที่ Linux มีคำสั่งสำหรับจุดประสงค์นี้โดยเฉพาะ คำสั่ง nohup command ช่วยให้คำสั่งต่าง ๆ ทำงานต่อเนื่องในพื้นหลังโดยไม่ถูกขัดจังหวะ ป้องกันการสูญหายของข้อมูล และประหยัดเวลาได้มาก คู่มือนี้จะอธิบายทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับคำสั่ง nohup บน Linux ตั้งแต่ syntax และ option ต่าง ๆ ไปจนถึงตัวอย่างการใช้งานจริงและการแก้ไขข้อผิดพลาดที่พบบ่อย

ทำความเข้าใจ syntax ของ nohup บน Linux

คำสั่ง nohup ใช้งานง่ายและตรงไปตรงมา ช่วยให้คุณรันคำสั่งหรือสคริปต์ในเบื้องหลัง เพื่อให้แน่ใจว่ากระบวนการเหล่านั้นยังคงทำงานต่อไปแม้จะออกจาก terminal แล้ว วิธีใช้งานมีดังนี้:

nohup [command] [arguments] &

คุณควรแทนที่ [command] ด้วยคำสั่งหรือสคริปต์ที่ต้องการรัน และ [argument] คืออาร์กิวเมนต์หรือออปชันที่คำสั่งนั้นต้องการ สัญลักษณ์ & ส่งคำสั่งให้ทำงานในเบื้องหลัง ดูตัวอย่างได้ดังนี้:

nohup myscript.sh &

ในตัวอย่างนี้ myscript.sh คือ bash script ที่จะทำงานต่อไปแม้ปิด terminal สิ่งที่ได้ออกมาจะถูกเปลี่ยนเส้นทางไปยังไฟล์ชื่อ nohup.out โดยค่าเริ่มต้น เว้นแต่คุณจะระบุเส้นทางอื่น

ตัวเลือกของคำสั่ง nohup

แม้คำสั่ง nohup จะมีออปชันไม่มาก แต่การเรียนรู้วิธีใช้ร่วมกับคำสั่งต่าง ๆ และเทคนิคการเปลี่ยนเส้นทางเอาต์พุตจะช่วยให้ใช้งานได้มีประสิทธิภาพยิ่งขึ้น เริ่มจากดูวิธีดึงข้อมูลเกี่ยวกับคำสั่ง nohup กันก่อน:

nohup –-help 
nohup --version

สองคำสั่งนี้แสดงข้อความช่วยเหลือและเวอร์ชันของ nohup เพื่อให้คุณทราบข้อมูลที่เป็นประโยชน์

การรันกระบวนการด้วยคำสั่ง nohup

หากต้องการรันกระบวนการด้วยคำสั่ง nohup ให้ใช้โครงสร้างเดิมที่อธิบายไปในหัวข้อก่อนหน้า:

nohup [command]

หากต้องการให้กระบวนการทำงานในเบื้องหลัง เพียงเพิ่ม & ต่อท้ายคำสั่งของคุณ

การรันหลายกระบวนการพร้อมกันในพื้นหลังด้วยคำสั่ง nohup

แล้วถ้าต้องการรันหลายกระบวนการพร้อมกันในเบื้องหลังด้วยคำสั่ง nohup จะทำอย่างไร?

nohup bash -c '[command A] && [command B]' &

แทนที่ [command A] และ [command B] ด้วยคำสั่งที่ต้องการรันในเบื้องหลัง สมมติว่าคุณต้องการอัปเดต package ของระบบแล้วลบไฟล์ที่ไม่จำเป็นออก โดยใช้คำสั่ง nohup:

nohup bash -c 'sudo apt-get update && sudo apt-get autoremove -y' &

ในตัวอย่างนี้ nohup ช่วยให้ทั้งกระบวนการอัปเดตและล้างข้อมูลทำงานต่อในเบื้องหลังได้ งาน maintenance ของระบบจึงเสร็จสิ้นโดยไม่ต้องเปิด terminal ทิ้งไว้

การเปลี่ยนเส้นทาง output ตามต้องการ

เอาต์พุตของกระบวนการนี้จะถูกเปลี่ยนเส้นทางไปยัง nohup.out โดยค่าเริ่มต้น แต่ถ้าต้องการให้เอาต์พุตไปอยู่ที่เส้นทางอื่น ทำได้ดังนี้:

nohup [command] > [/path/to/new/output.txt]

อย่าลืมแทนที่ค่าใน [] ด้วยคำสั่งและเส้นทางไฟล์ที่คุณต้องการ

การใช้ nohup ร่วมกับคำสั่งอื่น

nohup สามารถใช้ร่วมกับคำสั่งอื่นและ pipe เพื่อสร้างชุดคำสั่งที่ทรงพลังได้ ลองดูตัวอย่างกัน:

nohup find / -name "*.log" | xargs grep "ERROR" > error_logs.txt 2>&1 &

ที่นี่ คำที่ไม่สมบูรณ์ กรุณาให้ข้อความที่สมบูรณ์เพื่อให้ฉันแปลได้ หากคุณมีข้อความอื่นที่ต้องการแปล กรุณาระบุข้อความเต็มรูปแบบ หา คำสั่งนี้ใช้สำหรับค้นหาไฟล์ล็อกและ grep ใช้ค้นหาคำว่า "ERROR" ผลลัพธ์ที่รวมกันจะถูกส่งต่อไปยัง error_logs.txt.

ในส่วนนี้ เราได้ครอบคลุมตัวเลือกและกรณีการใช้งานทั่วไปของคำสั่ง nohup แล้ว เมื่อเข้าใจคำสั่งเหล่านี้อย่างถ่องแท้ คุณก็สามารถใช้ nohup รัน Linux processes ในพื้นหลังได้อย่างมีประสิทธิภาพ

ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข

การใช้คำสั่ง nohup โดยทั่วไปไม่ซับซ้อน แต่อาจเกิดข้อผิดพลาดบางอย่างระหว่างการใช้งาน การเข้าใจข้อผิดพลาดเหล่านี้และวิธีแก้ไขจะช่วยประหยัดเวลาและลดความยุ่งยากได้มาก มาดูกันว่ามีข้อผิดพลาดอะไรบ้าง และรับมือกับมันอย่างไร:

ปฏิเสธการอนุญาต

ข้อผิดพลาดนี้เกิดขึ้นเมื่อสคริปต์หรือคำสั่งที่คุณพยายามรันไม่มีสิทธิ์ execute ผลลัพธ์ของข้อผิดพลาดจะมีลักษณะดังนี้: nohup: ไม่สามารถรันคำสั่ง 'myscript.sh' ได้: ถูกปฏิเสธสิทธิ์การเข้าถึง

เพื่อแก้ไขปัญหานี้ ให้ตรวจสอบว่าสคริปต์หรือคำสั่งมีสิทธิ์ที่ถูกต้อง คุณสามารถเพิ่มสิทธิ์การรันได้โดยใช้ chmod คำสั่ง

chmod +x myscript.sh 
nohup ./myscript.sh &

คำสั่งไม่พบ

ข้อผิดพลาดนี้เกิดขึ้นเมื่อไม่พบคำสั่งหรือสคริปต์ในตำแหน่งที่ระบุ หรือไม่มีอยู่ใน PATH ของคุณ ข้อความแสดงข้อผิดพลาดจะมีลักษณะดังนี้: nohup: ไม่สามารถรันคำสั่ง 'myscript.sh' ได้: ไม่พบไฟล์หรือไดเรกทอรี

เพื่อแก้ไขข้อผิดพลาดนี้ ให้ตรวจสอบว่าคำสั่งหรือสคริปต์มีอยู่จริงและอยู่ในไดเรกทอรีที่ถูกต้อง หากจำเป็น ให้ระบุ absolute path ของสคริปต์โดยตรง:

nohup /path/to/myscript.sh &

ตรวจสอบด้วยว่าคำสั่งนั้นติดตั้งอยู่แล้วและสามารถเรียกใช้ได้จาก PATH ของคุณ

ไม่มีผลลัพธ์

บางครั้งคุณอาจพบว่าไม่มีผลลัพธ์แสดงในเทอร์มินัลหรือในไฟล์เอาต์พุต หากคำสั่งสร้างผลลัพธ์แต่คุณไม่เห็น อาจเป็นเพราะเอาต์พุตถูกเปลี่ยนเส้นทางไปยังไฟล์อื่นที่ไม่ใช่ค่าเริ่มต้น หรืออาจมีปัญหาเรื่องสิทธิ์การเข้าถึงไฟล์ วิธีแก้คือระบุไฟล์เอาต์พุตให้ชัดเจน เพื่อให้แน่ใจว่าการเปลี่ยนเส้นทางทำงานถูกต้อง:

nohup myscript.sh > output.log 2>&1 &

ตัวอย่างเช่น คำสั่งนี้จะเปลี่ยนเส้นทางทั้ง standard output และ standard error ไปยังไฟล์ชื่อ output.log.

สคริปต์ไม่ทำงานในเบื้องหลัง

บางครั้งสคริปต์หรือคำสั่งของคุณดูเหมือนจะทำงานอยู่ แต่ไม่ได้รันในพื้นหลัง สาเหตุมักไม่ซับซ้อน อาจเป็นเพราะคุณลืมเพิ่ม & สัญลักษณ์ต่อท้ายคำสั่งเพื่อให้รันในพื้นหลัง วิธีแก้ก็ง่ายมาก แค่ตรวจสอบให้แน่ใจว่าได้เพิ่มสัญลักษณ์นั้นเข้าไปแล้ว เท่านี้ก็พร้อมใช้งานได้เลย

กระบวนการค้างหรือไม่ตอบสนอง

กระบวนการที่เริ่มต้นด้วย nohup อาจค้างหรือหยุดตอบสนองได้ โดยทั่วไปมักเกิดจากสองสาเหตุ คือ กระบวนการกำลังรอรับข้อมูลเข้า หรือมีปัญหากับทรัพยากรที่พยายามเข้าถึง ซึ่งมีวิธีแก้ไขอยู่สองแนวทาง:

  • ตรวจสอบข้อมูลที่จำเป็น: ตรวจสอบให้แน่ใจว่าคำสั่งไม่ต้องการข้อมูลป้อนเข้าแบบโต้ตอบใดๆ
  • ปัญหาทรัพยากร: ตรวจสอบว่าคำสั่งมีสิทธิ์เข้าถึงทรัพยากรที่จำเป็น เช่น ไฟล์หรือเครือข่าย

การเขียนทับ nohup.out

หากคุณรันหลายโปรเซสในพื้นหลังด้วยคำสั่ง nohup คุณอาจเขียนทับไฟล์ nohup.out ไฟล์ เพื่อหลีกเลี่ยงปัญหานี้ ให้กำหนดพาธเฉพาะสำหรับแต่ละ process แยกกัน วิธีนี้จะทำให้แต่ละ process มีไฟล์ output เป็นของตัวเอง และพาธค่าเริ่มต้นจะไม่ถูกเขียนทับ

ด้วยการทำความเข้าใจข้อผิดพลาดทั่วไปของ nohup และวิธีแก้ไข คุณก็จะใช้คำสั่ง nohup ได้อย่างราบรื่นไม่มีติดขัด

สรุป

คำสั่ง nohup เป็นเครื่องมือที่มีประโยชน์มากสำหรับผู้ใช้ Linux ที่ต้องการรันโปรเซสในพื้นหลัง เพราะช่วยให้โปรเซสทำงานต่อเนื่องได้แม้จะ logout ออกจากระบบแล้ว ในคู่มือนี้ เราครอบคลุมตั้งแต่ syntax พื้นฐาน ตัวเลือกต่าง ๆ ไปจนถึงข้อผิดพลาดที่พบบ่อยพร้อมวิธีแก้ไข การใช้คำสั่ง nohup ได้อย่างคล่องแคล่วช่วยให้คุณจัดการงานที่ใช้เวลานานได้อย่างมีประสิทธิภาพ และพัฒนาทักษะการดูแลระบบของคุณไปในตัว

หากคุณเป็นนักพัฒนา Linux ที่ต้องการใช้งาน Linux ให้ได้ประสิทธิภาพสูงสุด ลองพิจารณาอัปเกรดไปใช้ Linux VPS บริการ VPS บนคลาวด์ของเรารองรับการทำงานตลอด 24/7 พร้อมรับประกัน uptime 99.95% หมายความว่าแอปพลิเคชันของคุณทำงานได้ต่อเนื่องตลอดเวลา และคุณสามารถขอความช่วยเหลือได้ทุกชั่วโมง ด้วยโครงสร้างพื้นฐานและทรัพยากรที่เชื่อถือได้ VPS ของเราออกแบบมาเพื่อตอบสนองความต้องการของนักพัฒนา Linux โดยเฉพาะ นอกจากนี้คุณยังติดตั้ง Linux distribution ที่ต้องการไว้ล่วงหน้าได้ ทำให้เริ่มต้นใช้งานได้รวดเร็ว พัฒนาโปรเจกต์ Linux ของคุณให้ก้าวหน้ายิ่งขึ้นด้วย VPS ที่มีทั้งประสิทธิภาพและความยืดหยุ่นที่คุณต้องการ

คำถามที่พบบ่อย

ความแตกต่างระหว่าง nohup และ &?

nohup ป้องกันไม่ให้โปรเซสถูกยุติเมื่อผู้ใช้ออกจากระบบ ในขณะที่ & รันโปรเซสในพื้นหลัง การใช้ nohup ทำให้โปรเซสทำงานต่อเนื่องหลังจาก logout และเมื่อใช้ร่วมกับ & จะทำให้โปรเซสทำงานอยู่เบื้องหลังได้

ทำไมต้องใช้ nohup?

nohup ใช้เพื่อให้แน่ใจว่าคำสั่งหรือสคริปต์ยังคงทำงานต่อไปแม้ผู้ใช้จะ logout หรือปิด terminal ไปแล้ว เหมาะสำหรับโปรเซสที่ต้องทำงานนานโดยไม่ต้องการการแทรกแซงจากผู้ใช้

ไฟล์ nohup out คืออะไร?

ค่า nohup.out คือไฟล์ output เริ่มต้นที่ nohup ใช้เก็บ standard output และ standard error ของคำสั่ง หากไม่ได้ระบุไฟล์ output อื่นไว้ ผลลัพธ์ของคำสั่งจะถูกบันทึกใน nohup.out ในไดเรกทอรีปัจจุบัน

แชร์

บทความอื่นจากบล็อก

อ่านต่อ

ภาพหน้าปกบทความแอปที่โฮสต์เองที่ดีที่สุดสำหรับ Cosmos Cloud พร้อมแผงแอปรอบ Cosmos dashboard
เซิร์ฟเวอร์และ OS

แอปที่โฮสต์เองที่ดีที่สุดสำหรับ Cosmos Cloud: ไฟล์, มีเดีย, รหัสผ่าน, ระบบอัตโนมัติ และอื่น ๆ อีกมาก

Maybe คุณตั้งค่า Cosmos Cloud เรียบร้อยแล้วและอยากรู้ว่าแอปไหนเข้ากันได้ดี หรืออาจยังไม่แน่ใจเรื่อง Cosmos และแค่อยากดูว่ามันเหมาะกับเวิร์กโฟลว์ของคุณแค่ไหน

นิค ซิลเวอร์นิค ซิลเวอร์ อ่าน 16 นาที
Portainer vs Cosmos Cloud สำหรับการจัดการแอป Docker พร้อมไดอะแกรม Hybrid Setup และบล็อก Ops กับ Access แบบ Neon
เซิร์ฟเวอร์และ OS

Portainer vs Cosmos Cloud: ตัวเลือกไหนเหมาะกับการจัดการแอป Docker

ถ้าคุณรู้จัก Docker อยู่แล้วและต้องการวิธีที่ดีกว่าในการรัน App Stack ที่กำลังขยาย นี่คือคำตอบสั้นๆ สำหรับ Portainer vs Cosmos Cloud: Portainer เป็นตัวเลือกที่แข็งแกร่งกว่าสำหรับการควบคุมโดยตรง

นิค ซิลเวอร์นิค ซิลเวอร์ อ่าน 14 นาที
Cosmos Cloud vs CasaOS vs Umbrel กราฟิกประกอบที่แสดงสามเส้นทาง Self-Hosted ภายในเครือข่ายคลาวด์แบบนามธรรม
เซิร์ฟเวอร์และ OS

Cosmos Cloud vs CasaOS vs Umbrel: แพลตฟอร์ม Self-Hosted ไหนเหมาะกับการใช้งานของคุณ?

คำตอบสั้นๆ คือ CasaOS ยังเป็นจุดเริ่มต้นที่ง่ายที่สุด Umbrel มีอินเทอร์เฟซที่เรียบร้อยและดูแลการคัดสรรได้ดีที่สุด ส่วน Cosmos Cloud เหมาะกว่าเมื่อคุณต้องการควบคุม Domain ได้แน่นขึ้น

นิค ซิลเวอร์นิค ซิลเวอร์ อ่าน 11 นาที

พร้อม Deploy แล้วหรือยัง? เริ่มต้นที่ $2.48/เดือน

Cloud อิสระ ให้บริการมาตั้งแต่ปี 2008. AMD EPYC, NVMe, 40 Gbps. คืนเงินภายใน 14 วัน