• 締切済み
  • すぐに回答を!

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を実行させたいのですが、わかる方がおりましたら、 ご教授のほどよろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数255
  • ありがとう数2

みんなの回答

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ここの投稿方法がわからなかったので、ここに記載します。 再度以下のように設定しました。 サーバーに送り込む側の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 このような感じで表示されます。 いったいどこがおかしいのでしょうか? 色々試してみてるのですが、まったくわからなくなっています。 再度、ご教授をお願いいたします。

質問者からの補足

ご連絡が遅くなり申し訳ありません。 確かに、!が抜けていますね。( ̄∇ ̄;) 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
  • sshやtelnetでログイン後、シェル(bash, csh)プロンプトからコマンド実行する方法は?

    下記掲示板(CGI)の設置で至急、「sshもしくはtelnet」の情報が必要になりました。(メールによる掲示板への投稿機能で必要) http://www.megumi-island.net/cgi.html#bbs sshやtelnetでログイン後、シェル(bash, csh)プロンプトからコマンド実行する一番簡単な方法を教えてください。なお、当方OSはWindowsXP環境です。 シェルから下記コマンドを実行したいのです。 $ ./mi_mlpost.pl (と入力し、Enterキーを押す) これでとりあえず第一難関クリアです。 付属のmi_mlpost.txtによれば、まだcronの設定があるようですが・・・

  • cronでatコマンドがうまく動かない

    こんにちは。RedHat7.0のcronでatコマンドを動かそうとしています。 *********************************************** 00 14 * * * root at -f test.sh 14:30 2001-8-8 *********************************************** こんな感じで書いてあります。 このtest.shも、at -f test.sh 14:30 2001-8-8も、 単体では正常に動いてることを確認しています。 また、cron自体も正常に機能していて、 時間になるとatqでジョブが溜まっているのも確認できます。 var/log/cronでatコマンドが正常にキックされているのも 確認済みです。 でも、test.shの処理が実行できていないんです~。 単体では実行できているのに・・。 ちなみにtest.shの中身は ************************** #!/bin/bash date >aaa.txt ************************** という単純なものです。 crontabに書いた時だけファイルが出来ないのはどういう訳なのか 原因に心当たりのある方、アドバイスいただけないでしょうか。 宜しくお願いいたします。

  • 拡張子をphpではなくcgiで実行する方法

    添付つき送信フォームを、test.htmlからsend.phpを <form method="post" action="test/send.php"> で定義して実験成功しました。 このphp拡張子をcgiに変更して <form method="post" action="test/send.cgi"> ファイル名も変更しましたが、エラーになります。 ルートディレクトリ - test.html           - testフォルダ - send.cgi Apacheのhttpd.confの設定は下記サイトの 「Windows XPでPHPを動作させてみよう!」のCGIの設定です。 http://aki.adam.ne.jp/index.php 拡張子cgiで実行する手段を宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 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できないということですがこれ以上やるべきことが見つからず行き止まり状態です。 他に考えられる原因はありませんでしょうか? よろしくお願いします。

  • expectを使って自動でSSHログインした後にコマンドを実行したいと

    expectを使って自動でSSHログインした後にコマンドを実行したいと思っています。 df -hやmailqのようなコマンドは問題ないのですが、awkを利用してダラー?"$"を 入れてフィールド操作しようとするとダラーだけうまく読み込んでくれないのです。 ■以下スクリプト ------------------------------------------------------------ read key COMMAND="$key" expect -c " set timeout 3 spawn ssh アカウント@ドメイン expect sword: send パスワード\r sleep 1 expect -re \"$\" send \"${COMMAND}\r\" expect logout: close " ※クローズも正しくないみたいですが、無理やりtimeoutで閉じれているのでとりあえず。。 ■実行結果 ------------------------------------------------------------ spawn ssh アカウント@ドメイン アカウント@ドメイン's password: can't read "NF": no such variable while executing "send "sudo awk '$NF>0' /proc/user_beancounters\r"" echoでCOMMANDを表示させるとちゃんと代入されているのです。 これがダラーを使わずに'{ptint}'とすれば問題ありません。となると awkは問題ないので、やはり問題はダラーにあると思います。 バックスラッシュを入れてエスケープしてもダラーを二つ並べてもできません。 read "NFとなっているので、明示的に数字を入れてフィールドを指定してもだめです。 どなたかexpectのなかでダラーを読ませる方法をしりませんでしょうか。

  • 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の場合にはどのようにコマンドを指定すればよいのでしょうか? よろしくお願いします。

  • [bash] rsync データバックアップ

    掲題の件で質問させて下さい。 rsync でローカルサーバ(A)のデータをリモートサーバ(B)にコピーしたいのですが、 そのためのシェルを作成でつまづいております。 ▼シェルの中身 ---------------------------------------------------------------------- expect -c " spawn rsync -auvze \"ssh -p 10022\" /tmp/ root@BのIPアドレス:/backup/ expect \"root@BのIPアドレス's password:\" send \"パスワード\" exit 0 " ---------------------------------------------------------------------- ▼実行結果(sh -x /シェルのパス) ---------------------------------------------------------------------- + expect -c ' spawn rsync -auvze "ssh -p 10022" /tmp/ root@BのIPアドレス:/backup/ expect "root@BのIPアドレス'\''s password:" send "パスワード" exit 0 ' spawn rsync -auvze ssh -p 10022 /tmp/ root@192.168.23.44:/backup/ root@192.168.23.44's password:[root@TEST01 scripts]# ---------------------------------------------------------------------- 実行結果を見ると、シングルクォーテーションのエスケープが出来ていない?ようです。 実行結果2行目「expect "root@BのIPアドレス'\''s password:"」 何通りか書き方を変えては見たのですが、どれもうまくいかず、、、 どのように書けば ssh ログインをしてサーバBにデータを送れるようになりますでしょうか。 ※パスワード認証はダメだよ!や、パスワード直書きはダメだよ!といったご指摘は  控えて頂けると助かります。とり急ぎ目の前の問題をクリアしたいので。

  • cron で rsync が実行できない

    サーバ2台を使い rsync にて 同期をとっているのですが、 cron を使って自動化しようとしたところ ツマづいてしまいました。 rsync -au -e ssh {from} {to} 手動にて上記実行するとコピー実行できるのですが * * * * * rsync -au -e ssh {from} {to} >> err と crontab を設定したところ コピーが出来ていません。 /var/log/cron をみると1分置きに (root) CMD (rsync -au -e ssh {from} {to} >>err) とあり実行はされているようです err を確認しましたが特にエラー記述もありませんでした。 どういった箇所を調べればよいか助言いただけると助かります。 よろしくお願いします。

  • XREAサーバーのCRONTAB設定とシェルスクリプト記述方法を教えて下さい

    Linuxど素人の質問で恐縮です。 あるCGIを実行させるのにTera Term Pro(SSH対応版)というソフトでSSH接続しております。 なお、使用サーバーはXREAで広告免除サービスを利用してるのでSSH接続可能との事です。 下記コマンドが表示された状態で bash-2.05$ ./***.pl(リターン)で 手動では問題なく実行されます。  この***.plを5分おきに自動実行させる為には具体的にどうしたらいいのでしょうか? 例えばcronで下記の定期起動プログラムを作成すればよいのでしょうが 具体的な方法がわかりません。 */5 * * * * /usr/home/xxxxx/cgi-bin/***.pl  XREAの管理メニューからCRONジョブを選択しCRONTABの設定とシェルスクリプトの記述をすればよいらしいのですがここら辺の設定方法に関する質問はサポート外との事で困ってます。