2016-08-26 8 views
1

wgetのダウンロードが完了した後、PHPスクリプトを実行したいと思います。それは問題ではありませんし、私は同じようなsometingを使用することができます...wgetのダウンロードが完了した後でスクリプトを実行する(wgetバックグラウンドモード)

wget http://example.com && php script.php 

でも!私はContinuing in background, pid 12345のようなものを返すwget(wget -b)のバックグラウンドダウンロードを使用します。

バックグラウンドでwgetを実行し、ダウンロード後にスクリプトを実行することは可能ですか?コマンドは、他のシェルのセッション(setsid)でサブプロセスを作成する-bオプションでwgetコマンドを使用する場合

は、ツェナー

+0

だけでスクリプトファイルを作成し、(-bなし)、これら2つのコマンドを追加して実行します。

Aditionally、のためのwgetの作業の背景オプション使用すると、Cソースコードを見ることができる方法を理解しますその代わりにスクリプトが順番に読み込まれます。あなたは 'bash script.sh website.com'のようなことをすることができるようにargsを持つことさえできます – Xorifelse

答えて

0

、ありがとうございました。サブプロセスの起動後、元のプロセスは終了します。

サブプロセスは他のシェルセッションで実行されるため、waitコマンドは使用できません。しかし、サブプロセスが実行されているかどうかをチェックするループを書くことができます。サブプロセスのpidが必要です。例によって

:サブプロセスのPIDを取得する

wget -b http://example.com && \ 
(
    PID=`pidof wget | rev | cut -f1 | rev`; 
    while kill -0 $PID 2> /dev/null; do sleep 1; done; 
) && \ 
php script.php & 

もう一つの方法は、wgetコマンドの出力を解析することができます。それに

... 
pid = fork(); 
if (pid < 0) 
{ 
    perror ("fork"); 
    exit (1); 
} 
else if (pid != 0) 
{ 
    printf (_("Continuing in background, pid %d.\n"), (int)pid); 
    if (logfile_changed) 
    printf (_("Output will be written to `%s'.\n"), opt.lfilename); 
    exit (0);   
} 
setsid(); 
freopen ("/dev/null", "r", stdin); 
freopen ("/dev/null", "w", stdout); 
freopen ("/dev/null", "w", stderr); 
... 
関連する問題