IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web Perl Discussion :

executer un CGI en console


Sujet :

Web Perl

  1. #1
    Membre régulier Avatar de fripette
    Profil pro
    Inscrit en
    octobre 2006
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : octobre 2006
    Messages : 241
    Points : 71
    Points
    71
    Par défaut executer un CGI en console
    Bonjour,
    Je souhaiterais exécuter un script CGI en console.
    Ce scripts est generalement lancer via l'interface web et se rappelle lui même en version console .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    my @names = $query->param;
     
    if (scalar(@names)>1) { #when add is pressed	
    	print "Content-Type: text/html\n\n";
     
    	if ($query->param('daily')){ # insert ncbi daily file(s) tblout
    		treat_param_daily_case();			
    	}else{ # genome part (for run new genome or insertion of genome tblout; one/many file(s) can be launch in the same time )
    	    write_param_to_launch_console();
    	}		
        print "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=cazy_views.cgi\">";
    }else{
    	## batch part 
    getopts("ldwm:t:uhs:f:g:");
     
        if ($opt_d){# daily file case
        	my $daily_info_file =$opt_t;
    		launch_multiple_daily($daily_info_file);				
        }elsif ($opt_l){# launch multiple file to run new genome (modassign) || to insert tblout (insert_genome)
        	my $authorized = $opt_m;
        	my $no_insert =1 if ($opt_u);
        	my $with_hmm =1 if ($opt_h);
        	my $tblout=1 	if ($opt_t);
    		launch_multiple_genomes($authorized,$tblout,$no_insert,$with_hmm);
     
    	}elsif ($opt_w){# tblout insertion from command line
        	my $source  = $opt_s;
    		my $geno_info  = $opt_g;
    		my $fa_file = $opt_f;
    		my $authorized = $opt_m;
    		my $tblout =$opt_t;	
    		process_insert($source,$geno_info,$fa_file,$authorized,$tblout);	
     
    	## web part, display form	
    	}else{
        	$manage = HTML::Template->new(filename => '../htmltemplate/content_insert_genome.tmpl');
    	    $manage->param(TITLE => $title);
    	    $manage->param(DESCRIPT => $metadesc);
    	    $manage->param(TBLOUT => 1) if ($query->param('tblout'));
    	    if ($query->param('daily')){
    	    	 $manage->param(DAILY => 1) ;
    	    	 $manage->param(TITLE => "Insert Daily Tblout");
    	    }
     
    	    $manage->param(DIRSERVER => $$global{dirhttp_server});
    	    print "Content-Type: text/html\n\n",$manage->output;        
    	}   
    }
    concretement le web va traiter les infos grace a write param_to_launch_console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    sub write_param_to_launch_console{	
    	my $usr = $session->param('usr');
    	my $authorized =	check_if_authorized($usr,"Insert Tblout FAILED");	
     
    	# read all info from tmpl
    	my @all_tax_id=$query->param('tax_id');
        my @organism=$query->param('organism');
        my @strain=$query->param('strain');
        my @source=$query->param('source');
        my @fasta=$query->param('fasta_file');
    	my @tblout=$query->param('tblout_file') if ($query->param('tblout'));
    	if (!$query->param('tax_id') && !$query->param('organism')){
    		my $msg =  "[WebJob] Run Job FAILED<BR> Please provide information<BR>";
    		print $msg;
    		exit(0);
       	}
     
    	# write genome info (tax_id,organism ...) in a file (genome_info_file), will be read by the console version of the script  	
    	my $str;
       	for(my $index=0;$index<scalar(@all_tax_id);$index++){   		
       		next if (!$all_tax_id[$index]&& !$organism[$index] && !$strain[$index] && !$source[$index] && !$fasta[$index]);
     
       		if ( !$fasta[$index] ){
       			# if file(s) not found send error msg to user			
    		 	my $msg =  "No fasta_file for: ". $organism[$index]. "\n";
    			print $msg;
    			exit(0);
    		}
    		# write locally fasta_file passed by User
       		my $fasta_filename= write_file_in_tmp($fasta[$index]);		
       		$str .= $all_tax_id[$index]."\t".$organism[$index]."\t".$strain[$index]."\t".$source[$index]."\t".$fasta_filename;
     
       		 # write locally tblout_file (in case of tblout process/insertion ) passed by User
       		if ($query->param('tblout')){   			
       			if ( !$tblout[$index] ){
       				# if file(s) not found send error msg to user			 		
    				my $msg =  "No tblout_file for: ". $organism[$index]. "\n";
       				print $msg;
    				exit(0);				
    			}
    			# write locally fasta_file passed by User
       		  	my $tblout_filename=write_file_in_tmp($tblout[$index]);
       		  	$str.= "\t".$tblout_filename;
       		}   		
       		$str.= "\n";   		
       	}     	
     
       	my $first_name = $1 if($authorized=~/(\w+)\.\w+/);
       	open(LOCAL, ">".$$global{modassign_tmp}."/genome_info_file_".$first_name.".txt") or die $!; 
       	print LOCAL $str;
        close(LOCAL);	   
     
        my $cmd;
        if (param('tblout_file')){ # insert multiple genomes (multiple tblouts will be read and insert)
          	$cmd= "$$global{scripts}/privatesite/insert_genome.cgi -l -m '".$authorized."' -t 1 1>$$global{modassign_tmp}\/modass.log 2>&1&";    
        }else{ # run new genomes (multiple html will be generated )
        	my $no_insert = "-u" if $query->param('no_insert');
        	my $with_hmm = "-h" if $query->param('with_hmm');
        	$cmd= "$$global{scripts}/privatesite/insert_genome.cgi -l -m '".$authorized."' ".$no_insert." ".$with_hmm." 1>$$global{modassign_tmp}\/modass.log 2>&1&";
        }
        print $cmd;
    	system ($cmd);
    }
    La commande lorsque je passe via www-data, pas de soucis ca marche.
    Cependant, lorsque j'essaye de le lancer via cron : rien , pas de message d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/bin/bash
     
    date=`date +%Y_%m_%d`;
     
    daily_info_file="/data/tmp/daily_info_file_$date.txt";
    if [ -f $fichier ]
    then
    	cd /home/fripette/scripts/privatesite/
    	perl insert_genome.cgi -d -t '$daily_info_file' >& /data/tmp/tblout_daily.log
    fi
     
    exit
    Rien ne s'ecrit dans le tblout_daily.log.

    Merci pour votre aide !
    Frip'

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Je dirais que c'est sans doute plus un problème Unix/Linux que Perl. Sans doute certaine variables d'environnement sont mal définies quand tu exécutes un programme avec cron. Il faut sans doute essayer de sourcer les scripts utilisés quand tu ouvres un terminal.

Discussions similaires

  1. Executer un CGI
    Par sagopa dans le forum Apache
    Réponses: 3
    Dernier message: 07/01/2010, 18h26
  2. Jar auto executable : Pas de sortie console
    Par Clorish dans le forum Général Java
    Réponses: 3
    Dernier message: 31/03/2008, 11h09
  3. execution programme cgi
    Par corentin59 dans le forum Apache
    Réponses: 2
    Dernier message: 30/10/2007, 13h37
  4. probleme d'execution de cgi avec convert
    Par stoyak dans le forum Web
    Réponses: 2
    Dernier message: 17/07/2006, 12h04
  5. [Debutant] execution d'un programme console
    Par benahpets dans le forum MFC
    Réponses: 8
    Dernier message: 19/05/2005, 00h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo