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
標準の syslogd では YasudaS さんがおっしゃる通りで、パイプを使ったもう少し具体的な方法が下記のページに書かれています。
この方も、「|」の後ろに直接プログラムを書いたら失敗して、パイプファイルを作って...、という経緯が書かれています。
標準の syslogd の代わりに syslog-ng を使えば、直接的に外部プログラムを呼び出すことが可能になっているようです。ただ、設定ファイルの書式がガラッと変わるので、チャレンジする余裕があれば、ですが(^^;
シェルを起動する機能は、syslog.confには、ありません。
ちょっとトリッキーですが、パイプファイルへの出力を行う様にsyslog.confを書き直して、
そのパイプファイルを読み込んで稼働する様なプロセスを別建てにするとよいでしょう。
syslog.confの"|"は、名前付きパイプへの出力であって、
シェルにある様なパイプでプロセスを起動するという意味ではありません。
http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20030630/1/
とんだ勘違いをしていたわけですね。
ご回答ありがとうございます。
標準の syslogd では YasudaS さんがおっしゃる通りで、パイプを使ったもう少し具体的な方法が下記のページに書かれています。
この方も、「|」の後ろに直接プログラムを書いたら失敗して、パイプファイルを作って...、という経緯が書かれています。
標準の syslogd の代わりに syslog-ng を使えば、直接的に外部プログラムを呼び出すことが可能になっているようです。ただ、設定ファイルの書式がガラッと変わるので、チャレンジする余裕があれば、ですが(^^;
なるほど、syslog-ng を使うとプログラムを呼び出せるわけですね。
エラーログを検知すると、メールを送信する"設定"をしたかったのですが、
おかげ様で、その設定もsyslog-ngでないと無理らしいことがわかりました。
http://www.atmarkit.co.jp/fsecurity/rensai/unix_sec09/unix_sec01...
もともと、syslogdに詳しいわけではないので、syslog-ngに挑戦してみようと思います。
ご回答ありがとうございました。
なるほど、syslog-ng を使うとプログラムを呼び出せるわけですね。
エラーログを検知すると、メールを送信する"設定"をしたかったのですが、
おかげ様で、その設定もsyslog-ngでないと無理らしいことがわかりました。
http://www.atmarkit.co.jp/fsecurity/rensai/unix_sec09/unix_sec01...
もともと、syslogdに詳しいわけではないので、syslog-ngに挑戦してみようと思います。
ご回答ありがとうございました。