だから私は次の行を持つcrontabを持っています:
30 16 * * * (time sysbench --test=cpu --cpu-max-prime=20000 run) 2>> ~/cpu.out
時間出力のデフォルト値はstderrであり、これをファイルにリダイレクトしたいのでこれを使用しています。
端末でコマンドを実行すると、必要な出力が記録されます。
real X.XXXs
user X.XXXs
sys X.XXXs
ただし、cronを使用して実行すると、ファイルに次のものが記録されます。
39.69 user 0.92 system 0:40.67elapsed 99%CPU (0avgtext+0avgdata 1400maxresident)k0inputs+1outputs (0major+450minor) pagefaults 0swaps
誰でも私を助けることができますか?
PS:マニュアルページには-oオプションがありますが機能しません。これを試みるとエラーが発生します。
答え1
これをシェルで実行すると、実際には次のようなbash組み込み関数を使うことになります。
anthony@Zia:~$ time perl -e 'sleep 1'
real 0m1.003s
user 0m0.000s
sys 0m0.004s
Cronは組み込みのbashを使用しません/usr/bin/time
。
anthony@Zia:~$ /usr/bin/time perl -e 'sleep 1'
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 1800maxresident)k
0inputs+0outputs (0major+514minor)pagefaults 0swaps
2番目には、実際にbashに組み込まれているすべての情報などが含まれています。 「実際」を「過去」と表示します。 (これが-o
このオプションが機能しない理由でもあります。組み込みの/usr/bin/time
bashオプションではなくbashオプションです。)
組み込みのbashを使用する必要がある場合は、次の2つを試すことができます。
SHELL=/bin/bash
crontabの上に載せてください。- 明示的に呼び出すようにコマンドを変更します
bash -c "your command here"
。