1232989740 syslog.conf から シェルスクリプトを起動させる方法を教えてください。


syslog.conf を下記のように設定したのですが、シェルスクリプトを起動させられません。
解決策をおもいつく方がいましたら、ご教授いただけると幸いです。

(1)OS
Ubuntu 8.10

(2)syslog.conf
syslog.confに、下記の行を加えました。
$cat /etc/syslog.conf
...
*.=info |sh /home/user/mail.sh # 実行されない。
mail.err |sh /home/user/mail.sh # 実行されない。
mail.warning |sh /home/user/mail.sh # 実行されない。
mail.* |sh /home/user/mail.sh # 実行されない。
mail.info /home/user/test.log # test.log に、書き込まれる。

(3)作成したシェル
ちなみに /home/user/mail.sh は下記のようになっています。
メールサーバと作成したシェルは、正常に動作することを確認しております。
$cat /home/user/mail.sh
#!/bin/sh
cat <<END |mail -s "You got a log." user@localhost
This is a test mail.
END

(4)権限
また、権限はつぎのようになっています。
$ ls -l mail.sh
-rwxrwxrwx 1 user users 359 2009-01-26 17:27 mail.sh

(5)あがいたこと
いちおう、下記の設定も試しましたが、どうもうまくいきません。
*.=info |head -c 10 |sh /home/user/mail.sh

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2009/01/27 19:43:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:JULY No.2

回答回数966ベストアンサー獲得回数247

ポイント80pt

標準の syslogd では YasudaS さんがおっしゃる通りで、パイプを使ったもう少し具体的な方法が下記のページに書かれています。

syslogd でパイプを使ってみる - マミ's ページ

この方も、「|」の後ろに直接プログラムを書いたら失敗して、パイプファイルを作って...、という経緯が書かれています。

標準の syslogd の代わりに syslog-ng を使えば、直接的に外部プログラムを呼び出すことが可能になっているようです。ただ、設定ファイルの書式がガラッと変わるので、チャレンジする余裕があれば、ですが(^^;

マクロやテンプレでsyslog-ngを使い倒す(2/3) − @IT

syslog-ngの導入

id:shotaroh5663

なるほど、syslog-ng を使うとプログラムを呼び出せるわけですね。

エラーログを検知すると、メールを送信する"設定"をしたかったのですが、

おかげ様で、その設定もsyslog-ngでないと無理らしいことがわかりました。

http://www.atmarkit.co.jp/fsecurity/rensai/unix_sec09/unix_sec01...

もともと、syslogdに詳しいわけではないので、syslog-ngに挑戦してみようと思います。

ご回答ありがとうございました。

2009/01/27 19:41:55

その他の回答1件)

id:YasudaS No.1

回答回数351ベストアンサー獲得回数5

ポイント40pt

シェルを起動する機能は、syslog.confには、ありません。

ちょっとトリッキーですが、パイプファイルへの出力を行う様にsyslog.confを書き直して、

そのパイプファイルを読み込んで稼働する様なプロセスを別建てにするとよいでしょう。

syslog.confの"|"は、名前付きパイプへの出力であって、

シェルにある様なパイプでプロセスを起動するという意味ではありません。

http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20030630/1/

id:shotaroh5663

とんだ勘違いをしていたわけですね。

ご回答ありがとうございます。

2009/01/27 19:41:52
id:JULY No.2

回答回数966ベストアンサー獲得回数247ここでベストアンサー

ポイント80pt

標準の syslogd では YasudaS さんがおっしゃる通りで、パイプを使ったもう少し具体的な方法が下記のページに書かれています。

syslogd でパイプを使ってみる - マミ's ページ

この方も、「|」の後ろに直接プログラムを書いたら失敗して、パイプファイルを作って...、という経緯が書かれています。

標準の syslogd の代わりに syslog-ng を使えば、直接的に外部プログラムを呼び出すことが可能になっているようです。ただ、設定ファイルの書式がガラッと変わるので、チャレンジする余裕があれば、ですが(^^;

マクロやテンプレでsyslog-ngを使い倒す(2/3) − @IT

syslog-ngの導入

id:shotaroh5663

なるほど、syslog-ng を使うとプログラムを呼び出せるわけですね。

エラーログを検知すると、メールを送信する"設定"をしたかったのですが、

おかげ様で、その設定もsyslog-ngでないと無理らしいことがわかりました。

http://www.atmarkit.co.jp/fsecurity/rensai/unix_sec09/unix_sec01...

もともと、syslogdに詳しいわけではないので、syslog-ngに挑戦してみようと思います。

ご回答ありがとうございました。

2009/01/27 19:41:55

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません