- PR -

bashを使用してのシェル作成方法について

1
投稿者投稿内容
よし
会議室デビュー日: 2007/01/06
投稿数: 10
投稿日時: 2007-02-10 17:58
はじめまして。

以下の方法を行いたいのですが方法が分からないので教えて下さい。

cron を使用して、/var/log/messagesより、cronが実行した時間帯に該当する
特定の文字が存在しているか確認し、存在している場合は再起動する処理を行
いたいのですが、作成方法が分からない状態です。

また、以下の方法を考えましたが

grep 'high speed USB device using ehci_hcd' messages

上記内容を実行すると、'high speed USB device using ehci_hcd' に関する内容が
全て検索するようになりました。

また、以下の方法を行うと時間まで取得できますが、cronが実行した時間で
検索する方法が分からない状態です。

grep 'high speed USB device using ehci_hcd' messages | awk '{print $3}'

シェルを作成するのが始めてなのですが良い方法とかありますでしょうか。

ご教授お願い致します。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-02-10 23:10
こんばんは。
うーん…。正直なところ、初めてシェルスクリプトを組むのであれば、これは荷が重いと思いますが。
シェルスクリプトでも組めますけど、Perl なりのスクリプトや、C なりで組んだ方が楽ができるというのもありますが、制御は思った以上にややこしい。

何より、「cronを使用して」という前提から始めているのがどうかと。
楽なのは、定期的なログ走査ではなく、リアルタイムのログ監視でしょう。
syslogd には、/var/log/message だけではなく、名前つきパイプにログを出力してもらい、独自のデーモンプロセスを常駐させておいて、名前つきパイプから逐次ログを読み出し、中身によって処理を判断する。
syslogd から名前つきパイプを使用する方法については、syslogd(8)を。
名前つきパイプについては、fifo(4)や、mkfifo(1)を。

デーモンプロセスといっても、特別なことをするわけではなく、init(8)に常時プログラムを起動させておくよう、inittab(5)を書くだけ。
そのプログラムは、名前つきパイプを1行ずつ読み込んで内容を判断する、シンプルなものでいけるでしょう。
シェルスクリプトなら while read 変数名; do 〜 done < 名前つきパイプ で、十分組めますし。この辺は、bash(1)を一通り見てください。
よし
会議室デビュー日: 2007/01/06
投稿数: 10
投稿日時: 2007-02-11 11:32
angel さん ご回答ありがとうございます。

本当に制御系は難しいですね。

angel さんが回答して頂いた内容で色々と検討したいと思います。

1

スキルアップ/キャリアアップ(JOB@IT)