如何通过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
此外,只要把#!/usr/local/bin/node
你要执行的脚本的顶部。然后它会自动知道用节点执行脚本。确保文件也是可执行的。
'#!/ 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
这竟然是一对夫妇的问题,完整路径如你所说固定的cron,但在脚本相对路径也是一个问题。 – Steve 2011-05-01 16:58:01
@Steve你是如何解决相对路径问题的? – codecowboy 2014-02-01 09:48:04
@Steve我正在使用配置模块(例如require('config').db),当通过crontab运行时,配置变量未被填充。 – codecowboy 2014-02-01 10:24:23