我有一个脚本,我想在 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 数据库中的存储过程)
TL;DR: 尝试将节点项目移至
~
我最近遇到了这个问题,似乎是由于 MacOS(我认为是新的)奇怪的权限系统造成的。
我使用的是 MacOS
12.7.6
我不明白这个新系统是如何工作的,也不明白它与传统的类 UNIX 文件权限有何关系,但我注意到 MacOS 现在允许应用程序读取用户目录中的特定位置,类似于位置、相机、麦克风等访问工作正常。
例如
Allow Firefox to access files on your Desktop?
(Firefox 将能够从桌面打开文件,但无法从其他地方打开文件)
我认为这里的问题是
cron
无法访问我的节点项目所在的Desktop
(在您的情况下是文档)。我不知道如何授予 cron 访问其他位置的权限,但我通过将节点项目移动到~
解决了我的问题。
请详细解释这是什么或它是如何工作的???