2017-04-25 24 views
0
if [ "$EUID" -ne 0 ] 
    then 
    echo '' 
    echo 'Please run the script as root' 
    echo '' 
    exit 
fi 

for run in {1..11} 
do 
    echo '' 
    echo $run'th running...'  

    echo 'Starting tst script...' 
    echo '' 
    timeout 30 sudo ./tst.sh <-----XXXXXX 

    # Call next script 
    echo '' 
    echo 'Sending data...' 

    for run in {1..10} 
    do # run 10 times 
     sudo /home/ubuntu/Desktop/data/data <----- data.sh   
    done 

    echo '' 
    echo 'restarting script..." 

done 

問題は、tst.shを起動して30秒後に停止したいということです。 'タイムアウト30'は良い解決策ですが、次の行は実行されません。 tst.shの実行後に停止できるように、また次の行を実行するために、この問題をどのように修正できますか?「タイムアウト」をどのように置き換えることができますか?

ありがとうございました。

+0

あなたは、バックグラウンド・プロセスとして 'tst.sh'を実行するために探していますか? –

+0

Btw:二重引用符を一重引用符で置き換えます。 – Cyrus

+0

このサイトで 'bash timeout'を検索してください。 – Harvey

答えて

0

timeout 30が良い解決策であると私は困惑します。私は、必要最小限にスクリプトをダウンストリップ

echo hop 
timeout 2 sudo sleep 20 
echo plop 

time bash test.shでそれを実行した場合、私は得る:つまり

hop 
plop 

real 0m20.039s 
user 0m0.012s 
sys  0m0.025s 

を、timeout後の行が実行されます(あなたが何であるかに反し体験中)、sleep 20は2秒後に殺されません。

とにかく、別の解決策は次のようになります。

sudo ./tst.sh & 
pid=$! 
sleep 30 
kill $pid 
+0

ありがとうございます。しかし、今私は次の問題があります。私はすべての行が既に実行されているときだけ、tst.shを殺したい。だから、エコー "スクリプトを再起動して..."の行の後に申し訳ありませんが、私はあなたにプロセスの殺害について間違った情報を与えました。私はあなたが私が必要とするものを理解してくれることを願っています –

+0

基本的に、 'kill $ pid 'あなたのスクリプトのどこにでも置くことができます。' pid = $! 'が' sudo。/ tst.sh'の起動直後であることを確認してください。 –

関連する問題