如何通过cron作业执行Node.js脚本?

如何通过cron作业执行Node.js脚本?,node.js,cron,crontab,Node.js,Cron,Crontab,很简单,我有一个每月执行一次的节点脚本 30 6 1 * * node /home/steve/example/script.js 但这不起作用,可能是因为运行命令的路径或shell。我尝试了以下通过cron执行节点的方法(使用-v测试): 我已经没有办法尝试了,有什么建议吗?只需在cron作业中提供node/usr/local/bin/node的完整路径,如: 30 6 1 * * /usr/local/bin/node /home/steve/example/script.js 另外,只

很简单,我有一个每月执行一次的节点脚本

30 6 1 * * node /home/steve/example/script.js
但这不起作用,可能是因为运行命令的路径或shell。我尝试了以下通过cron执行节点的方法(使用-v测试):


我已经没有办法尝试了,有什么建议吗?

只需在cron作业中提供node
/usr/local/bin/node
的完整路径,如:

30 6 1 * * /usr/local/bin/node /home/steve/example/script.js

另外,只要把
#放进去就行了/要执行的脚本顶部的usr/local/bin/node
。然后它将自动知道如何使用节点执行脚本。确保文件也是可执行的。

我不知道将脚本中的相对路径更改为绝对路径是否是个好主意
(当文件系统发生更改或部署到其他环境时会发生什么情况?)

您可以尝试将其包装在shell脚本中,在crontab执行中设置一些环境变量。(特别是
PATH
NODE\u PATH
供初学者使用)

请尝试我对类似问题的建议:

在我使用Linux的笔记本电脑中,给定的路径不起作用,所以我用它来解决问题

$哪个节点

$/usr/bin/node

这对我很有用。

对节点别名和要运行的文件使用绝对路径

编辑Cron作业

crontab -e
crontab -e
运行节点文件的条目

这将每分钟运行一次

*/1 * * * * * /bin/node /public/test.js
完整教程

这里的答案是使用绝对路径会给运行更大的节点应用程序带来重大问题

真正完整的解决方案

编辑Cron作业

crontab -e
crontab -e
查找节点路径

which node
CD放入目标文件夹,然后根据节点路径更改Cron作业并运行脚本

*/2 * * * * cd /home/destination/path && /bin/node index.js

这将允许您运行完整的NodeJS应用程序,而不会出现所有错误,例如如何为index.js文件使用绝对路径

您还可以在用户crontab上指定二进制文件的路径,如:

PATH=/bin:/usr/bin:/usr/local/bin

* * * * * cd your/path && node foo.js
* * * * * cd your/path && npm run bar

结果出现了几个问题,正如您所说的完整路径修复了cron,但脚本中的相对路径也是一个问题。@Steve您是如何修复相对路径问题的?@Steve我正在使用配置模块(例如require('config').DB),当通过crontab运行时,配置变量未填充。警告!如果您使用nvm或n来管理节点安装-放置
/usr/local/bin/node
-可能无法工作!要获得节点的实际路径,请使用
哪个节点
——然后将该路径放在脚本之前。例如,我正在使用nvm中的节点0.10.32,因此我到节点的路径是:
/home/username/.nvm/v0.10.32/bin/node
@YemSalat最好以独立于节点版本的方式声明:#为cronjob()启用节点/nvm所需的doc()#doc cron默认使用短路径=/usr/bin:/bin,并且不执行/root/.bashrc(等于/root/.bashrc)#doc nvm(节点版本管理器)不在crontab作业中配置自身(这仅对my/root/.bashrc中的交互式shell进行配置)。导出nvm_DIR=“/root/.nvm”[-s“$nvm_DIR/nvm.sh”]&&&.$nvm_DIR/nvm.sh”#这将加载nvm
#!/usr/bin/env node
是一个更具前瞻性的例子,因为
env
将指向安装
节点的位置。请阅读('nodejs-cron-job-must-know'部分)。需要使用
cd
命令导航到脚本所在的目录。我可能尝试了所有方法,但只是在这之后它才开始工作。太好了!这就是我想要的!感谢正确答案,我尝试了投票最多的解决方案,但我的脚本不起作用,然后我尝试了其他解决方案,lig node cron,但您的解决方案无效ks,简单易懂!这对我来说也是一个完美的答案,谢谢!这个对我来说也很有用。谢谢。