Запустите сценарий оболочки с помощью node.js (childProcess)

Я хочу запустить сценарий оболочки на своем сервере node.js, но ничего не произошло...

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

Другой дочерний процесс работает отлично, но процесс выше не будет.

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

Если я запускаю скрипт в терминале, то он работает. Любые идеи? (установлен chmod +x)


person Ralf    schedule 30.09.2013    source источник
comment
Есть ли какие-либо 'error's или выводятся какие-либо 'data' на stdout или stderr?   -  person Jonathan Lonowski    schedule 01.10.2013
comment
/bin/sh: 1: /root/./play.sh: не найдено. Как мне изменить мою команду, чтобы запустить этот скрипт, хранящийся в домашнем каталоге?   -  person Ralf    schedule 01.10.2013


Ответы (2)


Обратный вызов функции exec имеет аргументы error, stdout и stderr, переданные ему. Посмотрите, могут ли они помочь вам диагностировать проблему, выдав их на консоль:

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);
    }
});
person smokey.edgy    schedule 30.09.2013
comment
/bin/sh: 1: /root/./play.sh: не найдено. Как мне изменить мою команду, чтобы запустить этот скрипт, хранящийся в домашнем каталоге? - person Ralf; 01.10.2013
comment
Спасибо, разобрался, просто путь неверный. (Думаю, мне пора спать (23:39 UTC+1)) - person Ralf; 01.10.2013
comment
является ли exec('~/./play.sh /media/external/' + req.params.movie ... безопасной конструкцией? - person Yaur; 22.05.2017

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

Запускает ваш play.sh шеллскрипт с /media/external/+req.params.movie в качестве аргумента. Вывод доступен через переменные stdout, stderr в обратном вызове.

ИЛИ ПОПРОБУЙТЕ ЭТО

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
});`
person n_rao    schedule 28.10.2015
comment
Пожалуйста, добавьте объяснение к вашему ответу - person Alex; 28.10.2015