LoginSignup
1
1

shell scriptでログを出力

Last updated at Posted at 2023-10-04

はじめに

掲題の通り、ログをファイルに出力するshellを作成しました。
また、定期実行するためにcronにも登録してみました。

shell

test.sh
#!/bin/bash

LOG_OUT=./stdout.log
LOG_ERR=./stderr.log

exec 1> >(tee -a $LOG_OUT)
exec 2> >(tee -a $LOG_ERR)

# 標準出力
echo foo1
echo foo2
echo foo3
# 標準エラー出力
ls /foo
rm /foo

簡単に説明していきます。
「echo」:コンソールに出力します。
「ls /foo」:fooのディレクトリに移動。※今回はエラーにするために、わざとディレクトリを作成しません。
「rm /foo」:fooのディレクトリを削除。※今回はエラーにするために、わざとディレクトリを作成しません。
「LOG_OUT=./stdout.log」:変数にファイルの場所を格納しています。
「LOG_ERR=./stderr.log」:変数にファイルの場所を格納しています。
「exec 1> >(tee -a $LOG_OUT)」:shellを実行時に標準出力をコンソールとファイルの両方に出力します。
「exec 2> >(tee -a $LOG_ERR)」:shellを実行時に標準エラーをコンソールとファイルの両方に出力します。

crontab

①「chmod 755 test.sh」で実行権限をshellに付与します。
②「crontab -e」でcronを登録するためにファイルを開きます。
③「*/1**** cd /home && ./test.sh」を入力して「:wq」で保存します。
 ※1分間隔でshellを実行します。cdで移動していますが、各々のパスに合わせてください。

補足

shが実行されるたびに、cronからメールがくる場合があります。
もし、メールを停止させたい場合は以下の対応を行ってください。
①メールを消すshellを作成する。

deletemail.sh
#!/bin/bash

cat /dev/null > /var/spool/mail/root

sleep 2

cat /dev/null > /var/spool/mail/root

sleep 2

cat /dev/null > /var/spool/mail/root

sleep 2

cat /dev/null > /var/spool/mail/root

sleep 2

cat /dev/null > /var/spool/mail/root

sleep 2

cat /dev/null > /var/spool/mail/root

②作成したshellをcrontabに登録する。
 ┗「chmod 755 deletemail.sh」
 ┗「crontab -e」
 ┗「*/1**** cd /home && ./deletemail.sh

※deletemail.shの説明ですが、メールのファイルの内容を2秒間隔でクリアしています。(計6回)
 sleepは指定した時間分、処理を止めてくれます。
 これをcrontabに登録することでメールは飛びますが、即座に消してくれるので、
 メールの通知がコンソール上に表示されなくなります。

1
1
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
1
1