ฉันจะทำให้กระบวนการมีชีวิตต่อไปได้อย่างไรหลังจากปิดเซสชันโป๊ว


41

ฉันใช้สีโป๊วเพื่อโต้ตอบกับเซิร์ฟเวอร์ Linux ฉันเริ่มกระบวนการโดยใช้ผงสำหรับอุดรู กระบวนการทำงานและจะใช้เวลา 5-6 ชั่วโมง ฉันต้องการให้กระบวนการนั้นทำงานต่อไปหลังจากที่ฉันปิดเซสชันโป๊ว ฉันจะทำให้กระบวนการนั้นยังคงอยู่ต่อไปได้อย่างไรหลังจากปิดเซสชันที่โป๊ว ฉันไม่ต้องการให้คอมพิวเตอร์เปิดอยู่ตลอดเวลา มีวิธีการทำเช่นนี้หรือไม่?

คำตอบ:


32

ฉันใช้หน้าจอสำหรับสิ่งประเภทนั้น ที่จริงบางครั้งฉันเพิ่งทิ้งไว้ซักพักหนึ่งเพื่อให้ฉันสามารถกลับไปที่สิ่งที่ฉันทำ


กระบวนการทำงานอยู่ในขณะนี้ใช้งานได้หรือไม่ฉันกำลังถามเพราะกระบวนการอยู่ตรงกลางและฉันไม่ต้องการเริ่มต้นใหม่ตอนนี้

+1 สำหรับการกล่าวถึงเครื่องมือบรรทัดคำสั่งรายการโปรดที่ไม่มีข้อโต้แย้งของฉัน มันเป็นอัญมณีในสถานการณ์เช่นนี้
Noufal Ibrahim

@ นูฟาลทั้งหมด! @prakash คุณต้องเปิดหน้าจอก่อนจึงจะสามารถเริ่มกระบวนการใด ๆ ได้
ziya

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

ลิงก์ใช้งานไม่ได้อีกต่อไป
Malky.Kid

31
^Z
bg %1
disown -h %1

'-h' ทำให้กระบวนการมีภูมิคุ้มกันต่อ SIGHUP เมื่อเซสชันเสร็จสมบูรณ์


3
โปรดทราบว่าไม่มีทางที่จะ 'นำมาใช้ใหม่' หรือ 'นำมาใช้' กระบวนการ - เมื่อคุณทำสิ่งนี้แล้วคุณจะไม่สามารถนำมันกลับมาที่เบื้องหน้าได้ หากกระบวนการนี้เป็นงานแบ็ตช์ที่ทำงานเพื่อสร้างไฟล์บางไฟล์ แต่นั่นก็ไม่สำคัญ

19

ใช้nohupคำสั่ง เพียงนำหน้ามันไปยังคำสั่งของคุณและมันจะ daemonise พวกเขาเพื่อที่พวกเขาจะไม่หยุดเมื่อคุณออกจากระบบ / ยุติเซสชั่นเปลือกของคุณ โดยปกติแล้วเอาต์พุตมาตรฐานจะอยู่ในไฟล์ชื่อ nohup.out ตรวจสอบหน้าคู่มือnohup(1)สำหรับข้อมูลเพิ่มเติม


กระบวนการทำงานอยู่ใช้งานได้สำหรับกระบวนการนั้นหรือไม่ฉันกำลังถามเพราะกระบวนการอยู่ตรงกลางและฉันไม่ต้องการเริ่มต้นใหม่ตอนนี้หรือไม่

สายเกินไป ... อย่างน้อยสำหรับการทำงานปกติ ไม่น่าแปลกใจเลยที่จะพบว่าถ้าคุณแนบตัวดีบักเกอร์กับกระบวนการและจากนั้นปรับแต่งมันด้วยชุดการเรียกของระบบที่เหมาะสมบางทีคุณอาจวางไว้ในพื้นหลัง แต่มันก็ไม่ใช่สิ่งที่จะแนะนำ - ฉันจะไม่รบกวนเช่นกันและอย่างน้อยฉันก็มีความคิดเกี่ยวกับสิ่งที่อาจเกี่ยวข้อง คุณมีสองตัวเลือกในขณะนี้ ... เชื่อมต่ออย่างต่อเนื่องจนกว่าจะเสร็จสิ้นหรือหยุดกระบวนการปัจจุบันและเริ่มต้นใหม่โดยใช้ nohup
Jonathan Leffler

1
หากคุณกำลังใช้ bash (และฉันคิดว่า zsh) คุณสามารถใช้วิธีการแก้ปัญหาของ Tom Anderson และdisownกระบวนการเพื่อให้ทำงานต่อไปแม้ว่าคุณจะยกเลิกการเชื่อมต่อ
Noufal Ibrahim

Yup - disown ดูเหมือนจะเป็นหนทางที่จะไปทำงานที่กำลังดำเนินอยู่ เป็นไปได้เพราะเชลล์ที่เริ่มงานสามารถจัดการคุณสมบัติที่ต้องการได้
Jonathan Leffler

5

nohup "processname" &กระบวนการเริ่มต้นด้วย นอกจากนี้คุณยังสามารถถอดมันด้วยหรือscreentmux


3

วิธีแก้ปัญหาข้างต้นค่อนข้างอธิบายได้ดี แต่ไม่มีวิธีใดที่ทำงานได้สำหรับฉันจนกว่าฉันจะแก้ไขการกำหนดค่า PuTTY ไปที่:

