节点 cron 权限错误:EPERM:不允许操作,打开文件名

问题描述 投票:0回答:1

我有一个脚本,我想在 test.js 文件中每分钟运行一次:

#!/Users/nick/.nvm/versions/node/v18.3.0/bin/node
// ^ shebang line

require('dotenv').config({ path: '../../.env' });
const { Client } = require('pg'); // do NOT convert to import, otherwise it will fail

const dbConfig = {
    host: process.env.PG_HOST,
    port: Number(process.env.PG_PORT),
    user: process.env.PG_USER,
    password: process.env.PG_PASSWORD,
    database: process.env.PG_DB,
};

async function runProcedure() {
    const client = new Client(dbConfig);

    try {
        await client.connect();

        // Call your stored procedure
        const result = await client.query('CALL ManageBalanceDueAndCommissionStatus()');

        console.log('Stored procedure executed successfully:', result);
    } catch (error) {
        console.error('Error executing stored procedure:', error);
    } finally {
        await client.end();
    }
}

runProcedure();

我这样做(在我的 Mac 上的 CLI 中)是为了尝试让 cron 工作:

运行:

crontab -e

在里面添加以下内容:

* * * * * node ~/Users/nick/Documents/cron/test.js > ~/Users/nick/Documents/cron/logs/cron.log 2>&1

当我尝试时,我得到了这个错误:

/bin/sh: node: command not found

然后我尝试将 cron 更改为:

* * * * * ~/.nvm/versions/node/v18.3.0/bin/node ~/Users/nick/Documents/cron/test.js > ~/Users/nick/Documents/cron/logs/cron.log 2>&1

但是,我收到此错误:

node:internal/fs/utils:345
    throw err;
    ^

Error: EPERM: operation not permitted, open '/Users/nick/Documents/cron/test.js'
    at Object.openSync (node:fs:591:3)
    at Object.readFileSync (node:fs:459:35)
    at Module._extensions..js (node:internal/modules/cjs/loader:1122:18)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Module._load (node:internal/modules/cjs/loader:827:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  errno: -1,
  syscall: 'open',
  code: 'EPERM',
  path: '/Users/nick/Documents/cron/test.js'
}

Node.js v18.3.0

我还尝试更改 test.js 文件的权限 - 运行时

ls -l
它显示权限为
-rwxr-xr-x

我看过其他帖子,在其他地方研究过等等,但我没有想法。有谁知道如何解决这个问题?或者不是,我必须使用哪些替代方法(很多)来运行 cron javascript 文件? (它只是调用 Postgres 数据库中的存储过程)

node.js cron file-permissions
1个回答
0
投票

TL;DR: 尝试将节点项目移至

~

我最近遇到了这个问题,似乎是由于 MacOS(我认为是新的)奇怪的权限系统造成的。

我使用的是 MacOS

12.7.6

我不明白这个新系统是如何工作的,也不明白它与传统的类 UNIX 文件权限有何关系,但我注意到 MacOS 现在允许应用程序读取用户目录中的特定位置,类似于位置、相机、麦克风等访问工作正常。

例如

Allow Firefox to access files on your Desktop?
(Firefox 将能够从桌面打开文件,但无法从其他地方打开文件)

我认为这里的问题是

cron
无法访问我的节点项目所在的
Desktop
(在您的情况下是文档)。我不知道如何授予 cron 访问其他位置的权限,但我通过将节点项目移动到
~
解决了我的问题。

请详细解释这是什么或它是如何工作的???

© www.soinside.com 2019 - 2024. All rights reserved.