8

私はこのスクリプトを持っています:

#!/bin/sh
while [ true ] ; do
    urlfile=$( ls /root/wget/wget-download-link.txt | head -n 1 )
    dir=$( cat /root/wget/wget-dir.txt )
    if [ "$urlfile" = "" ] ; then
        sleep 30
        continue
    fi

    url=$( head -n 1 $urlfile )
    if [ "$url" = "" ] ; then
        mv $urlfile $urlfile.invalid
        continue
    fi

    mv $urlfile $urlfile.busy
    wget -b $url -P $dir -o /www/wget.log -c -t 100 -nc
    mv $urlfile.busy $urlfile.done
done

wget-download-link.txtスクリプトは基本的に 30 秒ごとに新しい URL をチェックし、新しい URLがある場合は wget でダウンロードします。問題は、このスクリプトをパテでこのように実行しようとすると

/root/wget/wget_download.sh --daemon

まだフォアグラウンドで実行されていますが、端末の出力はまだ表示されています。バックグラウンドで実行するにはどうすればよいですか?

4

9 に答える 9

14

OpenWRTでは、デフォルトでは利用nohupも利用もできないため、組み込みコマンドのみを使用する解決策は、ブラケットでサブシェルを開始し、それをバックグラウンドに配置することです。screen&

(/root/wget/wget_download.sh >/dev/null 2>&1 )&

たとえば、デスクトップでこの構造を簡単にテストできます

(notify-send one && sleep 15 && notify-send two)&

...そして、15 秒が経過する前にコンソールを閉じると、コンソールを閉じた後も括弧内のコマンドが実行を継続することがわかります。

于 2016-10-02T21:49:04.033 に答える
2

次のコマンドも機能します。

((/root/wget/wget_download.sh)&)&

この方法では、OpenWrt に使用されるルーターの狭いメモリ空間に「nohub」コマンドをインストールする必要はありません。

これは数年前にどこかで見つけました。できます。

于 2015-10-17T21:21:33.437 に答える
1

スクリプトからの出力が表示される場合は、スクリプトの&最後で十分なはずです。それは、stdoutand/orstderrが閉じられていないか、リダイレクトされていないことを意味します。/dev/null

この回答を使用できます:

すべての出力を /dev/null にリダイレクトする方法

于 2014-12-24T10:03:48.903 に答える
0

使用できますnohup

nohup yourscript.sh

また

nohup yourscript.sh &

パテ セッションを閉じてもスクリプトは実行され続け、すべての出力は同じディレクトリのテキスト ファイルに書き込まれます。

nohup は、より低い優先度でプロセスを実行するために、nice コマンドと組み合わせて使用​​されることがよくあります。

nohup nice yourscript.sh &

参照: http://en.wikipedia.org/wiki/Nohup

于 2014-12-24T09:49:06.467 に答える