2016-07-15 12 views
1

私はperlスクリプトがある場所で何度も立ち往生しています。私はCGIファイルにいくつかのHTMLコンテンツとシェルスクリプトを実行するシステムコマンドを持つ関数を作っています。次に、CGI関数を呼び出してブラウザにコンテンツを表示するperlファイルを呼び出すhrefがあります。しかし、CGIのシステムコマンドの実行以外はすべてロードされます。私はこのシステムコマンドをPerlファイルそのものに入れようとしましたが、実行時にはコマンドラインからシェルスクリプトを正常に実行しています。しかし、私はこれをボタンクリックで発生させたいので、CGIコールをしなければならなかったが、それでも私はそれを呼び出すことができません。 私は多くの質問をしてきましたが、私はまだ完璧な答えを探しています。 は、ここに私のコードです: test1.plPerlからcgiによって呼び出されたときにシステムコマンドが実行されない

#!/usr/bin/perl -w 

use strict; 

use CGI::Carp qw(fatalsToBrowser); 
use Basecamp::UI; 
use Basecamp::Dashboard; 
use Basecamp::Info; 

my $cgi = Basecamp::UI->new->cgi(); 
my $dashboard = Basecamp::Dashboard->new(); 
my @html = $cgi->tab_ext(); 

#push @html, '<div class="page">'; 
#push @html, newstuff(); 
#push @html, '</div>'; 
#print "Hello Hey"; 
#system(' sh /home/basecamplocal/Perforce/depot/qeutils/basecamp_dev/sample.sh '); 

print $cgi->begin('Basecamp | ext', $dashboard), $cgi->begin_page(); 
print @html; 
print $cgi->end_page(), $cgi->begin_footer(), $cgi->end_footer(), $cgi->end(); 

シェルスクリプトは次のとおりです。

#!/bin/bash 
#perl Basecamp.pl > log_sample.txt 
touch log_sample.txt 

echo "Good Day" 

CGIファイル生成機能:

=item tab_ext() 
====================================================================================== 

     DESC: Generates appropriate tabs for About, about.pl. 
     OUT: Returns array of scalars with html to draw the tabs and any associated 
         subtabs. 

====================================================================================== 
=cut 
sub tab_ext 
{ 
     my ($self) = @_; 
     my $tab = $self->param('tab'); 
     my @tabs = ('<li><a href="test1.pl?tab=New">Status Restart</a></li>'); 
     my @subtabs =(); 
     my @html =(); 

     $tabs[0] = '<li class="selected"><a href="#">Status Restart</a></li>'; 

     @html = ('<ul id="tabs">', @tabs, '</ul>'); 

     push @html, ('<ul id="subtabs">', @subtabs, '</ul>'); 
     print "Content-type: text/html\n\n"; 
     system("sh /full path to shell file /sample.sh "); 


     return @html; 

} 

と私は上のtest1.plファイルを呼び出していますhref call html。シェルスクリプトの実行を除いて、CGIからのHTMLコンテンツ全体が表示されています。 救いの手をいただければ幸いです。

+0

http://perlmaven.com/running-external-programs-from-perl – Vir

+0

ご覧になれますか?リンクはすべてシステムコマンドに関するもので、私はそれが独立した実行でうまく動作していると言いました。 –

+0

'sh'を明示的に呼び出す必要はありません(CGIスクリプトとして実行するときにデフォルトの' $ PATH'にないかもしれません)。 'sample.sh'を実行可能にして、' system( '/ full/path/to/sample.sh')だけ使うことができます。今のように末尾のスペースを含めないでください。 – reinierpost

答えて

-1

権限の問題があるようです。最初に、system.shプログラムと親ディレクトリの許可を確認してください。私は、Webユーザーはプログラムを実行する許可がないと思う。

テストコード:test.cgi

Persmission:755

#!/usr/bin/perl -w 
use CGI::Carp qw(fatalsToBrowser); 
use CGI qw(:standard); 
use CGI::Carp qw(warningsToBrowser fatalsToBrowser); 
print header(-type => 'text/html'); 
print <<EOF; 

<title>Browser Page</title> 
<body> 
<div> Hellow </div> 

EOF 

my $command ="sh /tmp/abc.sh"; 
print "$command<br>"; 
system($command); 
print "</body>"; 

コード:ブラウザ上でabc.sh

#!/bin/bash 

echo "Good Day" 

出力がある

Hellow 
sh /tmp/abc.sh 
Good Day 

・ホープ、このが手伝う。

+0

私はsystem.shのすべてに対してrwxの許可を与えていますが、なぜbasecamp.plのアクセス許可を変更する必要がありますか? –

+0

また、親ディレクトリのアクセス許可を確認する必要があります。チェックするには、スクリプトを '/ tmp'ディレクトリに保存してから実行してください。 wwwデータは** tmp **ディレクトリの許可を持っています(ubuntuで) – Arijit

+0

ok!私がこの許可を持っていなければ、ターミナル・コーズからそれを実行できるはずです。それはCGIコールからではなく、うまく動作しています。 –

関連する問題