- 締切済み
system関数で呼びだした、cshファイル周辺でのエラー
2~3日前にも質問させていただいた、Perl初心者leeeeeeeeです。先日に引き続き、前の業者が作ったPerlプログラムを、新しいサーバ上で動くようにする作業を行っているのですが、まだエラーが出ており困っています。以下が問題の部分です。 ○○.cgi # 削除シェルの実行 $rtn = system"$rm_csh $tmp_file $limit_date $touch_file"; if($rtn != 0) { # エラーログ出力 cm_errlog(__FILE__, "LOG013", ($rm_csh." ".$limit_date)); # エラーHTML出力 省略 # 異常終了 exit 1; } ここの、$rtnが、0になっていないようで、エラーページが表示されてしまいます。 ちなみに、$rm_csh は、tmpdel.cshというファイルで、以下が中身です。 ■ tmpdel.csh #!/usr/bin/csh set touch_fname = $3 set tmp_file = $1 touch -t $2 $touch_fname >& /dev/null set STS = $status if( $STS != 0) then exit 1 endif foreach file_name (`ls $tmp_file*`) test $file_name -ot $touch_fname && rm $file_name >& /dev/null end exit 0 ■ tmpdel.csh の #!/usr/bin/csh という部分が気になって、#!/usr/bin/perlとか、 #!/bin/cshにもしてみましたが動きませんでした。 何が原因でエラーが出ているのかが分かりません。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>具体的にどのファイルのどこに、./tmpdel.csh と書けばよいのでしょうか $rtn = system"$rm_csh $tmp_file $limit_date $touch_file"; で ○○.cgiが /usr/local/apache/cgi-bin/ に tmpdel.cshが /usr/local/apache/cgi-bin/▲▲/ に あるんでしたら $rtn = system "./▲▲/$rm_csh $tmp_file $limit_date $touch_file"; にしてみたらどうでしょう
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
パスが通っているかというのは、 例えば、シェルで tmpdel.csh と入力して実行されるのか? という意味です。 パスが通っていなければ ./tmpdel.csh などと起動しなくてはいけませんよね。 また、そのファイルに実行属性 chmod +x してありますよね
補足
回答ありがとうございます。 とても助かります。 SSHでログインして、 user_name /bin> csh /usr/local/apache/cgi-bin/▲▲/tmpdel.csh としたところ、 Ambiguous output redirect. と帰ってきました。 これは、実行できているのでしょうか? > パスが通っていなければ > ./tmpdel.csh > などと起動しなくてはいけませんよね。 すみません。あまり理解できていません。 具体的にどのファイルのどこに、./tmpdel.csh と書けばよいのでしょうか tmpdel.csh のパーミッションは、 755で、実行権限を与えているので大丈夫だと思います。 エラーメッセージの意味は分かりますか? 宜しくお願いします。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
tmpdel.csh のパスは通っているのでしょうか?
補足
>パスが通っているのでしょうか? というのは、ファイルの指定している位置があっているのか?ということですよね? 確認しましたが、おそらく合っていると思います。 ちなみに、○○.cgiにある、cm_errlog()は以下のようなエラーログを吐き出しています。 2005/05/15 13:50:58 ○○.cgi LOG013 Can not system function. command_line=/usr/local/apache/cgi-bin/▲▲/tmpdel.csh 200505151250 それからApacheには、 No -e allowed in setuid scripts. edquota: permission denied というエラーが何回も並んでいました。
お礼
複数回にわたるご回答誠に有難うございました。 昨日、問題を解決することができました。 結局、 tmpdel.csh の中の、 #!/bin/csh set touch_fname = $3 set tmp_file = $1 touch -t $2 $touch_fname >& /dev/null set STS = $status if( $STS != 0) then exit 1 ← ここを「exit 0」にしたら動きました。 endif 根本的な解決にはなっていませんが、 とにかく動くようになりました。 ありがとうございます。
補足
御回答ありがとうございます。 返答が遅れてしまい大変申し訳ありません! パスは、絶対パスで、 $rm_csh = /usr/local/apache/cgi-bin/▲▲/tmpdel.csh となっているので、パスに問題はないと思われます。