• 締切済み

system関数を使いatコマンドで指定のCGIを実行したい

system関数を使いatコマンドで別のCGIを時間指定で動作させたいのですが、 サーバー側でどうしても実行されず困っています。 サーバーに送り込む側のCGIの記述は以下のように記述しています。 =============================================================== #!/usr/bin/perl $command = "at 22:15 09/20/2007 < /var/www/cgi01nni/mailmg/send.csh"; system $command; exit; =============================================================== send.cshは以下のように記述しています。 =============================================================== #/bin/csh perl /var/www/cgi01nni/mailmg/send2.pl > /dev/null; exit 0 =============================================================== root権限にてsshでサーバーにアクセスし、以下のコマンドを入力して 実行した際は、send2.plは正常に動作します。 at 22:15 09/20/2007 < /var/www/cgi01nni/mailmg/send.csh /etc/at.allowはありませんが、 /etc/at.denyはあります。(中身は空) サーバーに送り込む側のCGIを実行した後に、sshでatqで見ると 以下のように確認ができます。 61 2007-09-20 22:15 a apache sshで実行した際は、当たり前ですが以下のように最後がrootになります。 61 2007-09-20 22:15 a root なんとかatを実行させたいのですが、わかる方がおりましたら、 ご教授のほどよろしくお願いいたします。

  • Perl
  • 回答数1
  • ありがとう数2

みんなの回答

  • Ceren
  • ベストアンサー率49% (90/183)
回答No.1

> #/bin/csh send.cshの1行目で「!」が抜けているのも気になりますが、 > perl /var/www/cgi01nni/mailmg/send2.pl > /dev/null; この書き方だと(apacheユーザから見て)perlが見つからないと実行できません。 perlの呼び出しをフルパスで書いてみてはどうでしょうか。

masapiro
質問者

お礼

ここの投稿方法がわからなかったので、ここに記載します。 再度以下のように設定しました。 サーバーに送り込む側のCGI =============================================================== #!/usr/bin/perl $command = "/usr/bin/at 16:47 09/22/2007 < /var/www/cgi01nni/mailmg/send.sh"; system $command; exit; =============================================================== send.csh側 =============================================================== #!/bin/csh /usr/bin/perl /var/www/cgi01nni/mailmg/send2.pl > /dev/null; exit 0 =============================================================== 結果ですが、やはり動作しない状況です。 sshで以下のコマンド入力すると動作します。 /usr/bin/at 16:47 09/22/2007 < /var/www/cgi01nni/mailmg/send.sh atqでは、 74 2007-09-22 17:15 a apache このような感じで表示されます。 いったいどこがおかしいのでしょうか? 色々試してみてるのですが、まったくわからなくなっています。 再度、ご教授をお願いいたします。

masapiro
質問者

補足

ご連絡が遅くなり申し訳ありません。 確かに、!が抜けていますね。( ̄∇ ̄;) perlのパスもフルパスにして再度確認してみます。 確認次第、ここに再度書き込みします。 よろしくお願いいたします。

関連するQ&A

  • perl リモートでコマンド実行結果取得

    perl 初心者です。 Perlでリモートログイン後grep結果を取得する方法で分からないことがあり質問しました。 rootユーザで実行するPPP.plスクリプト内で、他のサーバにsshでログイン後grepの結果を取得しようと考えていますが、rootユーザでPPP.plを実行しスクリプト内でsshを実行するとパスワードを聞かれてしまいます。 そこで、他のユーザAAAでPPP.plを実行し、sshを実行するとパスワードは聞かれない設定になっているそうです。(詳細は分かりませんが) そこで、実現方法について下記のように考えていますが、他の方法、sshのオプション等他の考えが、あれば教えてください。確認する環境がなくて実行していませんのであっているかも分かりません。 PPP.pl実行サーバ:server1 ssh先のサーバ:server2 PPP.plの実行ユーザ:ROOT パスワードが聞かれないserver1のユーザ:AAA server2のログインユーザ:AAA ※PPP.plの実行ユーザはrootから変更はできません --------------------------------------- #ユーザAAAに変更 system("su - AAA"); #server2のgrep結果取得 my @rtn_grep = `ssh -l AAA server2 grep test /var/log/msg.log`; if($? != 0){ exit; } ## grep結果を参照 XXXX #rootユーザに戻る system("exit"); -------------------------------- 以上です。宜しくお願い致します。

    • ベストアンサー
    • Perl
  • シェルスクリプのexpect部分のコマンド実行方法

    シェルスクリプトのexpect -c以降の記述について相談させて下さい。 特定機器へのログインを行う場合に以下のパターンがあります。 パターン1 user=user PW=pass1 パターン2 user=user PW=pass2 ※プロンプトはuser@としています パターン1でログインできた場合はcommand Aを実行して終了 パターン2でログインできた場合はcommand Aを実行して終了 パターン1も2もログインできない場合即終了を期待して下記プログラムを作成しました。 expect -c " -略- expect \"Login:\" send \"user\n\" expect \"Password:\" send \"pass1\n\" sleep 1 expect { \"Login incorrect\" { send \"user\n\" expect \"Password\" send \"pass2\n\" expect { \"Login incorrect\" { exit 1 } \"user@\" { send \"command A\n\" expect \"user@\" send \"quit\n\" exit 1 } } } } \"user@\" { send \"command A\n\" expect \"user@\" send \"quit\n\" } } interact " しかし、上記のbraceでかこったsend部分がうまくコマンドとして実行されません。 別ファイルで#!/usr/bin/expectexpectの記述で記載すると動作する点は確認しています。 #!/usr/bin/bashにおいてexpect -cから記載するとbraceはそもそも使えないのでしょうか。 無知な質問かもわかりませんがお気づきの点があればご指摘いただけないでしょうか。 よろしくお願いします。

  • 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にもしてみましたが動きませんでした。 何が原因でエラーが出ているのかが分かりません。 宜しくお願いします。

  • cgiを実行可能にするには

    webでcgiを実行可能にするには webサーバー(windows NT)側は どのような設定をすればいいでしょうか。 perlで記述したいためActive perlはインストールしました。 その他にcgiの実行を許可する設定が必要ですか? 初心者ですので、見当違いな内容でしたらもうしわけありません。

  • SSH接続でwindowsサーバのコマンドが実行できません

    SSHでwindowsサーバに接続して、OSコマンドを自動実行してクライアントにアウトプットを取得したいと思っておりますがうまくコマンドが実行できません。 以下環境とやりたいことです。 <環境> Windowsサーバ(ssh server): WindowsXP OpenSSHインストール済み クライアント(ssh client): WindowsXP ※Windowsサーバとクライアントは公開鍵認証でパスワードなしでsshコマンドでクライアントからサーバにログインできるようになっています。 <やりたいこと> クライアントからsshで定期的にWindowsサーバログインしてサーバ上のファイル情報を取得したいので、以下のようなコマンドとクライアントから定期実行しようと考えてます。 例: ssh -i id_dsa username@server dir しかし、sshで一度サーバにログインしてからだと普通どおりにコマンド実行できるのですが、sshでコマンドを渡す場合には、c:\windows\system32\command.comを記述する必要があるようで、実際には、 ssh -i id_dsa username@server c:/windows/system32/command.com dir のように指定しています。 ここからが質問です。 Q.このとき、dirコマンドの引数にファイルを指定しても、"ファイルが見つかりません"のエラーになってしまいます。 コマンド例: ssh -i id_dsa username@server c:/windows/system32/command.com dir filename 出力例: -------------------------------------------------- ドライブ C: のボリュームラベルは XXXXXX ボリュームシリアル番号は XXXXX ディレクトリは XXXXXX ファイルが見つかりません. --------------------------------------------------- SSHサーバがLinux/Unixの場合は特に問題なくコマンドが実行できたのですが、Windowsの場合にはどのようにコマンドを指定すればよいのでしょうか? よろしくお願いします。

  • Apacheサーバに接続してcgiが実行できません。

    サーバはRedHat Linux8で、クライアントはwin2000です。 表示は 「Server Error! Premature end of script headers: dekiru.cgi 」 と出ます。 過去の質問からsuexecの問題だという情報を見つけ、 /var/log/httpd/suexec.log を見てみると、 「uid: (500/XXX) gid:(500/500) cmd:yyy.cgi cannot get docroot informaiton (/home/XXX)」 という表示でした。 homeやXXX、yyy.cgiは全て755という権限でないといけないということで全て755に変更してサーバを再スタートしましたが、解決しません。 デフォルトで/var/www/cgi-bin以下に 同じyyy.cgiをおいて、 http://サーバIP/cgi-bin/yyy.cgiをブラウザでみると、 実行可能です。 メッセージからドキュメントroot情報がgetできないということですがこれ以上やるべきことが見つからず行き止まり状態です。 他に考えられる原因はありませんでしょうか? よろしくお願いします。

  • ATコマンドについて教えてください。

    はじめまして。今回はじめてWinNTで、ATコマンドを使ってスケジュールを 組もうと思っています。ATコマンドにバッチプログラムをわりあてて、やろうかと思っています。 例:at 09:00 ”c:¥aa.bat” aa.batの中身 copy ¥¥サーバー1¥*.* ¥¥サーバー2 と、バッチファイル内でコピーコマンドを動かそうかと思っています。 ところが、ローカルサーバー側(サーバー1側)は認識できるのですが、 リモートサーバー側(サーバー2側)は、ATコマンドで実行すると 「アクセスが拒否されました」とメッセージを出力します。しかし、 コマンドラインでは実行できます。 ATコマンドでネットワーク間のファイルコピーを可能にするにはどうすれば よいのでしょうか? よろしくお願いします。

  • PHPをCGIとして実行する方法

    PHPをCGIとして実行する方法 現在PHP(モジュール版)にて開発を行っているのですが、 仕様上.htaccessを使用してcgi-binディレクトリ内にあるphpファイルをCGIとして 実行しなければならなくなりました。 下記の記述方法だと500エラーが発生してしまい、大変困っています。 <Directory "/usr/~(任意のcgi-binディレクトリのフルパス)~/cgi-bin"> AddType application/x-httpd-cgi .php </Directory> 因みに.htaccessはcgi-binディレクトリの1階層上に設置しています。 単に「AddType application/x-httpd-cgi .php」を記述する分には誤作動は起さないのですが、出来れば指定のディレクトリ内だけで指定したいと考えています。 もし思い当たる点がありましたら、ご教授お願い致します。 下記に環境を記しておきます。 【環境情報】 OS:FreeBSD 6.2(レンタルサーバ) PHP:5.2.4

    • ベストアンサー
    • PHP
  • 実行可能な外部コマンドは?

    cgiプログラムから外部コマンドを実行させたいのですが,できることとできないことの区別が明確でありません. システムコマンドのlsは実行できず,wc や cp は実行できます. 自作のプログラムはcgiプログラムと同じところある物は動きますが,それを/binや/usr/binに移動させると動かなくなります. これはサーバのセキュリティがそのように設定されているということなのでしょうか?

    • ベストアンサー
    • CGI
  • NFS経由ではcgiの実行はできない?

    NFS経由ではcgiの実行はできない? NFSでマウントしたディレクトリへのアクセス(具体的にはcgiの実行)を試しています。 host1とhost2(両方とも、OSはCentOS5)を作っており、 host1に/home/cgi/sample.cgiがあり、/etc/exportsでhost2に対してexportしています。 host2にはApacheがインストールされています。 host2でhost1の/home/cgiを/www/cgiとしてマウントしています。 host2で、httpd.confには ScriptAlias /cgi-bin/ /www/cgi/ と記述しています。そして、 http://localhost/cgi-bin/sample.cgi とすると、うまくcgiが実行されません。 一方、host1でApacheをインストールして同様の設定を施して、 http://localhost/cgi-bin/sample.cgi を実行しましたらうまくcgiが実行できました。 NFSでマウントしたcgiなどのスクリプトなどは実行できないものなのでしょうか?