Chuyển hướng nohup sang thiết bị xuất chuẩn


14

Có thể để một quá trình bắt đầu với nohup, ghi vào thiết bị xuất chuẩn thay vì trong một tệp? hoặc có thể trong tập tin và trên màn hình?

nohup python start.py &

ghi vào nohup.out, nhưng tôi muốn nó xuất ra màn hình, nohup chỉ có ý nghĩa như một hàng rào khi kết nối bị ngắt.


Nhưng điều gì xảy ra khi chương trình của bạn xuất ra sau khi kết nối bị ngắt?
womble

Câu trả lời:


4
  1. nohup python start.py & tail -f nohup.outtail -fthể bị giết và khởi động lại theo ý muốn.

  2. screen python start.py và ngắt kết nối lại theo ý muốn.


10

Từ man nohup:

Nếu đầu vào tiêu chuẩn là một thiết bị đầu cuối, hãy chuyển hướng nó từ / dev / null. Nếu đầu ra tiêu chuẩn là một thiết bị đầu cuối, hãy nối đầu ra vào nohup.out nếu có thể, $HOME/nohup.outnếu không. Nếu lỗi tiêu chuẩn là một thiết bị đầu cuối, chuyển hướng nó đến đầu ra tiêu chuẩn. Để lưu đầu ra vào TẬP_TIN, hãy sử dụng nohup COMMAND > FILE.

(được sửa đổi hoàn toàn dựa trên các nhận xét)
Khi thoát khỏi trình bao hoặc đóng thiết bị đầu cuối, các tiến trình con sẽ được gửi SIGHUP (hangup, tên bắt nguồn từ thời điểm các thiết bị đầu cuối quay số vào máy tính UNIX) để nói với chúng rằng thiết bị đầu cuối không có kết nối lâu hơn. Ngoài ra, khi quá trình shell kết thúc, các luồng stdin, stdout và stderr của tiến trình con sẽ bị đóng. Thông thường điều này làm cho quá trình trẻ em chết. Thông thường đây là một điều tốt vì nó tránh để các tiến trình chạy không có người dùng.

Mục đích của nohupchương trình là giữ cho quá trình chạy ngay cả sau khi shell kết thúc và ngắt kết nối đầu cuối. Như vậy, chỉ đạo đầu ra của nó đến thiết bị đầu cuối hoàn toàn đánh bại mục đích. Câu trả lời ban đầu của tôi ( nohup COMMAND | cat) không hữu ích vì: khi thiết bị đầu cuối bị đóng, đầu ra của mèo bị đóng và do đó mèo chết làm vỡ đường ống và gửi SIGPIPE đến quy trình nohup khiến nó chết. Tôi đã trả lời câu hỏi mà không nghĩ đến mục đích.

Để đạt được mục đích của bạn, hãy chạy nohup COMMAND > FILEđể chọn tên của tệp để xuất trực tiếp. Sau đó sử dụng tail -f FILEđể xem đầu ra trên một thiết bị đầu cuối.

Tương tự, người ta có thể sử dụng cấu trúc shell sau: COMMAND >FILE 2>&1 </dev/null &để chạy một lệnh có luồng stdio không được kết nối với thiết bị đầu cuối và có thể tiếp tục chạy sau khi thiết bị đầu cuối bị đóng. Ngoài ra, trong zsh, hãy chạy shell-dựng disownđể báo cho zsh rời khỏi tiến trình thay vì giết nó khi shell kết thúc.


1
Một bổ sung thú vị: Nếu lệnh nohup đã được bắt đầu với một tên tệp, thì bạn có thể sử dụng tail -f filenameđể xem những gì được ghi vào tệp.
Hennes

Không hoạt động, một khi kết nối dừng tập tin sẽ không được ghi nữa
Davoud Taghawi-Nejad

Bạn nói đúng: Tôi đã trả lời câu hỏi (gửi đầu ra đến thiết bị đầu cuối) nhưng đã đánh bại mục đích. Tôi viết lại câu trả lời của tôi cho phù hợp.
dsh

-1
vladimir@lin-mint-cin:~$ tty<br>
/dev/pts/8<br>
vladimir@lin-mint-cin:~$ ln -sf /dev/pts/8 nohup.out<br>
vladimir@lin-mint-cin:~$ nohup ls<br>
nohup: ввод игнорируется, вывод добавляется в 'nohup.out'<br>
2019-05-31-090159.jpg    giphy.gif        nim_porojects   sketchbook
Aptana_Studio_Workspace  IdeaProjects         nohup.out       target
Desktop          jack_capture_01.wav  Pictures        Templates
Documents        lib              Postman         tmp
Downloads        mad              Projects        trace.edn
eclipse          Mail             prolog_ws       uinfild_hill-iskusstvo_shemotehniki_tom_1_izd4-e-1489315100.pdf
eclipse-dsl-workspace    Music            proxy-secret    Videos
eclipse-workspace    mygolo           Public          workspace-dltk
erlang_ex        my_golo_ws       rust-workspace  проекты
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.