アフィリエイト広告を利用しています
検索
<< 2024年11月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最新記事
タグクラウド
カテゴリーアーカイブ
ファン
最新コメント
プロフィール
ゼロから始めるシステム開発さんの画像
ゼロから始めるシステム開発
 こんにちは!ナビゲータのEVEです。各種研究室を用意し、次期EVEシステムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。
プロフィール

2023年01月22日

バッチ処理解説 [ソフトウェア研究室]


 こんにちは!
 ナビゲータのEVEです。

 本日は、昨日作成したバッチファイルの解説をします。

[昨日作ったバッチファイル]


#シェルプログラムの所在を記述
@#!/usr/bin/bash
#ClamAV実行
Aclamscan / \
# 1)感染を検出したファイルのみを結果に出力
--infected \
#2)指定したディレクトリ配下全てを検査対象とする
--recursive \
#3)ログファイルを指定します
--log=/var/log/clamav/`date +%Y%m%d%H%M`.log \
#4)ウイルスに感染したファイルの隔離先を指定します
--move=/var/log/clamav/virus \
#5)検査除外ディレクトリを指定します
--exclude-dir=/var/log/clamav/virus \
#日付を取得します
Bw_date=`date +%Y%m%d%H%M`
#処理が正常に終了したかどうか判定を行います
Cif [ $? = 0 ]; then
#1)正常系
w_title='VirusCheckResultSuccessful'
w_content=' Virus Check Successful'
 else
#2)異常系
w_title='VirusCheckResultError'
w_content=' Virus Check Error.You must check your server now!'
 fi
#メールを送信
Decho ${w_date}$w_content | mail -s $w_title -r
   [送信元メールアドレス(from)] [送信先メールアドレス(to)]



 昨日ブログアップロード後bashへシェルを変更しています。shのプログラムの所在が不明だったためです。

[バッチプログラムの解説]
 @はシェルプログラムの所在先を記述します。なお、ここではbashのパスを指定していますが、ウイルス検査時にbashではなく、sh [実行ファイル・パス]で実行することも可能です。コメントとして記述しているので、バッチ処理を作成するときの呪文的なモノなのかもしれません???

 Aで、ClamAVを実行しています。「/」と記述しているのは検査をルートディレクトリを起点としたいためです。「--recursive」のオプションをつけないと、ルートディレクトリに配置されているファイルのみの検査しか行いません。また、各行に\マークが記述されてますが、この記述がないとエラーになります。円マークを付けない場合は、改行せずにオプションを列記します。

 1)「--infected」を指定すると、感染を検出したファイルのみを結果に出力します。
 2)「--recursive」を指定すると、指定したディレクトリ配下の全てのファイルを検査対象とします。この場合は、ルートディレクトリ配下すべてのファイルを対象としています。
 3)「--log」では、ログファイルの出力先を指定します。ここでは、日時で結果を管理しています。なお、正常の場合空ファイルが作成されます。
 4)ウイルスに感染したファイルの隔離先を指定します。A1)「--infected」を指定せず、ウイルスが検知されない場合、空ファイルが作成されます。
 5)「--exclude」は、検査の除外パスを指定します。ここでは、ウイルスの隔離先を除外しています。

 B日付を変数として取得しています。昨日、ここでバッククォートをつけていなくて、時間を要しました。実は最初シングルクォーテーションでシェルを記述していました。

 Cここで実行結果を確認しています。正常の場合は1)のロジックに入り、異常の場合は2)のロジックに入ります。それぞれのロジックで、メールのタイトルと内容を作成しています。メールのタイトルは、スペースをつけずに記述しています。スペースを含めると、同スペースで区切られ、その文字が送り先として指定されます。

 Dでは、今までの結果をメールで送信しています。日付を利用する場合、円マークと波カッコは忘れないよにしてください。
 対応としては、ウイルスに感染したといった内容のメールが届いた場合、サーバをアクセスできないようにするなどの対応を取ることになります。

[解説を終えて] 
 たった20行足らずのプログラムに3〜4時間の時間を費やしました。特にif文です。普段使いのプログラムならどこがどういけないのかすぐに分かるのですが、久しぶりのバッチ処理は、どこが違うのか分からないので、プログラムに目に見えないコードが含まれているのでは?と言う結論に至るまで時間がかかってしまいました。
 通常バッチ処理は、phpでプログラムを製造し、crontabから実行しています。ただ、OSに近いコマンドはphpから実行するのは問題がある場合があるので、セキュリティを考慮した上で、シェルから実行するコトが多くなることがあるかもしれません。
 今書いていて思い出しましたが、PowerShellが今後多く使われる気がしています。Linuxだけでなく、Windows両OSで変更することなく使えると聞いています。Windowsで作った資産をLinuxにもってきて、変更せずに利用できるのは、非常に魅力的です。余談ですが、機会がありましたら、取りあげます。

 では、また!

追伸(2023年1月23日)・・・
 このブログで、logファイルは空という記述になっていますが、実際には、ClamAV実行内容が入っていました。

《参考サイト》
■【Ubuntu 20.04/18.04 LTS Server】ClamAVで定期的にウイルスチェックし、メール通知する
https://www.yokoweb.net/2017/04/15/ubuntu-server-clamav/

■シェルスクリプトに挑戦しよう(4)変数の定義と参照
https://atmarkit.itmedia.co.jp/ait/articles/1810/03/news001.html

■日時をファイル名に付けるには(@IT)
https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/240datefilename.html

■バッチファイルからメールを送信する
https://qiita.com/shuntaro_tamura/items/40a7d9b4400f31ec0923

この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/11828075
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック