daybreaksnow's diary

私を私と呼びたい

[Linux]cronで定期的にtopを実行

CentOS6.4

cronを使って定期的にtopを実行してサーバ負荷を調べるようにした。

1.cronが起動しているか確認(cron daemon)

 ps -ef | grep crond

2.ユーザhogeのcron編集

 crontab -e -u hoge

編集内容

 MAILTO=''
 #5分ごとにtopの結果をtop_yyyymmdd_HHMM.logに出力
 #`(Shift + @)で囲った文字列はコマンドとして認識される
 */5 * * * * top -n 1 -bc > /home/hoge/cronlog/top_`date +\%y\%m\%d`_`date +\%H\%M`.log

3.起動の確認

 less /var/log/cron

上記で定期的にtopの結果を出力することができたが、プロセス名の右端が切れてしまっていた。ターミナルのデフォルトの幅以上の文字は切り捨てられてしまうようだ。

ターミナルでつないでいる時ならば、幅はstty -aで見れる。
例:

speed 9600 baud; rows 27; columns 114; line = 0;

また、以下のコマンドで幅を変更できる。

stty columns 120

しかし、ssty columnsとtopを実行するシェルを作り、cronで動かしても出力単位は変わらなかった。
そのため、topと同時にps -efの結果も出力するようにして対応した。