你怎么能通过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。 (特别是初学者的PATH
& NODE_PATH
)
试试我对这个类似问题的build议:
https://stackoverflow.com/a/27823675/608269
在我的笔记本电脑使用Linux的薄荷给定的path不工作,所以我用这个来解决。
$ which node
$ /usr/bin/node
这为我工作。