Отправить команду командной оболочки через XMPP, NodeJS

#node.js #shell #xmpp

#node.js #оболочка #xmpp

Вопрос:

Я написал XMPP-клиент с NodeJS и «simple-xmpp»: он ожидает сообщений, отправленных от другого XMPP-клиента, считывает сообщения и, если это команды командной оболочки, выполняет их.

Например, если клиент A отправляет сообщение: «./run_myscript.sh «клиенту B, после чего клиент B запустит скрипт./run_myscript.sh , очень просто.

Отправка «run» через XMPP работает хорошо (скрипт запускается), но отправка «stop» (для завершения работы скрипта), похоже, не имеет никакого эффекта! Скрипт продолжает выполняться.

Для изучения проблемы я также добавляю «тестовый» ответ клиенту A, чтобы проверить, не нарушена ли вся связь, и похоже, что так: ответы от B на A, похоже, не получены! Почему?

Вот раздел, в котором клиент B анализирует полученные сообщения:

 xmpp.on('chat', function(from, message) { 
var msg = message.toString();
if(msg === 'run'){           //if the message is "run"...
    var cmd = require('child_process').execSync('./run.sh').exec; //run the script

}else if(msg === 'stop'){    //if the message is "stop"...   
    var cmd = require('child_process').execSync('./stop.sh').exec; //it should stop it but it doesn't work!

    //Let's try with a test reply to Client A
    xmpp.send('pippoman@prova.it', 'stopped!'); //replies not sent!!!
});
  

Комментарии:

1. Попробуйте добавить какой-нибудь отладочный код, чтобы посмотреть, вызывается ли второй shell.exec и возвращает ли он результат или нет.

2. Я только что удалил shell.exec и использовал классический child_process, чтобы упростить скрипт (я думаю, execSync более известен, чем shelljs, верно?) Ни один из двух вызовов, похоже, не работает в «разделе остановки». Время для отладки, ок

3. можете ли вы вызвать stop.sh из командной строки? Это работает? (возможно, вам нужно установить chmod x ./stop.sh )

4. Да, это работает из cli ( x уже установлено).