Run one or more forever scripts/actions (forked/based on grunt-forever)


Credit to @bustardcelly and grunt-forever, which this plugin is forked from / based on. This is just that but as a multi task, with a bug or two fixed, and some added features.

This plugin requires Grunt ~0.4.1

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-forever-multi --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:



    foreverMulti: {
        basic: {
            file: 'test/run.js'
        appServer: {
            action: 'restart',
            file: 'test/run.js',
            options: ["-m '"" port "+cfgJson.server.port+"'"]
        testServer: {
            // action: 'restart',       //default is restart if no action specified 
            file: 'test/run.js',
            options: ["config=test", "-m '"" port "+cfgTestJson.server.port+"'"]

Command Line

  • command line arguments (grunt.option)
    • action to override the action (i.e. --action=start will run the forever start action even if the task config is set to restart or stop action)
# run all tasks in this multiTask with their defaults / standard config
grunt foreverMulti
# force a forever restart irregardless of what the config action is
grunt foreverMulti --action=restart
# run just one of the tasks
grunt foreverMulti:appServer

The options / keys for each task mimic forever-monitor/forever: including file and action keys. The only supported options currently are:

  • file The file/script to run (i.e. index.js or server.js)
  • action What to run forever with - see: Only start, restart, stop are supported currently.
  • options Command line arguments to pass to forever

Other options including, but not limited to, silent, uid, max, command, sourceDir, watch, logFile, outFile, errFile are NOT currently supported.

  • For Continuous Integration - to restart your server(s) after a git push/webhook to get the file changes.
    • i.e.: Use grunt to: 1. build new files/assets with the new code, 2. restart forever to update the running server/processes with the new code, 3. wait/timeout (sometimes necessary to allow the server time to fully restart), 4. run automated tests on the new code

See for notes on publishing npm modules in general.

  • run grunt to ensure no issues
  • bump version number in package.json
  • update (and potentially this file
  • git commit changes
  • npm publish
  • push to github (to update there as well)
  • async / forever issues intermittently.. sometimes forever.startDaemon is called but grunt finishes WITHOUT done() being called (from this.async()) - this causes the script to exit - sometimes before the forever process is started and it stops future execution of any other tasks in the multi-task.. I'm not sure what's going on here or how to fix..
  • add support for more (all?) forever options - i.e. uid, command, watch