2017-03-27 48 views
1

我一直在试图弄清楚如何在我的Mac OS X上使用crontabs我有一个节点脚本,我希望能够以预定方式执行。这是我在我的crontab文件中使用的行。通过在OS X上的crontab执行Node.JS脚本

30 * * * * /usr/local/bin/node /Users/pmanca/Google Drive/JavaScript/code/Peter/marketing-tests/testBackup.js 

虽然它似乎没有执行。任何人都可以看到我做错了什么?在Mac或Linux服务器上还有另一种方法来完成我在找的东西?你也可以在linux中使用同一行作为crontab作业(除了需要更改的文件路径外)?

+2

尝试转义空间:'30 * * * */usr/local/bin/node/Users/pmanca/Google \ Drive/JavaScript/code/Peter/marketing-tests/testBackup.js' – amenadiel

回答

0

您可以使用两个故宫的包之一,cronagenda

在Linux和OS X.的Cron两个工作最好的,如果你的任务是轻量级的,你不需要你的工作将一直持续到DB 。议程使用mongodb进行持久化。

您可以在cron配置工作作为:

var CronJob = require('cron').CronJob; 
var job = new CronJob({ 
    cronTime: '00 */30 * * * *', 
    onTick: function() { 
    /* 
    * Runs every 30 minutes, every hour, every day, all week 
    */ 
    }, 
    start: false, 
    timeZone: 'America/Los_Angeles' 
}); 
job.start(); 

要在服务器后台运行,你可以用forever

运行它记住的cron有一个额外的第6位到左侧为秒。否则,语法是相同的。

+0

哦,这太棒了。我想要运行的任务是在MongoDB中备份数据库。你是否仍然认为cron是正确的方式? Agenda的意思是使用mongodb进行持久化。 – Peter3

+0

议程将您定义的作业存储到mongo集合(我猜想是agendaJobs),并根据存储在其中的值运行作业。 另一方面,Cron使用系统时间来定义作为脚本运行的一部分的作业。 –

+0

由于它依赖于db,以及难以设置与时区有关的工作,所以我个人对于议程有过不好的体验。我至少在两个生产实例中使用了cron,其中一个实例需要洛杉矶时区。工作顺利,没有小故障。 –