javascript - 如何使用 NodeJS 在 SSH2 上执行多个命令

标签 javascript node.js shell ssh node-modules

我正在尝试从 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 到正确的目录后,它忘记了它在哪里并重新开始。

$ cd /some/folder && pwd
/some/folder

$ pwd
/root

最佳答案

@robertklep 关于为什么您的 cd 不持久的说法是正确的。每个命令调用一个不同的 shell 实例,该实例以其初始状态开始。您可以在每个命令前加上 cd/home/jansenstok/domains/alcoholtesterwinkel.com/public_html/&& 作为快速修复,但实际上您正在为自己设置痛苦。您想要的是一个 shell 脚本,它具有多行的所有功能,而不是一个单独的断开连接的命令列表。

看第1步使用ssh2的sftp函数将一个完整的shell脚本传输到远程机器,通过exec执行(/bin/bash/tmp/your_deploy_script.sh) 作为第 2 步,然后删除脚本作为第 3 步。

关于javascript - 如何使用 NodeJS 在 SSH2 上执行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20907125/

相关文章:

javascript - 如何修复 Javascript 中的 ‘TypeError: arr.map is not a function’ 错误

javascript - getColumn(id).width 与浏览器显示的宽度不一样

javascript - 以 "For Loop"上传到 Google Cloud Storage(异步)

postgresql - 修改pg_hba.conf

javascript - 使用 javascript document.addEventListener 在下一个窗口中打开选项卡

javascript - Node JS - 使用路由器添加更多页面(ejs 模板)

bash - 跨平台命令行脚本(例如 .bat 和 .sh)

sql - 如何统计文件被修改为特定日期时间格式的时间

javascript - 如何安装咕噜

node.js - 无法在 Pycharm 中将目录标记为 javascript 的测试源