代码之家  ›  专栏  ›  技术社区  ›  SirBT

如何解决以下EACCES:在我的nodejs应用程序中拒绝权限?

  •  0
  • SirBT  · 技术社区  · 1 年前

    我正试着把 nodejs 每当我在github上更新代码时,该脚本就会自动更新我在AWS服务器上的代码。脚本使用 网状挂钩 。以下代码是调用的脚本 webhook_server.js

    由于某些原因,每当我尝试运行脚本时,都会出现以下错误:

    Error writing to log file: Error: EACCES: permission denied, open '/home/ubuntu/webhook-handler/webhook_server.log' 
    

    由于这是一个权限问题,我认为以下命令可以解决问题,但问题仍然存在:

    sudo chmod 755 /home/ubuntu/webhook-handler
    sudo chmod 644 /home/ubuntu/webhook-handler/webhook_server.log
    

    以下是内容 webhook_server.js 文件

    const express = require('express');
    const bodyParser = require('body-parser');
    const { exec } = require('child_process');
    const fs = require('fs');
    
    const app = express();
    const port = 3002;
    const logFile = '/home/ubuntu/webhook-handler/webhook_server.log';
    
    const log = (message) => {
        const timestamp = new Date().toISOString();
        try {
            fs.appendFileSync(logFile, `${timestamp} ${message}\n`);
        } catch (err) {
            console.error(`Error writing to log file: ${err}`);
        }
    };
    
    app.use(bodyParser.json());
    
    app.post('/webhook', (req, res) => {
        log('\n===========================');
        log('Received a webhook event');
    
        // Verify the event is a push event
        if (req.body.ref === 'refs/heads/main') {
            log('Push event on main branch detected');
            // Execute the script to update the code
            exec('/home/ubuntu/update_code.sh', (error, stdout, stderr) => {
                if (error) {
                    log(`Error executing script: ${error.message}`);
                    return res.status(500).send({ message: 'Error executing script' });
                }
                log(`stdout: ${stdout}`);
                log(`stderr: ${stderr}`);
                    res.status(200).send({ message: 'Script executed successfully' });
            });
        } else {
            log('Not a push event on main branch');
            res.status(400).send({ message: 'Not a push event on main branch' });
        }
    });
    
    app.listen(port, () => {
        log(`Webhook handler listening at http://localhost:${port}`);
    });
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   Thanh Nguyen Van    1 年前

    切换到 root 帐户并执行以下命令:

    chown -R ubuntu:ubuntu /home/ubuntu/webhook-handler

    logout 返回到 ubuntu 帐户,然后运行脚本。

    推荐文章