2013-09-30 16 views
33

Chcę uruchomić skrypt na moim serwerze node.js, ale nic się nie stało ...Run skrypt z node.js (childProcess)

childProcess.exec('~/./play.sh /media/external/' + req.params.movie, function() {}); //not working 

Innym childProcess działa idealnie, ale proces powyżej wonów "t.

childProcess.exec('ls /media/external/', movieCallback); //works 

Jeśli uruchomię skrypt w terminalu, to działa. Jakieś pomysły? (ustawiono chmod + x)

+0

Czy istnieje [ ' 'error''s] (http://nodejs.org/api/child_process.html#child_process_event_error), czy to wyjście dowolny [' "data"] (http://nodejs.org/api/stream.html#stream_event_data) na ['stdout'] (http://nodejs.org/api/child_process.html#child_process_child_stdout) lub [' stderr' ] (http://nodejs.org/api/child_process.html#child_process_child_stderr)? –

+0

/bin/sh: 1: /root/./play.sh: not found, Jak muszę zmodyfikować moje polecenie, aby uruchomić ten skrypt przechowywany w katalogu domowym? – Ralf

Odpowiedz

57

Funkcja zwrotna funkcji exec przekazuje do niej argumenty błędu, stdout i stderr. Zobacz, czy mogą pomóc zdiagnozować problem, wypluwając je do konsoli:

exec('~/./play.sh /media/external/' + req.params.movie, 
    function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    console.log('stderr: ' + stderr); 
    if (error !== null) { 
     console.log('exec error: ' + error); 
    } 
}); 
+0

/bin/sh: 1: /root/./play.sh: not found, Jak muszę zmodyfikować moje polecenie, aby uruchomić ten skrypt przechowywany w katalogu domowym? – Ralf

+0

Dziękuję, znalazłeś, to była po prostu niewłaściwa ścieżka. (Myślę, że muszę iść spać (23:39 UTC + 1)) – Ralf

+0

to 'exec ('~ /./ play.sh/media/external /' + req.params.movie ...' bezpieczny konstrukt ? – Yaur

5
exec('sh ~/play.sh /media/external/' + req.params.movie ,function(err,stdout,stderr){ 
     console.log(err,stdout,stderr); 
}) 

Prowadzi swoją play.sh shellscript z /media/external/ + req.params.movie jako argument. Dane wyjściowe są dostępne przez standardowe wyjście, stderr w wywołaniu zwrotnym.

lub spróbuj TO

var myscript = exec('sh ~/play.sh /media/external/' + req.params.movie); 
myscript.stdout.on('data',function(data){ 
    console.log(data); // process output will be displayed here 
}); 
myscript.stderr.on('data',function(data){ 
    console.log(data); // process error output will be displayed here 
});` 
+0

Proszę, dodaj wyjaśnienie do swojej odpowiedzi – Alex

+0

czy masz na myśli 'myscript.stderr.on (" błąd ", ...'? – activedecay