nohupでバックグラウンドジョブ化したコマンドの終了時間を標準出力でファイルに書き出す

コマンドの実行時間を計測する際によく使用されるtimeコマンドだが、これはbashの組み込みコマンドのため、外部ファイルへの書き出しができない。

こうなると、nohupなどでコマンドの実行時間をログに記録させて放置したくても、ファイルに書き出せないため放置することが難しくなる。
そんな時は、bashの組み込みコマンドとしてのtimeではなく、GNU timeを利用するといいだろう。

GNU timeは、それぞれのディストリビューションのパッケージ管理ソフトからインストールする。

Debian/Ubuntuの場合

apt-get install time

RHEL系の場合

yum install time

後は、以下のようにコマンドを実行する事でコマンドの実行時間を計測、その内容をログに書き出す事ができる。

/usr/bin/time -ao 計測時間を出力するファイル 実行するコマンド

[root@test-centos7 ~]# time cp -fv aaa bbb1 > time

real    0m0.005s
user    0m0.002s
sys     0m0.003s
[root@test-centos7 ~]# cat time
`aaa' -> `bbb1'
[root@test-centos7 ~]# /usr/bin/time -ao time cp -fv aaa bbb2 > time
[root@test-centos7 ~]# cat time
`aaa' -> `bbb2'
0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 1172maxresident)k
0inputs+8outputs (0major+351minor)pagefaults 0swaps

「elapsed」という箇所が実行に要した時間となる。