4

Goal:

I am trying to run a watch task in my Gruntfile.js as a daemon.

Normally, I would execute this script like: grunt watch.

Gruntfile.js:

module.exports = function(grunt) {

  grunt.initConfig({
    concat: {
      options: {
        separator: ''
      },
      dist: {
        src: ['static/js/**/*.js'],
        dest: 'app.js'
      }
    },
    watch: {
      files: ['<%= concat.dist.src %>'],
      tasks: ['concat']
    }
  });

  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-contrib-concat');
};

Question:

How do I spawn grunt watch as a daemon?

Update:

It appears as though considerations for this have already been made:
https://github.com/shama/grunt-hub#watching-forever
https://github.com/shama/grunt-hub/issues/3

Dan Kanze
  • 18,485
  • 28
  • 81
  • 134
  • 1
    Not sure why you would want to run grunt with forever. The point with forever is to keep a server alive? Would `nohup grunt watch &` work? – Andreas Hultgren Mar 25 '13 at 20:22
  • @AndreasHultgren Monitoring processes, starting/stopping with `forever` would be much more fluid than using `nohup`. I will need to be able to spawn muitiple grunt jobs for different projects, im currently looking into github.com/shama/grunt-hub which looks promising. – Dan Kanze Mar 27 '13 at 19:14
  • I've been doing something like this on a Vagrant VM, it makes for a nice pre-packaged workflow for teams with varied skill sets. – joemaller Nov 24 '13 at 17:59

2 Answers2

3

you can use https://github.com/nodejitsu/forever exmaple

forever start gruntstart.js

gruntstart.js:

var exec = require('child_process').exec;

exec('grunt watch > log/grunt.log',
    function (error, stdout, stderr) {
        console.log('stdout: ' + stdout);
        console.log('stderr: ' + stderr);
        if (error !== null) {
           console.log('exec error: ' + error);
        }
});
0

I'm a newbie in javascript, but I solved this problem with: tmux

  1. One pane for simple operations like git and etc.
  2. Other is for "grunt watch"

Even if I close the console tmux will go on with watching :D
https://i.stack.imgur.com/4clqc.jpg

Andrey
  • 136
  • 2
  • 9