質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

3回答

2064閲覧

1時間に1回、特定のサーバーにアクセス内のファイルを監視し、ファイルが更新されていない場合通知を出すようなシェルスクリプトは実装可能でしょうか?

kinoshitaaa

総合スコア11

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2018/03/06 05:03

編集2018/03/06 05:08

調べていると、ファイルが変更されたことを検知するようなパッケージは存在するのですが、表題のような、ファイルが変更されなかったことを検知するようなパッケージが存在しません。
http://blog.glidenote.com/blog/2012/08/02/incron/

そのため、やり方を調べていたところ、シェルスクリプトで実行すると、できるといったことを知りました。

llコマンド など打った時に取得できる時間などを保存?し、1時間前と比較もしくは、llコマンド実行の時間帯が、実行日時から1時間以上差が出ている場合に、通知を出すといったことを実現したいと考えております。

通知部分はSlack通知を考えており、curlコマンドを叩くことでslackに通知がいけることは確認できました。

ただ、ファイル監視部分のシェルスクリプトの実装方法が理解できずに困っております。
1時間に1回というのはcronで実行する予定です。

尚、監視対象のファイルは、約5分に1度ぐらいの頻度で更新されます。
アプリケーション側でのエラー通知を捕捉して通知を出すのが理想かと思いますが、今回要件上、そういったことができず、ログ監視という形にて対応することになりました。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2018/03/06 05:15

更新がなくても常にファイルが上書きされるのでしょうか?更新がなければ上書きしないような仕組みならmtimeなどを見るだけで済みそうですが
kinoshitaaa

2018/03/06 05:20

ありがとうございます。更新がない限りはファイルが上書きされません。mtimeというのは始めて知りましたので、調べました。1時間以内の検知ですと、次のように実行するという理解で宜しいですよね? find /path/to/file -mtime -0.1
kinoshitaaa

2018/03/06 05:22

また、上記コマンドを実行した際に、その結果がNULLかどうかを判定したいのですが、こういったこともシェルスクリプト内に実行することは可能なんでしょうか?前提知識が少ない中恐縮です。
guest

回答3

0

ベストアンサー

linuxでしょうか?ファイルの更新時刻はfindコマンドで確認できます。

find file -mmin +60

60分以上更新されていなければこのfindコマンドがファイル名を出力します。
なのでfindの出力が空かどうかを確認すればいいでしょう。

if [ -n "`find FILE -mtime +60 -print'" ] ;then 更新されてない場合の処理 fi

これでいけるはず。

投稿2018/03/06 06:01

a_saitoh

総合スコア702

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

なにを持ってファイルが更新を判断するのか、というのを決める必要があります
・ファイル更新時間が変化
・ファイルサイズが変化
・ファイル内容が変化
それによって監視方法が変わりますね

投稿2018/03/06 05:58

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

概ねそれで良いと思いますが、時刻の取り方の部分が分からないのでしょうか?
date -r ファイル名 +%sで、そのファイルの更新時刻の1970-01-01 00:00からの通算秒が得られるので、date +%sで得られる現在の通算秒と引き算すればいいかと思います。

Bash

1NOW=`date +%s` 2UPDATE=`date -r ファイル名 +%s` 3let DIFF=NOW-UPDATE 4if [ $DIFF -gt 600 ] 5then echo 10分以上前 6fi

投稿2018/03/06 05:23

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問