Ubuntu 没有为节点js运行cron作业

Ubuntu 没有为节点js运行cron作业,ubuntu,cron,Ubuntu,Cron,我想运行一个脚本,将新记录添加到mongodb中 * * * * * echo ‘Run this command every minute’ >> file.log * * * * * node /home/ubuntu/mongodb_tutorial-movies/getMovies.js * * * * * node /home/ubuntu/mongodb_tutorial-movies/start.sh 更新代码: * * * * * echo ‘Run this co

我想运行一个脚本,将新记录添加到mongodb中

* * * * * echo ‘Run this command every minute’ >> file.log
* * * * * node /home/ubuntu/mongodb_tutorial-movies/getMovies.js
* * * * * node /home/ubuntu/mongodb_tutorial-movies/start.sh
更新代码:

* * * * * echo ‘Run this command every minute’ >> file.log
* * * * * node /home/ubuntu/mongodb_tutorial-movies/start.sh
* * * * * usr/local/bin/node /home/ubuntu/mongodb_tutorial-movies/getMovies.js
更新代码2:

which node
/usr/local/bin/node


PATH=/usr/sbin:/usr/bin:/sbin:/bin:usr/local/bin/node
* * * * * echo ‘Run this command every minute’ >> file.log
* * * * * node /home/ubuntu/mongodb_tutorial-movies/start.sh
* * * * * usr/local/bin/node /home/ubuntu/mongodb_tutorial-movies/getMovies.js
* * * * * node /home/ubuntu/mongodb_tutorial-movies/getMovies.js
这里“/home/ubuntu/mongodb_tutorial-movies/getMovies.js”是js文件的位置

Cron作业为第一个脚本运行,即它将echo文本记录到file.log中,但由于某些原因,它没有运行第二个脚本

我也尝试了第三个脚本,但没有效果。
.start.sh的内容

node getMovies.js
getMovies.js的代码

var colors = require('colors'); 
var mongoose = require('mongoose');

var db = mongoose.connection;

db.on('error', console.error);
db.once('open', function() {

});

mongoose.connect('mongodb://localhost/movie-db');

var movieSchema = new mongoose.Schema({
  title: String
, rating: String
, releaseYear: Number
, hasCreditCookie: Boolean
});

var Movie = mongoose.model('Movie', movieSchema);

var thor = new Movie({
  title: 'Thor'
, rating: 'PG-14'
, releaseYear: '2011'  
, hasCreditCookie: true
});

thor.save(function(err, thor) {
  if (err) return console.error(err);
  console.dir(thor);
});

console.log(' every 6 secodns '.green);

出于安全原因,Cron的
$PATH
只包含像
/bin
/usr/bin
这样的最小值。因此,
节点
很可能不在cron的
$PATH
上。解决方案可能是将crontab文件中的
节点
替换为可执行文件的完整路径,例如
/opt/node/bin/node
——您可以通过在shell中键入
哪个节点
,找到系统上的确切位置

另外,要从crontab运行shell脚本,您不需要
节点
可执行文件,所以从第三行删除它。 生成的crontab将如下所示(假设
/opt/node/bin/node
是完整路径,请参见上文)


@JP。我认为您没有抓住要点,至少在您的示例中没有更改节点调用。请看我更改的答案。我按照您上面所说的进行了更改,这是我更改的文件-请不要在英文/代码缩进中进行更改,本网站要求我批准这些技术,但我没有足够的分数来批准。在
usr/local/bin/node
前面缺少斜杠。应该是
/usr/local/bin/node
。另外第二行(
node/home/ubuntu/mongodb_tutorial-movies/start.sh
)前面不应该包含
node
,事实上,如果第三行工作正常,您根本不需要这一行。它现在工作了。。谢谢,@greet3我怎样才能在$Path变量中添加这个,这样我就不必写额外的东西了?这太笨拙了,请看cron手册页。我认为把它留在那里更实际。
* * * * * echo ‘Run this command every minute’ >> file.log
* * * * * /opt/node/bin/node /home/ubuntu/mongodb_tutorial-movies/getMovies.js
* * * * * /home/ubuntu/mongodb_tutorial-movies/start.sh