LoginSignup
2
0

More than 1 year has passed since last update.

scriptコマンドでログを自動取得する

Posted at

以前構築したシステムの要件に、操作履歴としてhistoryを保管というものがあったのですが、NW機器にssh接続する要件があり、その作業の操作履歴はhistoryには保存されないため、scriptコマンドで操作ログを取得することにしました。

scriptコマンドは、何もオプションを付けなくてもログを取得できますが、デフォルトではカレントディレクトリにtypescriptというファイル名でログが保存されます。

ただそれでは管理がしにくいので、

script /<保存先>/<ログファイル名>.log

と実行すると、指定のディレクトリへ好きな名前で保存できます。

ログの取得を終了したい場合は、exitコマンド(もしくはCtrl+d)を実行すると、終了することが出来ます。

また、同じ日に再度作業するのであれば、同じログに書き込みたい事もあるかと思いますが、その場合は-aオプションを付けると、同じログに追記することが出来ます。

これで簡単に操作ログを取得することが出来ますが、毎回手動で実行するのは忘れてしまう可能性が高いので、ログイン時に自動的にログが取得できるように設定します。

こちらのサイトを参考にし、要件に合わせて書き換えます。

if [ "$SHLVL" = "2" ] && [ ! -z "$PS1" ] ; then
    [ -d /var/log/history ] || mkdir /var/log/history
    script -af /var/log/history/`whoami`.log
fi

こちらを各ユーザの.bashrcに追記し、保存すれば完了です!

ログインし直してみると、

Script started on /var/log/history/ユーザ名.log

と表示され、ログの取得が始まったことが分かります。

ただ、こちらの設定はloglotateでローテーションすることを前提にしているので、ログローテしない場合はログファイル名に日付などを入れた方が良いです。
(永遠に同じログに書き続けてしまうと思います…)

ちなみにscriptコマンドの-fオプションは、操作内容をファイルに即時反映するもので、こちらを指定しないとexitを実行するタイミングでログが書き込まれるようなのですが、前に実行中のログを確認したら文字化けしていたので、付けなくても良いかもしれません。
ログを確認する場合は、一度exitでログの取得を終了させてから見てください!

また、$SHLVLという変数はシェルの深さを表しているようで、コンソールからログインしていた時は参考にしたサイトと同じように「1」で設定していましたが、
Teratermからssh接続するようになってからは取得ができなくなり、$SHLVLを「2」に変更してみたところ取得できるようになったので、上手くいかない場合は$SHLVLを見直してみてください!

ではまた!:wave:

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0