Skip to content

Instantly share code, notes, and snippets.

@aadityabhatia
Created September 22, 2012 11:35
Show Gist options
  • Select an option

  • Save aadityabhatia/3765890 to your computer and use it in GitHub Desktop.

Select an option

Save aadityabhatia/3765890 to your computer and use it in GitHub Desktop.
node cluster that restarts when git HEAD is updated
cluster = require 'cluster'
if not cluster.isMaster then return require './app'
util = require 'util'
express = require 'express'
gitpull = require 'gitpull'
gitsha = require 'gitsha'
require 'colors'
numCPUs = require('os').cpus().length
cluster.fork() for i in [0...numCPUs]
cluster.on 'exit', (worker, code, signal) ->
if worker.suicide
console.log "Worker killed: pid: #{worker.process.pid}, code #{code}, signal #{signal}"
else
console.error "Worker died: pid: #{worker.process.pid}, code #{code}, signal #{signal}".red
cluster.fork()
updateListener = express.createServer()
updateListener.get '/update', (req, res) ->
gitsha '.', (error, output) ->
if error then return console.error output
initChecksum = output
console.log "initial checksum: #{output}"
console.log "gitpull'ing...".cyan
gitpull '.', (error, output) ->
if error then return console.error output
console.log "gitpull success"
gitsha '.', (error, output) ->
if error then return console.error output
console.log "final checksum: #{output}"
if output is initChecksum
return console.log "No updates found!".red
console.log "Update found, restarting workers!".green
worker.disconnect() for id, worker of cluster.workers
cluster.fork() for i in [0...numCPUs]
res.send 'Roger'
updateListener.listen 15325, ->
util.log "Listening for updates at " + updateListener.address().port
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment