NodeJS 为什么我的crontab文件没有执行我的节点脚本?

busg9geu  于 2023-11-17  发布在  Node.js
关注(0)|答案(1)|浏览(151)

我在以下路径/Users/SomeName/Desktop/Personals/auto-stock2/update_contracts.js中有一个节点脚本
我想每5分钟执行一次这个脚本,在工作日的上午9:30-下午4:00之间,这是我的cronjob:

30-59/5 9     * * 1-5 /usr/local/bin/node /Users/SomeName/Desktop/Personals/auto-stock2/update_contracts.js > /var/log/update_contracts_job.log 2>&1
*/5     10-15 * * 1-5 /usr/local/bin/node /Users/SomeName/Desktop/Personals/auto-stock2/update_contracts.js > /var/log/update_contracts_job.log 2>&1
0       16    * * 1-5 /usr/local/bin/node /Users/SomeName/Desktop/Personals/auto-stock2/update_contracts.js > /var/log/update_contracts_job.log 2>&1

字符串
如您所见,我为node和脚本提供了绝对路径;无论出于何种原因,脚本从未运行。我一直在检查update_contracts_job.log文件以验证这一点。
在用户目录下运行crontab -l会返回crontab的内容,我还运行了sudo crontab -u SomeName -l,它也会显示这个文件。
我可以通过查看本地邮件获得一些反馈:

cd /var/mail
cat SomeName


邮件正文显示:/bin/sh: /var/log/update_contracts_job.log: Permission denied
看起来是某种类型的权限问题导致日志无法写入。我已经从我的cronjob中删除了写入日志文件> /var/log/update_contracts_job.log 2>&1的部分,现在我看到了这个错误

Error: EPERM: operation not permitted, open '/Users/SomeUser/Desktop/Personals/auto-stock2/update_contracts.js'
    at Object.openSync (fs.js:476:3)
    at Object.readFileSync (fs.js:377:35)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1090:18)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Function.executeUserEntryPoint Äas runMainÅ (internal/modules/run_main.js:72:12)
    at internal/main/run_main_module.js:17:47 ä
  errno: -1,
  syscall: 'open',
  code: 'EPERM',
  path: '/Users/SomeUser/Desktop/Personals/auto-stock2/update_contracts.js'
å

gcxthw6b

gcxthw6b1#

这是因为cron没有完全的磁盘访问权限.在这篇文章之后添加cron到完全访问权限:https://www.hashbackup.com/hashbackup/technical/fulldiskaccess.html

相关问题