nohup을 실행했는데도 여전히 화면에 자세한 출력이 표시되는 것이 가능합니까?

nohup을 실행했는데도 여전히 화면에 자세한 출력이 표시되는 것이 가능합니까?

나는 상당히 간단한 쉘 스크립트 패치 파일을 가지고 있습니다(기본적으로 일부 스크립트와 rpm이 모두 하나의 파일에 포함되어 있음). 잘 작동했지만 예상치 못한 문제가 발생했습니다. 사용자가 SSH 세션이 실행되는 동안 실수로 닫았습니다. 최종 결과는 이전 패키지가 제거되지 않는다는 것입니다.

원래 문제는 이제 해결되었지만 생각이 들었습니다. SSH 세션이 종료되더라도 스크립트를 계속 실행하고 SSH 세션을 통해 사용자에게 상태 업데이트를 계속 제공할 수 있는 쉬운 방법이 있습니까? 내가 그것을 사용하지 않은 원래 이유 nohup는 그것이 사용자에게 보여주고 싶은 출력을 숨기거나 억제한다고 생각했기 때문입니다. 스크립트가 실행될 때 사용자가 상태 업데이트 등을 볼 수 있기를 바랍니다.

답변1

나는 다음과 같이 할 것입니다 :

nohup command > command.out 2>&1 & tail -f command.out

tail죽지 않는 이상 절대 종료되지 않지만, 영원히 기다린다는 점을 명심하세요 -f.

답변2

이미 제안한 대로 플래그를 사용하여 파일을 -f계속 tail해서 읽으세요 nohup.out. 또 다른 가능성은 입니다 named pipes.

예:

# make a named pipe first
xieerqi@eagle:~$ mkfifo /tmp/mypipe
# redirect command there
xieerqi@eagle:~$ nohup bash -c "while [  1 ] ; do df > /tmp/mypipe ; sleep 3;done  " &
[1] 14425
xieerqi@eagle:~$ nohup: ignoring input and appending output to ‘nohup.out’

# Now cat the pipe

xieerqi@eagle:~$ cat /tmp/mypipe
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1      115247656 83099216  26271092  76% /
none                   4        0         4   0% /sys/fs/cgroup
udev             2914492        4   2914488   1% /dev
tmpfs             585216     1152    584064   1% /run
none                5120        0      5120   0% /run/lock
none             2926072    98008   2828064   4% /run/shm
none              102400       76    102324   1% /run/user

또 다른 예 - dbus-monitor계속해서 실행하고 named pipe이전 명령의 나머지 출력을 기록해 둡니다. 삭제해야 할 수도 있음echo "" > /tmp/mypipe

xieerqi@eagle:~$ nohup  dbus-monitor  > /tmp/mypipe  &
[1] 14695
xieerqi@eagle:~$ cat /tmp/mypipe 
nohup: ignoring input and redirecting stderr to stdout
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1      115247656 83099512  26270796  76% /
none                   4        0         4   0% /sys/fs/cgroup
udev             2914492        4   2914488   1% /dev
tmpfs             585216     1152    584064   1% /run
none                5120        0      5120   0% /run/lock
none             2926072    98012   2828060   4% /run/shm
none              102400       76    102324   1% /run/user
signal sender=org.freedesktop.DBus -> dest=:1.115 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string ":1.115"
method call sender=:1.115 -> dest=org.freedesktop.DBus serial=3 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
   string "eavesdrop=true,type='method_call'"
method call sender=:1.115 -> dest=org.freedesktop.DBus serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
   string "eavesdrop=true,type='method_return'"
method call sender=:1.115 -> dest=org.freedesktop.DBus serial=5 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
   string "eavesdrop=true,type='error'"
signal sender=org.freedesktop.DBus -> dest=(null destination) serial=99 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string ":1.116"
   string ""
   string ":1.116"

답변3

시작하다화면회의. 대부분의 스크립트는 스크립트가 완료되면 종료되는 Screen 세션에서 실행됩니다. (선택 사항) 스크린 세션이 완료된 후 성공/실패 보고서를 인쇄합니다.

사용자가 (자발적으로 또는 비자발적으로) 연결을 끊으면 스크립트는 방해 없이 계속 실행됩니다. 사용자가 연결을 끊지 않는 한 계속해서 스크립트의 출력을 보고 상호 작용할 수 있습니다(예: Ctrl+ 로 종료 C). 연결이 끊어지면 Screen 세션을 다시 연결하여 다시 연결할 수도 있습니다.

답변4

nohup ls -l

#nohup: ignoring input and appending output to ‘nohup.out’
#total 44
#-rw-r--r-- 1 mikeserv mikeserv 2550 Nov  3 15:03 file
#-rw-r--r-- 1 mikeserv mikeserv   10 Nov 10 06:36 file1.tsv
#-rw-r--r-- 1 mikeserv mikeserv   10 Nov 10 06:36 file1.txt
#-rw-r--r-- 1 mikeserv mikeserv   10 Nov 10 06:36 file2.tsv
#-rw-r--r-- 1 mikeserv mikeserv   10 Nov 10 06:36 file2.txt
#-rw-r--r-- 1 mikeserv mikeserv    5 Nov 11 09:06 filea.xyz
#-rw-r--r-- 1 mikeserv mikeserv    5 Nov 11 09:06 fileb.xyz
 lrwxrwxrwx 1 mikeserv mikeserv    8 Nov 14 19:56 nohup.out -> /dev/tty
#drwxr-xr-x 2 mikeserv mikeserv   80 Nov 13 17:31 one

관련 정보