无法使用Node.js和Crontab

时间:2019-02-06 15:30:23

标签: node.js npm cron

我知道您可以通过以下操作在Crontab中运行Node.js脚本:

0 * * * * node /path/to/your/script.js

但是我想使用Crontab运行Node.js应用程序,而不是脚本。我创建了一个Node.js应用程序,以便使用Mocha,Chai和Selenium编写一些自动化测试,我想使用Crontab定期运行它。我将如何去做呢?目前,我是通过在命令行中编写代码来运行我的应用的:

npm run api-pro

其中api-pro是我package.json中的脚本,该脚本调用生产api的一些测试。

请注意,如果我只是尝试使用命令“ npm run api-pro”编写Crontab作业,它将无法识别命令npm(显然我的计算机中确实安装了Node)。

2 个答案:

答案 0 :(得分:0)

我想通过使用crontab,您正在Linux机器上运行节点应用程序,那么为什么不编写一个简单的bash脚本呢?

run_test.bash

#!/bin/bash
cd /path/to/your/app && \
npm run api-pro

然后您的crontab应该如下所示:

0 * * * * /path/to/your/bash/script/run_test.bash

当然,您的用户必须可以执行脚本:

$ chmod u+x run_test.bash

答案 1 :(得分:0)

我的猜测是,用户cron使用的PATH配置方式与您的用户不同,并且不知道nodenpm

您可以尝试使用命令which node来知道您的节点二进制文件在(/some/path/to/node

然后,您可以在crontab中使用绝对路径:

0 * * * * /some/path/to/node /path/to/your/script.js

编辑:

nodenpm添加到$PATH与使用绝对路径之间的区别在于,绝对路径将对一个可执行文件有效,因为Linux不必搜索{{1} }。 像添加用户一样,添加到PATH将使Linux能够识别PATHnode。它们位于同一文件夹中的事实不会对此造成影响。