バックグラウンドで実行され、次のコマンドを使用してすべての出力をキャプチャするスクリプトがあります。
nohup bash -x test.sh < /dev/null > log.txt 2>&1 &
完了するまでにどれくらいの時間がかかりますか?time
エラーが発生した後に試してみると、次のようになります。bash -x
/usr/bin/time: /usr/bin/time: cannot execute binary file
使用しようとすると、acct
プロセスが記録されていないか見つからないようです。
答え1
[これはあなたの質問で明確ではないtoの出力time
に移動したいと仮定します。]log.txt
ただ使用しないでくださいnohup
。
nohup
特別な操作を行わずに信号を無視し、stdoutとstderrをファイルにリダイレクトします - GNU coreutilsSIGHUP
などのいくつかのバリエーションでのみ標準入力を開いた場所からリダイレクトします。nohup
/dev/null
ただ書くモデル。
これはすべてシェルで簡単に実行できます。
{ trap '' HUP; time bash -x your_script args ... ; } > log.txt 2>&1 0>/dev/null &
または、より安全にするには、スクリプトから起動したり、コマンドをフォアグラウンドに戻したくない場合は、次のようにしますfg
。
(trap '' HUP; time bash -x your_script args ... 0>/dev/null &) > log.txt 2>&1
0>/dev/null
(GNU nohupのこの機能をエミュレートしたくない場合は省略できます)。
もちろん、理解できない理由でnohupに魔法の属性を与える場合は、nohupを使用して最初の例の構文トリックを使用することもできます。
{ time nohup bash -x your_script args ... ; } > log.txt 2>&1 &
答え2
ちょうどtime
プロセスnohup
:
$ time nohup bash -x ~/scripts/foo.sh
nohup: ignoring input and appending output to 'nohup.out'
real 0m10.011s
user 0m0.005s
sys 0m0.006s
foo.sh
sleep 10
例を挙げると。
答え3
以下を使用できます。
time yourscript.sh
ただし、これがうまくいかない場合は、次のようにスクリプトの内容をラップできます。
STARTTIME=$(date +%s)
#command block that takes time to complete...
ENDTIME=$(date +%s)
echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task..."