节点错误在远程服务器上生成/ bin / sh ENOENT

时间:2018-10-02 18:01:01

标签: python node.js

好的,我知道关于此主题有多个问题,我读了大多数问题,没有任何帮助。

我正在尝试让节点服务器定期运行python脚本。为此,我有以下代码:

const
    { exec } = require('child_process');
const fs = require('fs');


let config = [
{
    "title": "My Python Script",
    "description": "A script that can scrape website data",
    "command": "python3 collect_data.py",
    "dir": "../file_folder",
    "minutesBetweenExecution": 60
}
];



const intervals = [];


function startCronjobs() {
    while (intervals.length > 0) {
        clearInterval(intervals.pop());
    }

    console.log("Starting cronjobs...")

    for (let i = 0; i < config.length; i++) {
        const cron = config[i];
        const func = () => {
            exec(cron.command, { cwd: cron.dir, timeout: 40 * 60000 }, (err, stdout, stderr) => {
                if (err) {
                    // node couldn't execute the command
                    console.error('Command could not be executed. Error: ', err, ' cron entry: ', cron.title);
                    return;
                }
                console.log('Output after ', cron.title);
                // the *entire* stdout and stderr (buffered)
                console.log(`stdout: ${stdout}`);
                console.log(`stderr: ${stderr}`);
            });
        };

        intervals.push(setInterval(func, parseInt(cron.minutesBetweenExecution) * 60000));
        console.log('Started Cronjob', cron.title);
        func();
    }
}

startCronjobs();

如您所见,脚本仅使用指定的命令和工作目录运行exec。 但是,当尝试执行func()节点时,会引发上面指定的错误。

我已经尝试解决此问题:

  • 为工作目录使用绝对路径
  • 检查python3是否在PATH中:which python3返回/usr/bin/python3
  • 使用sudo
  • 运行节点服务器
  • 调试已登录process.env.PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

关于这个的奇怪的事情是:当我试图在本地linux机器上运行它时,它运行完美。但是,在我的远程服务器上却没有。我想念什么?

1 个答案:

答案 0 :(得分:0)

好吧,我是个白痴。

我的本​​地计算机上的文件夹的名称与git repo的名称不同,因此与服务器上的文件夹的名称不同,因为我只是git克隆了它。

修复:将工作目录中的_更改为-,它可以工作...