javascript – 如何使用NodeJS在SSH2上执行多个命令
作者:互联网
我正在尝试从GitHub部署,我希望按照数组的顺序执行多个命令.我现在使用的代码包含在下面.
async.series([
...
// Deploy from GitHub
function (callback) {
// Console shizzle:
console.log('');
console.log('Deploying...'.red.bold);
console.log();
console.log();
var deployFunctions = [
{
command: 'cd ' + envOptions.folder + ' && pwd',
log: false
},
{
command: 'pwd'
},
{
command: 'su ' + envOptions.user,
log: false
},
{
command: 'git pull'
},
{
command: 'chmod 0777 * -R',
log: false
}
];
async.eachSeries(deployFunctions, function (item, callback) {
deployment.ssh2.exec(item.command, function (err, stream) {
deployment.logExec(item);
stream.on('data', function (data, extended) {
console.log(data.toString().trim());
console.log();
});
function done() {
callback(err);
}
stream.on('exit', done);
stream.on('end', done);
});
}, function () {
callback();
});
},
...);
但是,在我进入正确的目录后,它会忘记它的位置并重新开始.
$cd /some/folder && pwd
/some/folder
$pwd
/root
解决方法:
@robertklep对于你的cd为什么不能持久是正确的.每个命令都调用一个以其初始状态开始的独特shell实例.您可以使用cd /home/jansenstok/domains/alcoholtesterwinkel.com/public_html/\u0026 amp ;\u0026 amp ;,为每个命令添加前缀.作为一个快速解决方案,但实际上你正在为痛苦做好准备.你想要的是一个shell脚本,它具有多行的所有功能,而不是单个断开连接的命令列表.
查看使用ssh2的sftp函数将完整的shell脚本作为步骤1传输到远程计算机,通过exec(/ bin / bash /tmp/your_deploy_script.sh)执行它作为步骤2,然后将脚本删除为步骤3.
标签:javascript,shell,node-js,ssh,node-modules 来源: https://codeday.me/bug/20190612/1226764.html