Je voulais lancer un script CGI Perl avec des backticks.Perl CGI Script backticks avec la racine
Exemple:
#!/usr/bin/perl -w
use warnings;
use strict;
use JSON;
use CGI;
use CGI::Carp 'fatalsToBrowser';
my $cgi = CGI->new;
my $result = `lpc status all`;
print $cgi->header(-type => "plain/text", -charset => "utf-8");
print $result;
Le script est exécuté sans problème, mais retourne une chaîne vide.
Lorsque j'utilise une commande comme ls
cela fonctionne parfaitement.
Ma conjecture est que dans ce cas la commande lpc j'ai besoin de privilèges élevés parce que quand je lance le script depuis le bash en tant que root cela fonctionne très bien.
La question:
Y at-il un moyen d'exécuter un script avec Apache sur les apostrophes inverses? Y at-il un module Perl qui peut m'aider à le faire autrement? La seule solution qui m'est venue à l'esprit serait d'écrire un programme de service qui écoute les ports TCP eux-mêmes, mais je ne voulais pas suivre cette voie.
NOUVEAU TRY:
J'ai aussi essayé de faire un script bash avec le contenu suivant
#!/bin/bash
sudo lpc status all
J'édité/etc/sudoers à ce
apache ALL=(ALL) NOPASSWD:/path/to/script/lpcsa.sh
et a changé le script perl suivi
my $result = qx(bash lpcsa.sh);
hors de la ligne de commande cela fonctionne maintenant mais sur HTTP il ne veut tout simplement pas:/
Votre type de contenu est erroné. Il devrait être «texte/plaine» (cela ne cause pas votre problème, je pensais juste que vous devriez savoir). –
"renvoie une chaîne vide" ne signifie pas "sans problème". D'autres choses à essayer sont de capturer le stderr de la commande ('$ result = qx (lpc status all 2> & 1)') et de sortir le statut de sortie ('$?'). – mob
ah damn .. dans mon original c'est correct .. le dernier est mon cas de test avec IPC :: System :: Module simple et j'ai écrit cet extrait de la mémoire et l'ai retourné :) -------- --- la suggestion avec STDERR à STDOUT renvoie toujours une chaîne vide et $? retourne "0" –