เรียกใช้สคริปต์ทุบตีในพื้นหลังและออกจากสถานี


19

เป็นไปได้ไหมที่จะเรียกใช้คำสั่งหรือเทอร์มินัลออกสคริปต์ Bash และไม่ใช้คำสั่งขัดจังหวะ?

วิธีแก้ปัญหาของฉันคือใช้ cron ในเวลาเฉพาะของวัน แต่ฉันแน่ใจว่ามีบางสิ่งที่ง่ายขึ้น


คำตอบ:


45

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

nohup cmd &

1
นี่คือคำตอบที่ถูกต้อง กระบวนการที่เริ่มจะยังถือว่าเป็น "child" ของกระบวนการเทอร์มินัลและจะสิ้นสุดลงหากปิดเทอร์มินัล
Izzy

3
cmd & disownทำงานเกินไปเนื่องจาก&จะถือว่าเป็น;ตัวคั่นคำสั่ง คำสั่ง disown ลบการเชื่อมต่อระหว่างเซสชัน bash shell และคำสั่ง backgrounded
lornix

2
มีชวเลขสำหรับเรื่องนี้: cmd &|.
Thor

เพื่อให้ทำงานได้ฉันต้องเปลี่ยนการตั้งค่าใน Terminal.app ภายใต้ส่วนกำหนดค่าให้เลือกโปรไฟล์ที่ใช้งานของคุณแล้วเชลล์> เมื่อออกจากเชลล์> ปิดหากเชลล์ออกอย่างหมดจด
ทอน

6

การใช้screen:

screen -S <session name> -d -m <your command>

หลังจากนั้นคุณสามารถออกจากเทอร์มินัลแล้วคุณสามารถติดตั้งใหม่ได้โดย:

screen -r <session name>

ข้อมูลเพิ่มเติม: การอ้างอิง


4

หากคุณต้องการรันคำสั่งหรือไฟล์เฉพาะทุก ๆ วินาทีในพื้นหลังหลังจากออกจากเทอร์มินัลคุณสามารถลองสิ่งเล็ก ๆ น้อย ๆ นี้ได้โดยง่าย

nohup watch -n5 'bash script.sh' &

นั่นจะเรียกใช้ scipt.sh ทุกๆ 5 วินาที


1
"nohup" ถูกครอบคลุมโดยคำตอบที่ยอมรับแล้ว และฉันค่อนข้างแน่ใจว่าผู้ถามพูดถึง cron เพราะพวกเขาใช้มันเพื่อพูดว่า "เรียกใช้คำสั่งนี้สองสามวินาทีในอนาคต" ไม่เรียกใช้เป็นระยะ
David Richerby

1
คำตอบของฉันไม่ได้ทำให้สิ่งเลวร้ายลง ดูจุดลงคะแนน ประสาทก็เพียงพอแล้ว
jamietelin

3

ใส่อักขระ "&" ​​หลังคำสั่งของคุณ

เช่น:

/home/your/script.sh &

7
ในกรณีนี้เมื่อปิดเทอร์มินัลกระบวนการนั้นเริ่มต้นด้วย/home/your/script.sh- เนื่องจากไม่ได้ถูกแยกออกจาก "พาเรนต์" แต่เพียงแค่ "แบ็คกราวน์" ใช้nohupเพื่อปลดมันออกมาจริง
Izzy

ไม่ดีของฉันฉันไม่รู้เกี่ยวกับเรื่องนั้น แต่เมื่อฉันทดสอบบน Debian ของฉันคำสั่งยังคงดำเนินการหลังจากปิดเชลล์ที่เปิดตัว: /
Flinth

1
ฉันไม่แน่ใจว่ากระบวนการที่แนบมากับพื้นหลังและเมื่อใด แต่ถ้าคุณเช่นเข้าสู่เครื่องระยะไกลมันจะหยุดทันทีที่คุณออกจากระบบแน่นอน (ยกเว้นถ้าdaemonizedตัวเอง) ดังนั้นเพื่อให้แน่ใจ 100% คุณควรใช้nohup- ซึ่งยังบันทึกผลลัพธ์ทั้งหมด (ตอนนี้มองไม่เห็น) ลงในไฟล์ที่เรียกว่าnohup.outอยู่ในไดเรกทอรีที่คุณเริ่มคำสั่ง
Izzy

โอเคขอบคุณสำหรับคำอธิบายของคุณ ^^
Flinth

คำตอบนี้อาจใช้ได้เมื่อรวมกับjobsคำสั่ง บ่อยครั้งที่ฉันต้องการกลับไปใช้กระบวนการเชลล์หลังจากทำมัน
djangofan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.