nohup: ละเว้นอินพุตและเปลี่ยนทิศทาง stderr ไปที่ stdout


19

ฉันเริ่มต้นแอปพลิเคชันของฉันในพื้นหลังโดยใช้nohupตามที่ระบุไว้ด้านล่าง -

root@phx5qa01c:/bezook# nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out &
[1] 30781
root@phx5qa01c:/bezook# nohup: ignoring input and redirecting stderr to stdout

แต่ทุกครั้งที่ฉันเห็นข้อความนี้ -

nohup: ignoring input and redirecting stderr to stdout

จะมีปัญหาใด ๆ หรือไม่หากฉันเห็นข้อความนี้ มันหมายถึงอะไรและฉันจะหลีกเลี่ยงได้อย่างไร


2
คุณลองแล้วหรือยัง:nohup java -jar blaa bla >/tmp/test.out 2>&1 &
Rahul Patil

แทนที่จะใช้/tmp/test.outฉันสามารถใช้งานexhibitor.outได้ ขออภัยที่ถามคำถามโง่ที่ผมรักใหม่กับสิ่งเหล่านี้ ..
คลังแสง

ใช่ .. คุณสามารถใช้ .. นั่นเป็นเพียงข้อผิดพลาดมาตรฐาน / ไฟล์ที่ส่งออก แต่สถานะหลังจากเพิ่ม2>&1คืออะไร?
ราหุลปาติล

คำตอบ:


20

เพื่อให้แน่ใจว่าแอปพลิเคชันของคุณถูกยกเลิกการเชื่อมโยงจากเทอร์มินัล - เพื่อไม่ให้รบกวนคำสั่งเบื้องหน้าและจะทำงานต่อไปหลังจากที่คุณออกจากระบบ - nohupรับรองว่า stdin หรือ stdout หรือ stderr ไม่เหมือนอุปกรณ์ปลายทาง เอกสารอธิบายถึงสิ่งที่มันจะใช้เวลาดำเนินการ:

หากเอาต์พุตมาตรฐานเป็นเทอร์มินัลเอาต์พุตทั้งหมดที่เขียนโดยยูทิลิตี้ที่ระบุชื่อไปยังเอาต์พุตมาตรฐานจะถูกผนวกเข้ากับท้ายไฟล์ nohup.out ในไดเรกทอรีปัจจุบัน หาก nohup.out ไม่สามารถสร้างหรือเปิดเพื่อผนวกเอาต์พุตจะถูกต่อท้ายไฟล์ nohup.out ในไดเร็กทอรีที่ระบุโดยตัวแปรสภาวะแวดล้อม HOME หากไม่สามารถสร้างหรือเปิดไฟล์เพื่อต่อท้ายยูทิลิตี้จะไม่ถูกเรียกใช้

หากข้อผิดพลาดมาตรฐานเป็นเทอร์มินัลเอาต์พุตทั้งหมดที่เขียนโดยยูทิลิตี้ที่ระบุชื่อไปยังข้อผิดพลาดมาตรฐานจะถูกเปลี่ยนเส้นทางไปยังไฟล์ descriptor เดียวกันกับเอาต์พุตมาตรฐาน

คุณเปลี่ยนเส้นทาง stdout ไปยังไฟล์เมื่อคุณพิมพ์> exhibitor.outในบรรทัดคำสั่งของคุณ หากคุณตกลงกับ stderr ของแอปพลิเคชันของคุณจะถูกนำไปยังไฟล์เดียวกันกับ stdout คุณไม่จำเป็นต้องทำอะไรอีก หรือคุณสามารถเปลี่ยนเส้นทาง stderr 2> exhibitor.errไปยังไฟล์ที่แตกต่างกันโดยการเพิ่มการโต้แย้งเช่น (ขอบคุณผู้ใช้ที่ไม่รู้จัก - การแจ้งเตือนของฉันไม่แสดงชื่อ - สำหรับการแนะนำการรวมตัวเลือกนี้)


2
นอกจากนี้ยังมีประโยชน์ในการปิดอินพุต fd ด้วยตนเองเช่น: </dev/null; Linux จะทำสิ่งนี้โดยอัตโนมัติ แต่ถ้าไม่ทำเองคุณจะยังคงได้บรรทัดในเอาต์พุตของ nohup ที่อ่าน:nohup: ignoring input
wulfgarpro

17

คุณสามารถกำจัดข้อความหากคุณเปลี่ยนเส้นทางข้อผิดพลาด std ไปยังเอาต์พุต std:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1 &

4

ในสถานการณ์ของฉันฉันเปลี่ยนเส้นทาง stdout และ stderr แต่มันยังแสดงดังต่อไปนี้ในล็อกไฟล์:

nohup: ignoring input

หากต้องการลบคำเตือนนั้นคุณต้องเปลี่ยนเส้นทาง stdin ดังนี้:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1  </dev/null &

ฉันตอบคำตอบนี้ช้าไปแล้วสำหรับคุณ แต่อาจช่วยคนอื่นได้

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