บทความนี้จะอธิบายวิธีการรันคำสั่งในเบื้องหลังด้วย "nohup"

ปัญหา

ลองนึกภาพว่าคุณกำลังสร้างสคริปต์ที่ทำงาน redis-server จากนั้น redis-cli:

redis-server
redis-cli

redis-cli ไม่เคยเริ่มตั้งแต่ redis-server ทำงานตลอดไป

สารละลาย

วิธีแก้ปัญหาหนึ่งคือการรัน redis-server ในพื้นหลังด้วย &:

redis-server &

อย่างไรก็ตาม หากต้องการเรียกใช้ redis-server โดยไม่วางสาย ให้ใช้ nohup:

nohup redis-server &

ผลลัพธ์ของ redis-server ถูกบันทึกไปที่ nohup.out:

cat nohup.out

หากต้องการส่งผ่านอาร์กิวเมนต์ redis.conf ถึง redis-server:

nohup redis-server redis.conf &

หากต้องการปิดเสียงเอาต์พุต nohup ในบรรทัดคำสั่ง:

nohup redis-server redis.conf >/dev/null 2>&1 &

ตอนนี้คุณสามารถเรียกใช้ redis-server และ redis-cli ในสคริปต์เดียวกัน:

nohup redis-server &
redis-cli

แต่ปัญหาหนึ่งคือ redis-server ไม่เคยปิดตัวลง

ดังนั้นให้บันทึก "pid":

nohup redis-server &
echo $! > /tmp/redis-server.pid

และฆ่ามันก่อนที่มันจะทำงาน (ถ้ามี):

kill $(cat /tmp/redis-server.pid)

สคริปต์

สคริปต์ตัวอย่างการทำงาน:

การสาธิต

ตอบกลับ:



บทความนี้เผยแพร่ครั้งแรกบน Outstandingmark.org เมื่อวันที่ 2 เมษายน 2022