cronを使用したランタイムコマンド

cronを使用したランタイムコマンド

だから私は次の行を持つ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/timebashオプションではなくbashオプションです。)

組み込みのbashを使用する必要がある場合は、次の2つを試すことができます。

  1. SHELL=/bin/bashcrontabの上に載せてください。
  2. 明示的に呼び出すようにコマンドを変更しますbash -c "your command here"

関連情報