nohupを実行しても、画面に詳細な出力が表示されることは可能ですか?

nohupを実行しても、画面に詳細な出力が表示されることは可能ですか?

私はかなり単純なシェルスクリプトパッチファイルを持っています(基本的に、いくつかのスクリプトとrpmの両方が1つのファイルに含まれています)。うまくいきましたが、予期しない問題が発生しました。 SSHセッションの実行中にユーザーが誤って閉じました。最終結果は、以前のパッケージが削除されないことです。

もともと問題は今解決されましたが、考えられました。 SSHセッションが終了してもスクリプトを実行し続け、SSHセッションを介してユーザーにステータス更新を提供し続ける簡単な方法はありますか?私がそれを使用していなかった元の理由nohupは、それがユーザーに表示したい出力を隠したり抑制したりすると思ったからです。スクリプトの実行時にユーザーがステータスの更新などを確​​認できることを願っています。

答え1

私は次のようにします:

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

tail死なない限り決して終了しませんが、永遠に待つことに注意してください-f

答え2

すでに提案されているように、フラグを使用してファイルを読み続け-fます。もう一つの可能​​性はです 。tailnohup.outnamed 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

関連情報