你怎么能通过cron作业执行一个Node.js脚本?

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

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

但这不起作用,可能是因为path或命令正在运行的shell。 我已经尝试了通过cron执行节点的下列方法(使用-v进行testing):

 steve@atom:~$ node -v v0.4.2 steve@atom:~$ sh node -v sh: Can't open node steve@atom:~$ bash node -v /usr/local/bin/node: /usr/local/bin/node: cannot execute binary file steve@atom:~$ /usr/local/bin/node -v v0.4.2 steve@atom:~$ sh /usr/local/bin/node -v /usr/local/bin/node: 1: Syntax error: "(" unexpected steve@atom:~$ bash /usr/local/bin/node -v /usr/local/bin/node: /usr/local/bin/node: cannot execute binary file 

我已经跑出了想法尝试,任何意见?

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

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

另外,只要将#!/usr/local/bin/node放在要执行的脚本的顶部即可。 然后它会自动知道执行与节点的脚本。 确保该文件是可执行的。

我不知道是否将脚本中的相对path更改为绝对path是个好主意
(当你的文件系统改变或者你在另一个环境中部署时会发生什么?)

您可以尝试将其封装在shell脚本中,在crontab执行中设置一些环境variables。 (特别是初学者的PATHNODE_PATH

试试我对这个类似问题的build议:
https://stackoverflow.com/a/27823675/608269

在我的笔记本电脑使用Linux的薄荷给定的path不工作,所以我用这个来解决。

$ which node

$ /usr/bin/node这为我工作。