         for line in output.split('\n')
             process(line)
 
+        cb?()
+
         # Now watch (NOTE: don't do --no-headers here, in case there wasn't nothing output above)
-        r = child_process.spawn('kubectl', ['get', 'deployments', '--show-labels',
-                                            '--selector=run=smc-project', '--watch'])
+        r = child_process.spawn('kubectl', split('get deployments --show-labels --selector=run=smc-project --watch-only'))
+
         stdout = ''
         r.stdout.on 'data', (data) ->
             stdout += data.toString()

                    log "idle_timeout_check '#{project_id}' -- set run=false"

start_idle_timeout_monitor = (cb) ->
    setInterval(idle_timeout_check, 60*1000)
    cb()

# Maintain current status of all project deployments
init_kubectl_watch = (cb) ->
    # The Headers include: NAME   DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE  LABELS
    # kubectl get deployments --show-labels --selector=run=smc-project --watch

    headers = undefined
    process = (line) ->
        v = line.match(/\S+/g)   # split on whitespace
        if not v or v.length == 0
            return
        if line.indexOf('smc-project') == -1

                z = projects[project_id] ?= {}
                changed = {}
                for field in FIELDS
                    if JSON.stringify(z[field]) != JSON.stringify(x.new_val[field])   # use due to resources being object
                        z[field] = x.new_val[field]
                        changed[field] = true
                if state == 'ready' and z.run and not changed.run and (changed.resources or changed.preemptible or changed.disk_size or changed.storage_ready)
                    log("deployment change for '#{project_id}' ", changed)
                    # Currently running with no change to run state.
                    # Something changed which can be done via editing the deployment using kubectl
                    kubectl_update_project(project_id)
