บทความนี้จะอธิบายวิธีการรันคำสั่งในเบื้องหลังด้วย "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