เปิดใช้งาน Keepalives TCP (ตัวเลือก SO_KEEPALIVE)

ฉันไม่เห็นสิ่งนี้ในที่อื่นและเพิ่งค้นพบโดยการลองผิดลองถูก


1

Ctrl + z ส่งกระบวนการปัจจุบันไปยังพื้นหลัง

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


3
โดยปกติ control-z จะทำให้กระบวนการอยู่ในสถานะของภาพเคลื่อนไหวที่ถูกระงับ คำสั่ง bg วางไว้ในพื้นหลัง อย่างไรก็ตามนั่นยังช่วยให้กระบวนการเชื่อมต่อกับเทอร์มินัลในขณะที่ nohup แยกออกจากเทอร์มินัลดังนั้นจึงช่วยให้ฉาบเพื่อตัดการเชื่อมต่อและกระบวนการเพื่อความอยู่รอดของการขาดการเชื่อมต่อ
Jonathan Leffler

ฉันพบว่าการใช้ '&' เพื่อส่งไปยังพื้นหลังทำงานได้กับผงสำหรับอุดรู แต่เมื่อฉันเชื่อมต่อการใช้ ssh โดยตรงจากเชลล์ถ้าฉันปิดการเชื่อมโยงกระบวนการพื้นหลังจะถูกฆ่า ความคิดใด ๆ ว่าทำไม?
Zardoz89

0

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

แน่นอนว่าเป็นทางออกระยะยาวไม่ใช่สำหรับกระบวนการที่กำลังดำเนินอยู่ในปัจจุบัน


0

คุณสามารถใช้&หลังจากลิงค์

ตัวอย่าง:

[localhost ~ ]# wget http://www.link.com/download/download.zip &

คำถามไม่ได้เกี่ยวกับลิงค์คุณหมายถึงเพิ่ม&เครื่องหมายหลังบรรทัดคำสั่งหรือไม่
Danny

0

วิธีทำให้ weblogic ทำงานหลังจากปิดหน้าต่าง putty:

ขั้นตอนง่าย ๆ : หลังจากเข้าสู่ระบบผ่านผงสำหรับอุดรูทำตามขั้นตอนด้านล่าง:

  1. ไปที่ไดเรกทอรีบนเซิร์ฟเวอร์ที่มีstartWebLogic.shคำสั่งอยู่
  2. พิมพ์คำสั่งscreenแล้วกดEnter(หน้าจอใหม่จะเปิดขึ้น)
  3. ./startWebLogic.shในหน้าจอใหม่พิมพ์คำสั่งการทำงานของคุณ
  4. กดCtrl+ aจากนั้นกดd(โดยไม่ต้องถือCtrl); คุณจะกลับไปที่หน้าจอก่อนหน้า
  5. screen -rเมื่อคุณต้องการที่จะกลับไปยังหน้าจอเข้าสู่ระบบเซิร์ฟเวอร์ของคุณพิมพ์คำสั่ง

0

หากกระบวนการนี้ใช้สำหรับ nodejs และอาจเป็นความตั้งใจของคุณเนื่องจากคุณโพสต์สิ่งนี้ไว้บน stackoverflow เดิมฉันค้นหาคำถามนี้ด้วยตัวเอง ฉันพบว่า pm2 และมันวิเศษมาก คำตอบอื่น ๆ อาจช่วยในการฉาบทั่วไป แต่ถ้ามันเป็นโหนดที่เฉพาะเจาะจงนี่คือคำตอบที่ดีที่สุดเพราะมีการตรวจสอบในตัวและการตั้งค่าเป็นเพียง

$ npm install pm2 -g
$ cd yourappdirectory

"PM2 เป็นผู้จัดการกระบวนการผลิตสำหรับแอปพลิเคชัน Node.js ที่มี load balancer ในตัวซึ่งจะช่วยให้คุณสามารถใช้งานแอปพลิเคชันได้ตลอดไปเพื่อโหลดซ้ำโดยไม่ต้องหยุดทำงานและอำนวยความสะดวกในการดูแลระบบทั่วไป

การเริ่มแอปพลิเคชันในโหมดการผลิตนั้นง่ายเหมือน: "

$ pm2 start yourappname.js

"การใช้คำสั่งบันทึกแล้วค้างคุณเปิดใช้งานกระบวนการเพื่อเริ่มอัตโนมัติเมื่อรีบูต"

$ pm2 save
$ pm2 freeze

สำหรับการตรวจสอบ

$ pm2 monit

และเริ่มใหม่

$ pm2 restart yourappname

สำหรับข้อมูลการเข้าสู่ระบบโดยตรง

$ pm2 logs

ตอนนี้ฉันสามารถเรียกใช้สองหน้าต่างฉาบแทนการใช้หน้าต่างเบราว์เซอร์ digialocean ของฉัน (ซึ่งฉันไม่สามารถเลื่อนขึ้นบน); สำหรับข้อมูลเพิ่มเติมโปรดดู GitHub หลัก

https://github.com/Unitech/pm2

มันน่าทึ่ง.


คุณช่วยอธิบายเพิ่มเติมเล็กน้อยเกี่ยวกับ pm2 คืออะไรและคำสั่งที่คุณแสดงทำอะไรได้บ้าง กรุณาอย่าตอบในความคิดเห็น; แก้ไข  คำตอบของคุณเพื่อให้ชัดเจนและสมบูรณ์ยิ่งขึ้น
G-Man กล่าวว่า 'Reinstate Monica'

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