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

问题描述:

很简单,我有节点脚本,我想每月执行一次。如何通过cron作业执行Node.js脚本?

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

但这不起作用,可能是因为路径或命令正在运行的shell。我试图通过cron执行节点的如下装置(测试用-v):

[email protected]:~$ node -v 
v0.4.2 

[email protected]:~$ sh node -v 
sh: Can't open node 

[email protected]:~$ bash node -v 
/usr/local/bin/node: /usr/local/bin/node: cannot execute binary file 

[email protected]:~$ /usr/local/bin/node -v 
v0.4.2 

[email protected]:~$ sh /usr/local/bin/node -v 
/usr/local/bin/node: 1: Syntax error: "(" unexpected 

[email protected]:~$ bash /usr/local/bin/node -v 
/usr/local/bin/node: /usr/local/bin/node: cannot execute binary file 

我已经跑出去的想法去尝试,有什么建议?

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

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

这竟然是一对夫妇的问题,完整路径如你所说固定的cron,但在脚本相对路径也是一个问题。 – Steve 2011-05-01 16:58:01

+0

@Steve你是如何解决相对路径问题的? – codecowboy 2014-02-01 09:48:04

+0

@Steve我正在使用配置模块(例如require('config').db),当通过crontab运行时,配置变量未被填充。 – codecowboy 2014-02-01 10:24:23

此外,只要把#!/usr/local/bin/node你要执行的脚本的顶部。然后它会自动知道用节点执行脚本。确保文件也是可执行的。

+13

'#!/ usr/bin/env node'有点更具前景,因为'env'会指向你的'node'安装的任何地方。 – 2012-08-01 15:36:13

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

你可以尝试换行它在一个shell脚本中,在crontab执行中设置一些环境变量。使用Linux Mint的工作不给定的路径,所以我用这个来解决工作
https://stackoverflow.com/a/27823675/608269

在我的笔记本电脑

:(具体PATH & NODE_PATH对于初学者)

尝试我的建议对这个类似的问题。

$ which node

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

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

编辑Cron作业

contab -e 

进入运行我们的节点文件

这将运行每一分钟。

*/1 * * * * * /bin/node /public/test.js 

完全教程 https://askmacgyver.com/blog/tutorial/how-to-run-node-scripts-from-a-cron-job