我想运行一个脚本,将新记录添加到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中,但由于某种原因它不运行第二个脚本。
我也尝试了第3个脚本但没有效果。
.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);
答案 0 :(得分:0)
出于安全原因,Cron的$PATH
仅包含最低限度/bin
和/usr/bin
。所以node
可能不在cron的$PATH
上。解决方案可能是将crontab文件中的node
替换为可执行文件的完整路径,例如/opt/node/bin/node
- 您可以在shell中输入which node
来查找系统中的确切位置。
此外,要从crontab运行shell脚本,您不需要node
可执行文件,因此请从第三行删除它。
生成的crontab将如下所示(假设/opt/node/bin/node
是完整路径,请参见上文)
* * * * * 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