首页 > 解决方案 > 将 NPM 脚本作为 crontab (Ubuntu) 运行不起作用

问题描述

我有一个 NodeJS 脚本,它可以根据时间删除旧记录,当脚本运行时,它会获取从日期 x 到日期 y 的所有记录并删除它们,如果我以正确的方式重新运行这个脚本,它会说:“找不到要删除的记录”等。

该脚本公开为 NPM 脚本以便于使用,它在我的 package.json 中定义如下:

{
    ...
    "scripts": {
        "deleteOldRecords": "cd server && cross-env NODE_ENV=prod node scripts/deleteOldRecords.js"
    }
    ...
}

我希望这个 NPM 每 3 分钟运行一次,所以我这样定义它crontab

*/3 * * * * cd /my/project && npm run deleteOldRecords > /dev/null 2>&1

现在,我正在检查/var/log/syslog,我确实看到了一个输出,表明作业运行正常:

Jun  4 20:39:01 localhost CRON[19497]: (node-user) CMD (cd /my/project && npm run deleteOldRecords > /dev/null 2>&1)

问题是它没有执行实际操作,当我再次从控制台手动运行它时:

node-user@ip-0-0-0-0:/$ cd /my/project && npm run deleteOldRecords > /dev/null 2>&1

它正在查找要删除的记录并成功删除它们,这应该像上面提到的那样工作,因为运行 crontab 应该删除它们,而手动运行应该说“没有找到要删除的记录”。

知道为什么会这样吗?

标签: node.jsubuntunpmcron

解决方案


推荐阅读