
Ubuntu日本語フォーラム

ログインしていません。
お世話になります。
postfixとdovecotを設定して、メールサーバを立てています。今現在aliasesはメールの転送ぐらいにしか使っていませんでしたが、aliasesからパイプでcgiの起動などをしたいと思っています。
簡単なテストで/tmp内のファイルに書き込むとかはできるのですが、ユーザーのホームディレクリ内などのディレクトリ内のテキストに書き込むコマンドを発行したりするとパーミッションのエラーで実行できませんでした。
やっていることはものすごく簡単で、
info: "| echo hoge >> /tmp/test.txt"
みたいな感じです。[email protected]にメールを送信してhogeを書き込むだけです。これは成功したのですが、
info: "| echo hoge >> /home/user/test.txt"
はエラーになってしまいます。
パーミミッションの設定は、text.txt[777]にして、その上のディレクトリも777にしてみたのですが駄目でした。
aliases内のコマンドが実行される際のユーザーはどのユーザーなのでしょうか?postfixなのかな…とは思っているのですが、今のところどのログを見て良いのかもわからなかったりします。
詳しい方いましたらご教授ください。
よろしくお願いいたします。
オフライン
test: "|id >/tmp/mail.log"
などとしてみたところ、ユーザとグループは nobody, nogroup で実行されているようです。
(ファイル所有者もそうなっていました)
また当方の環境ではホームディレクトリ以下への書き込みも問題なくできました。
パーミッションが正しく設定されているか、もう一度確認してみてください。
オフライン
epii による投稿:
test: "|id >/tmp/mail.log"
などとしてみたところ、ユーザとグループは nobody, nogroup で実行されているようです。
(ファイル所有者もそうなっていました)
また当方の環境ではホームディレクトリ以下への書き込みも問題なくできました。
パーミッションが正しく設定されているか、もう一度確認してみてください。
ありがとうございます。
すみません。ユーザーとグループはどこで確認したらよいでしょうか?
またパーミッション確認してみたところ、ちょこちょこおかしいところがあったのですが、今一度調整して正しくなったと自分では思っているのですが、
home root:[755]
info info:[755]
cgi info:[777]
test.php info:[755]
test.txt info:[666]という風に設定しています。
カレントのディレクトリで、php ./test.phpも正常に起動してtest.txtに書き込み可能です。
aliasesでは、
info: "| /usr/bin/php /home/info/cgi/test.php"
と設定しています。
phpは644でも実行可能みたいです。カレントディレクトリでの手動実行では、
php ./test.php
でも実行できましたが、aliasesには一応フルパスで書いています。このフルパスでの実行もコンソール上で手動で実行してもうまくいっています。
実行したユーザーはrootとinfoの両方でやってみました。
これらのパーミッションで何か間違っているところはあるでしょうか?
オフライン
>epiiさん
epiiさんの返信に確信をもちつつ、悪銭苦闘した挙句、やっと原因がわかりました。とても情けない結果でした。
aliasesに記載したパイプ処理のコマンドは、全部フルパスで書かないと駄目なんですね。あんまり頻繁にやる処理じゃないのですっかり忘れていましたが、かつてcronから何らかの処理をする際にも同じような経験が1年前ぐらいにありました。
phpの中身は、テストように日付と時間だけをスタンプするもので、
$epock = time();
$date = date('Y.m.d A H:i.s',$epock);
$output = shell_exec('echo '.$date.' >> test.txt');というような内容だったのですが、3行目の部分はフルパスじゃないと駄目ですね。
$output = shell_exec('echo '.$date.' >> /home/info/cgi/test.txt');かなり当たり前の話しだったのですが、ここ2日休日を潰してしまいました。。。とほほ。
最後の部分だけは見逃しておりました。aliasesのある場所からコマンド実行してみて、発見しました。
オフライン