#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 уже установлено).