PuTTY หรือ OTHER - ดำเนินการคำสั่งต่อไปแม้หลังจากออกจาก PuTTY [ซ้ำ]


13

ฉันมีคำสั่งสองสามข้อที่ฉันต้องเรียกใช้ คำสั่งเหล่านี้ต้องทำงานอย่างต่อเนื่องแม้หลังจากออกจากส่วนต่อประสานแล้ว เมื่อฉันเข้าถึง Linux GUI ฉันจะดำเนินการบางอย่างเช่น:

cd /home/testuser/Scripts*
xterm -hold -T "Background_Script1" -e  "service1-start.sh" &
sleep 10
xterm -hold -T "Background_Script2" -e "service2-start.sh" &

ความช่วยเหลือใด ๆ จะได้รับการชื่นชมมาก



มีเหตุผลใดบ้างที่คุณไม่ได้ใช้บริการเหล่านี้ในฐานะภูต
SevenSidedDie

คำสั่งหมายถึงบริการที่ควรทำงานในช่วงเวลาเกือบจะถึง 100% "ตลอดกาล" หรือเป็นงานการประมวลผลที่ใช้เวลานานซึ่งคาดว่าจะเสร็จสิ้นในภายหลังหรือไม่? คำตอบทั้งหมดจะ "ทำงาน" สำหรับทั้งสองกรณี แต่คำแนะนำที่เหมาะสมจะแตกต่างกัน
Peteris

คุณใช้ Linux รุ่นใดเป็นพิเศษ ฉันพบว่าการรันset -m;ทำให้สคริปต์ของฉันทำงานต่อหลังจากที่ฉันล็อกเอาต์กับ CentOS และ RHEL
ArtOfWarfare

คำตอบ:


33

ลอง

nohup Background_ScriptX &

nohup ช่วยให้มั่นใจได้ว่ากระบวนการจะไม่ถูกยกเลิกเมื่อปิดเทอร์มินัล สัญลักษณ์ & ผลักกระบวนการลงในพื้นหลัง

หวังว่านี่จะเป็นประโยชน์


nohup แน่นอนไม่ทำงาน
Pitto

ดีใจที่ได้ช่วยเหลือ
Eamonn Travers

15
หน้าจอมีข้อได้เปรียบที่ชัดเจนมากกว่าnohup : nohupไม่อนุญาตให้คุณกลับไปที่คำสั่งที่ทำงานอยู่ (เช่นเช้าวันรุ่งขึ้นเพื่ออ่าน stdout แล้วเลือกฆ่ามันเป็นต้น) หน้าจอช่วยให้คุณทำอย่างนั้น
Andreas F

1
nohup ส่งเอาต์พุตไปยังไฟล์ที่สามารถประมวลผลได้
Brian Knoblauch

สำหรับผู้ที่เพิ่งเริ่มใช้ใหม่nohupโดยปกติจะเป็น "no hangup" - เมื่อไม่มี nohup HUPสัญญาณhangup ( ) จะถูกละเว้น
Dan7119

20

หากคุณต้องการอ่านผลลัพธ์ในภายหลังคุณสามารถใช้screen:

screen -d -m my_command

นี่เป็นเทอร์มินัลที่แยกออกมาซึ่งคุณสามารถเชื่อมต่อได้ในภายหลัง ( screen -r) เพื่ออ่านเอาต์พุต stdout / stderr


2
+1 สำหรับหนึ่งถ้าคุณปิดเทอร์มินัลของคุณ (เช่นผงสำหรับอุดรู) แล้วเปิดอีกครั้งแล้วใส่กลับไปที่หน้าจอ ( screen -r) คุณจะได้ผลลัพธ์ทั้งหมดที่โปรแกรมของคุณผลิตและคุณจะ "พลาด" นอกจากนี้หน้าจอสามารถทำสิ่งที่น่าอัศจรรย์มากมายเช่นหน้าจอแยก ฯลฯ ! :)
Alberto Santini

6

ตัวเลือกอื่นถ้าไม่มีnohupคำสั่งให้ใช้คำสั่งdisown

ก่อนอื่นคุณสามารถดูงานพื้นหลังของคุณโดยการเรียกใช้jobsในสถานี คุณสามารถรับหมายเลขงานได้จากที่นั่น

ตอนนี้เพิ่งรันdisown %[job number]และกระบวนการจะถูกแยกออกจากเทอร์มินัลปัจจุบันและยังคงอยู่เมื่อคุณออกจากระบบ

หมายเหตุด้านข้าง: ตรวจสอบให้แน่ใจว่าคุณกำลังถามคำถามที่ถูกต้อง หากคุณใช้งานบริการจริงตามที่คุณระบุในตัวอย่างคุณอาจต้องการดูวิธีสร้าง daemon ในระบบปฏิบัติการที่คุณเลือก นี่คือเพื่อให้แน่ใจว่ากระบวนการยังคงทำงานหลังจากรีบูตและทำให้สอดคล้องกับบริการอื่น ๆ

หวังว่านี่จะช่วยได้


3

ตั้งแต่screenมีการพูดถึง: มีเทอร์มินัลมัลติเพล็กเซอร์อื่น ๆ ฉันชอบtmuxมากดูตัวอย่างคำถาม superuser อื่น ๆtmux กับหน้าจอสำหรับการเปรียบเทียบ


0

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

ใช้มันแบบนี้:

setsid program-to-background

Manpage: http://man7.org/linux/man-pages/man2/setsid.2.html

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