How do I autostart meanjs on the boot of my ubuntu server?

Hi all,

I just installed MEAN.JS on my ubuntu 14. The tutorial I found on DigitalOcean
https://www.digitalocean.com/community/tutorials/how-to-install-a-mean-js-stack-on-an-ubuntu-14-04-server

which as you can see on their tutorial is launched via:
cd /opt/mean
grunt

Open in new window


When I run this command my shell is occupied by this and I can't use it for anything else.
If I close the shell mean.js goes offline.

I would like it to start with the boot and stay on always.

Could someone suggest a method to achieve this please? By the way if I need to create and save a .sh script or similar, please also help me with the procedure to do so, as I have no experience yet with these things.

thanks in advance
badwolfffAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Mark BullockQA EngineerCommented:
You can launch it in the back ground by adding " &" to the end of your command.
grunt &

Open in new window


To see the jobs running in the background:
jobs -l

Open in new window


To run it on startup, create a shell script, let's call it grunt.sh in /etc/init.d/ that has your two commands.

You'll have to enable execution of the script file. The sudo command temporarily gives you permission to make changes to the file in the /etc/init.d directory.
sudo chmod +x /etc/init.d/grunt.sh

Open in new window

0
badwolfffAuthor Commented:
Hi
Thanks
Tried it
Doesn't work
Any other suggestions?
0
badwolfffAuthor Commented:
By the way "grunt" or "grunt &" do not work on my shell unless you do "cd /opt/mean" first. Maybe that's the problem?

Thanks
0
The 7 Worst Nightmares of a Sysadmin

Fear not! To defend your business’ IT systems we’re going to shine a light on the seven most sinister terrors that haunt sysadmins. That way you can be sure there’s nothing in your stack waiting to go bump in the night.

serialbandCommented:
The ampersand following a command tells the command to run in the background.

You can run it in one step instead of with the cd
/opt/mean/grunt &


You can also background a running command by pressing ctrl z, then typing bg.
With your previous sequence.
cd /opt/mean
grunt

Open in new window

The prompt doesn't return.  At this point press ctrl z and you will get a prompt, but the program will be paused.
Type
bg
and it will become a background process.

In your script, you may not have the same environment as in your shell, so it's always best to use the full path to call your commands.
/opt/mean/grunt
0
badwolfffAuthor Commented:
Hi Serialband,

doesn't work. Also that job -l command doesn't work.

Any other suggestions?

thanks
0
nociSoftware EngineerCommented:
doesn't work is kinda non descriptive. If a command fails mostly an messages is issued.
i think the job command should be spelled as jobs (with s)
0
badwolfffAuthor Commented:
Sorry about the delay guys.

Well I did what Serialband suggested and rebooted my VPS.
After reboot I tried to load the mean.js page but nothing showed up.

When I run the jobs -l command nothing happens:
lupocatttivo@octane:~$ jobs -l
lupocatttivo@octane:~$

Open in new window


If I try it with sudo I get and error:
lupocatttivo@octane:~$ sudo jobs -l
sudo: jobs: command not found

Open in new window



Also I am unable to run the /opt/mean/grunt or the /opt/mean/grunt & commands as suggested above:
lupocatttivo@octane:~$ /opt/mean/grunt
-bash: /opt/mean/grunt: No such file or directory
lupocatttivo@octane:~$ /opt/mean/grunt &
[2] 25104
lupocatttivo@octane:~$ -bash: /opt/mean/grunt: No such file or directory

Open in new window


This is despite the fact that I can do:
lupocatttivo@octane:~$ cd /opt
lupocatttivo@octane:/opt$ cd mean

Open in new window


Also if I try the grunt & command I can't still use my shell.
When I run the command, mean.js works. Then on the shell I can if I do a Ctrl+Z and then type bg, but then the service exits too:
cd /opt/mean
grunt &
[ctrl + z]
bg
[1]+ grunt &

[1]+  Stopped                 grunt
lupocatttivo@octane:/opt/mean$

Open in new window



Any ideas anyone?
All I would like is that the service start automatically at every reboot and stay up without any manual intervention.

thanks
0
nociSoftware EngineerCommented:
jobs is a shell internal and shows all sub/child processes.
so it wouldn't work on sudo.

That it doesn't show anything means there are nu jobs...

Doing "grunt &" should already background a process (still showing up in  a jobs command though).
the output of jobs should look like line 7 in the last example.

If a background job wants to do i/o it will do a SIGSTOP until it can be done.
to prevent all that use:

nohup grunt >grunt.log &
then output will go to the background  and a logout will leave the job running, input will be from /dev/null
0
badwolfffAuthor Commented:
Hi Noci,

I tried it and I get this output:
lupocatttivo@octane:~$ nohup grunt >grunt.log &
[1] 32559
lupocatttivo@octane:~$ nohup: ignoring input and redirecting stderr to stdout

Open in new window


Mean.js in the meantime does not still work.

By the way I am not a Ubuntu expert so please when you explain command could you be more explicit.
Your explanation above was a little difficult for me to follow

thanks
0
nociSoftware EngineerCommented:
now what is showing in grunt.log?
0
badwolfffAuthor Commented:
Sorry Noci, am away from office on business trip. When I am back tomorrow I will check and respond with the log.

thanks
0
Docteur_ZCommented:
You said
By the way "grunt" or "grunt &" do not work on my shell unless you do "cd /opt/mean" first. Maybe that's the problem?

and


Also I am unable to run the /opt/mean/grunt or the /opt/mean/grunt & commands as suggested above:

lupocatttivo@octane:~$ /opt/mean/grunt
-bash: /opt/mean/grunt: No such file or directory
lupocatttivo@octane:~$ /opt/mean/grunt &
[2] 25104
lupocatttivo@octane:~$ -bash: /opt/mean/grunt: No such file or directory

Open in new window


                                       



For me it means that your command is not in this directory.
What does it say when you issue

which grunt

Open in new window



Then use the returned fullpath.
0
badwolfffAuthor Commented:
sorry guys I was away on a long business trip

Docteur Z here is what I get
lupocatttivo@octane:~$ which grunt
/usr/local/bin/grunt

Open in new window


and Noci here are the contents of grunt.log:
grunt-cli: The grunt command line interface. (v0.1.13)

Fatal error: Unable to find local grunt.

If you're seeing this message, either a Gruntfile wasn't found or grunt
hasn't been installed locally to your project. For more information about
installing and configuring grunt, please see the Getting Started guide:

http://gruntjs.com/getting-started

Open in new window


thanks again guys and sorry for the delay
0
badwolfffAuthor Commented:
any ideas?
thanks
0
Docteur_ZCommented:
Either it isn't installed correctly or your path is wrong.
0
badwolfffAuthor Commented:
Any suggestions on how to fix it?
I followed the instructions on digital ocean by the letter. No one else on that page seems to find it not working. Strange!

Or perhaps help me with a command to uninstall it and if anyone has any ideas of another better step-by-step installation tutorial?

In general any and all help will be highly appreciated

Thanks in advance
0
nociSoftware EngineerCommented:
So i did install according to the manual (except for nodejs, for which my system has a package)
and mongo. I didn't start mongo yet... and yes grunt does start.
So what step was missed...

/usr/local directory use does indicate that maybe the configure phase may need some extra parameters, like --prefix=/usr

testnode # npm install -g bower grunt-cli
/usr/bin/grunt -> /usr/lib/node_modules/grunt-cli/bin/grunt
/usr/bin/bower -> /usr/lib/node_modules/bower/bin/bower
grunt-cli@0.1.13 /usr/lib/node_modules/grunt-cli
├── resolve@0.3.1
├── nopt@1.0.10 (abbrev@1.0.5)
└── findup-sync@0.1.3 (lodash@2.4.2, glob@3.2.11)

bower@1.4.1 /usr/lib/node_modules/bower
├── is-root@1.0.0
├── junk@1.0.1
├── stringify-object@1.0.1
├── user-home@1.1.1
├── abbrev@1.0.5
├── chmodr@0.1.0
├── rimraf@2.3.3
├── archy@1.0.0
├── opn@1.0.2
├── bower-logger@0.2.2
├── bower-endpoint-parser@0.2.2
├── graceful-fs@3.0.6
├── lockfile@1.0.0
├── lru-cache@2.6.2
├── nopt@3.0.1
├── retry@0.6.1
├── tmp@0.0.24
├── request-progress@0.3.1 (throttleit@0.0.2)
├── q@1.4.0
├── shell-quote@1.4.3 (array-filter@0.0.1, array-map@0.0.0, array-reduce@0.0.0, jsonify@0.0.0)
├── semver@2.3.2
├── which@1.1.1 (is-absolute@0.1.7)
├── p-throttler@0.1.1 (q@0.9.7)
├── fstream@1.0.6 (inherits@2.0.1)
├── chalk@1.0.0 (escape-string-regexp@1.0.3, ansi-styles@2.0.1, supports-color@1.3.1, strip-ansi@2.0.1, has-ansi@1.0.3)
├── promptly@0.2.0 (read@1.0.5)
├── bower-json@0.4.0 (intersect@0.0.3, deep-extend@0.2.11, graceful-fs@2.0.3)
├── mkdirp@0.5.0 (minimist@0.0.8)
├── fstream-ignore@1.0.2 (inherits@2.0.1, minimatch@2.0.7)
├── tar-fs@1.5.0 (pump@1.0.0, tar-stream@1.1.4)
├── glob@4.5.3 (inherits@2.0.1, once@1.3.2, inflight@1.0.4, minimatch@2.0.7)
├── insight@0.5.3 (object-assign@2.0.0, async@0.9.0, lodash.debounce@3.0.3, os-name@1.0.3, tough-cookie@0.12.1)
├── decompress-zip@0.1.0 (mkpath@0.1.0, touch@0.0.3, readable-stream@1.1.13, binary@0.3.0)
├── update-notifier@0.3.2 (is-npm@1.0.0, string-length@1.0.0, semver-diff@2.0.0, latest-version@1.0.0)
├── request@2.53.0 (caseless@0.9.0, json-stringify-safe@5.0.0, forever-agent@0.5.2, aws-sign2@0.5.0, stringstream@0.0.4, oauth-sign@0.6.0, tunnel-agent@0.4.0, isstream@0.1.2, node-uuid@1.4.3, qs@2.3.3, combined-stream@0.0.7, form-data@0.2.0, mime-types@2.0.11, http-signature@0.10.1, bl@0.9.4, tough-cookie@1.1.0, hawk@2.3.1)
├── github@0.2.4 (mime@1.3.4)
├── cardinal@0.4.4 (ansicolors@0.2.1, redeyed@0.4.4)
├── bower-registry-client@0.3.0 (request-replay@0.2.0, graceful-fs@2.0.3, rimraf@2.2.8, lru-cache@2.3.1, async@0.2.10, mkdirp@0.3.5, request@2.51.0)
├── mout@0.11.0
├── bower-config@0.6.1 (osenv@0.0.3, graceful-fs@2.0.3, optimist@0.6.1, mout@0.9.1)
├── configstore@0.3.2 (object-assign@2.0.0, xdg-basedir@1.0.1, osenv@0.1.0, uuid@2.0.1, js-yaml@3.3.1)
├── handlebars@2.0.0 (optimist@0.3.7, uglify-js@2.3.6)
└── inquirer@0.8.0 (figures@1.3.5, ansi-regex@1.1.1, mute-stream@0.0.4, through@2.3.7, readline2@0.1.1, chalk@0.5.1, lodash@2.4.2, cli-color@0.3.3, rx@2.5.2)
testnode # sudo git clone https://github.com/meanjs/mean.git /opt/mean
Cloning into '/opt/mean'...
remote: Counting objects: 5455, done.
remote: Total 5455 (delta 0), reused 0 (delta 0), pack-reused 5455
Receiving objects: 100% (5455/5455), 2.34 MiB | 1.44 MiB/s, done.
Resolving deltas: 100% (2789/2789), done.
Checking connectivity... done.
testnode # cd /opt/mean
testnode # npm install
npm WARN excluding symbolic link build/defs-config.json -> ../defs-config.json
npm WARN optional dep failed, continuing fsevents@0.3.6
npm WARN engine hawk@0.10.2: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
 
> phantomjs@1.9.16 install /opt/mean/node_modules/karma-phantomjs-launcher/node_modules/phantomjs
> node install.js

Downloading https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-x86_64.tar.bz2
Saving to /opt/mean/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/phantomjs/phantomjs-1.9.8-linux-x86_64.tar.bz2
Receiving...
- [=======================================-] 97% 0.0s/
Received 12854K total.
Extracting tar contents (via spawned process)
Removing /opt/mean/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom
Copying extracted folder /opt/mean/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/phantomjs/phantomjs-1.9.8-linux-x86_64.tar.bz2-extract-1431546802242/phantomjs-1.9.8-linux-x86_64 -> /opt/mean/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom
Writing location.js file
Done. Phantomjs binary available at /opt/mean/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs
npm WARN engine cryptiles@0.1.3: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine sntp@0.1.4: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine hoek@0.7.6: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine boom@0.3.8: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine hawk@0.10.2: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
 
> kerberos@0.0.11 install /opt/mean/node_modules/connect-mongo/node_modules/mongodb/node_modules/kerberos
> (node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory '/opt/mean/node_modules/connect-mongo/node_modules/mongodb/node_modules/kerberos/build'
  CXX(target) Release/obj.target/kerberos/lib/kerberos.o
  CXX(target) Release/obj.target/kerberos/lib/worker.o
  CC(target) Release/obj.target/kerberos/lib/kerberosgss.o
  CC(target) Release/obj.target/kerberos/lib/base64.o
  CXX(target) Release/obj.target/kerberos/lib/kerberos_context.o
  SOLINK_MODULE(target) Release/obj.target/kerberos.node
  SOLINK_MODULE(target) Release/obj.target/kerberos.node: Finished
  COPY Release/kerberos.node
make: Leaving directory '/opt/mean/node_modules/connect-mongo/node_modules/mongodb/node_modules/kerberos/build'
npm WARN engine boom@0.3.8: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine hoek@0.7.6: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine sntp@0.1.4: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine cryptiles@0.1.3: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine hawk@0.10.2: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine sntp@0.1.4: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine hoek@0.7.6: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine boom@0.3.8: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN engine cryptiles@0.1.3: wanted: {"node":"0.8.x"} (current: {"node":"0.10.30","npm":"1.4.21"})
npm WARN optional dep failed, continuing default-browser-id@1.0.2

> kerberos@0.0.9 install /opt/mean/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos
> (node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory '/opt/mean/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build'
  CXX(target) Release/obj.target/kerberos/lib/kerberos.o
  CXX(target) Release/obj.target/kerberos/lib/worker.o
  CC(target) Release/obj.target/kerberos/lib/kerberosgss.o
  CC(target) Release/obj.target/kerberos/lib/base64.o
  CXX(target) Release/obj.target/kerberos/lib/kerberos_context.o
  SOLINK_MODULE(target) Release/obj.target/kerberos.node
  SOLINK_MODULE(target) Release/obj.target/kerberos.node: Finished
  COPY Release/kerberos.node
make: Leaving directory '/opt/mean/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build'

> bson@0.2.21 install /opt/mean/node_modules/connect-mongo/node_modules/mongodb/node_modules/bson
> (node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory '/opt/mean/node_modules/connect-mongo/node_modules/mongodb/node_modules/bson/build'
  CXX(target) Release/obj.target/bson/ext/bson.o
  SOLINK_MODULE(target) Release/obj.target/bson.node
  SOLINK_MODULE(target) Release/obj.target/bson.node: Finished
  COPY Release/bson.node
make: Leaving directory '/opt/mean/node_modules/connect-mongo/node_modules/mongodb/node_modules/bson/build'

> bson@0.2.21 install /opt/mean/node_modules/mongoose/node_modules/mongodb/node_modules/bson
> (node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory '/opt/mean/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build'
  CXX(target) Release/obj.target/bson/ext/bson.o
  SOLINK_MODULE(target) Release/obj.target/bson.node
  SOLINK_MODULE(target) Release/obj.target/bson.node: Finished
  COPY Release/bson.node
make: Leaving directory '/opt/mean/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build'

> ws@0.4.32 install /opt/mean/node_modules/karma/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws
> (node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory '/opt/mean/node_modules/karma/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node: Finished
  COPY Release/bufferutil.node
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  SOLINK_MODULE(target) Release/obj.target/validation.node: Finished
  COPY Release/validation.node
make: Leaving directory '/opt/mean/node_modules/karma/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws/build'

> v8-profiler@5.2.7 preinstall /opt/mean/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-profiler
>  


> v8-debug@0.4.4 preinstall /opt/mean/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug
>  


> ws@0.4.32 install /opt/mean/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/ws
> (node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory '/opt/mean/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/ws/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node: Finished
  COPY Release/bufferutil.node
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  SOLINK_MODULE(target) Release/obj.target/validation.node: Finished
  COPY Release/validation.node
make: Leaving directory '/opt/mean/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/ws/build'

> v8-debug@0.4.4 postinstall /opt/mean/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug
> node-pre-gyp install --fallback-to-build

[v8-debug] Success: "/opt/mean/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-debug/build/debug/v0.4.4/node-v11-linux-x64/debug.node" is installed via remote

> v8-profiler@5.2.7 postinstall /opt/mean/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-profiler
> node-pre-gyp install --fallback-to-build

[v8-profiler] Success: "/opt/mean/node_modules/grunt-node-inspector/node_modules/node-inspector/node_modules/v8-profiler/build/profiler/v5.2.7/node-v11-linux-x64/profiler.node" is installed via remote
npm WARN cannot run in wd meanjs@0.3.3 bower install --config.interactive=false (wd=/opt/mean)
karma-firefox-launcher@0.1.6 node_modules/karma-firefox-launcher

connect-flash@0.1.1 node_modules/connect-flash

consolidate@0.10.0 node_modules/consolidate

karma-jasmine@0.2.3 node_modules/karma-jasmine

async@0.9.0 node_modules/async

cookie-parser@1.3.4 node_modules/cookie-parser
├── cookie-signature@1.0.6
└── cookie@0.1.2

passport-local@1.0.0 node_modules/passport-local
└── passport-strategy@1.0.0

grunt-env@0.4.4 node_modules/grunt-env
└── ini@1.3.3

passport@0.2.1 node_modules/passport
├── pause@0.0.1
└── passport-strategy@1.0.0

chalk@1.0.0 node_modules/chalk
├── escape-string-regexp@1.0.3
├── ansi-styles@2.0.1
├── supports-color@1.3.1
├── strip-ansi@2.0.1 (ansi-regex@1.1.1)
└── has-ansi@1.0.3 (get-stdin@4.0.1, ansi-regex@1.1.1)

grunt-concurrent@1.0.0 node_modules/grunt-concurrent
└── pad-stdio@1.0.0 (lpad@1.0.0)

method-override@2.3.3 node_modules/method-override
├── methods@1.1.1
├── vary@1.0.0
├── parseurl@1.3.0
└── debug@2.2.0 (ms@0.7.1)

karma-chrome-launcher@0.1.12 node_modules/karma-chrome-launcher
└── which@1.1.1 (is-absolute@0.1.7)

express-session@1.9.3 node_modules/express-session
├── cookie@0.1.2
├── utils-merge@1.0.0
├── cookie-signature@1.0.5
├── on-headers@1.0.0
├── parseurl@1.3.0
├── depd@1.0.1
├── crc@3.2.1
├── debug@2.1.3 (ms@0.7.0)
└── uid-safe@1.0.1 (base64-url@1.2.1, mz@1.3.0)

morgan@1.4.1 node_modules/morgan
├── basic-auth@1.0.0
├── depd@1.0.1
├── on-finished@2.1.1 (ee-first@1.1.0)
└── debug@2.1.3 (ms@0.7.0)

passport-github@0.1.5 node_modules/passport-github
├── pkginfo@0.2.3
└── passport-oauth@0.1.15 (passport@0.1.18, oauth@0.9.12)

should@4.1.0 node_modules/should
└── should-equal@0.0.1

grunt-contrib-csslint@0.3.1 node_modules/grunt-contrib-csslint
├── chalk@0.5.1 (ansi-styles@1.1.0, escape-string-regexp@1.0.3, supports-color@0.2.0, has-ansi@0.1.0, strip-ansi@0.3.0)
└── csslint@0.10.0 (parserlib@0.2.5)

load-grunt-tasks@1.0.0 node_modules/load-grunt-tasks
├── multimatch@1.0.1 (array-differ@1.0.0, array-union@1.0.1, minimatch@1.0.0)
└── findup-sync@0.1.3 (glob@3.2.11)

body-parser@1.9.3 node_modules/body-parser
├── bytes@1.0.0
├── media-typer@0.3.0
├── raw-body@1.3.1
├── on-finished@2.1.1 (ee-first@1.1.0)
├── qs@2.3.3
├── depd@1.0.1
├── type-is@1.5.7 (mime-types@2.0.11)
└── iconv-lite@0.4.5

passport-google-oauth@0.1.5 node_modules/passport-google-oauth
├── pkginfo@0.2.3
└── passport-oauth@0.1.15 (passport@0.1.18, oauth@0.9.12)

supertest@0.14.0 node_modules/supertest
├── methods@1.1.0
└── superagent@0.19.0 (extend@1.2.1, methods@1.0.1, cookiejar@2.0.1, component-emitter@1.1.2, reduce-component@1.0.1, qs@1.2.0, debug@1.0.4, mime@1.2.11, readable-stream@1.0.27-1, form-data@0.1.3, formidable@1.0.14)

passport-linkedin@0.1.3 node_modules/passport-linkedin
├── pkginfo@0.2.3
└── passport-oauth@0.1.15 (passport@0.1.18, oauth@0.9.12)

compression@1.2.2 node_modules/compression
├── on-headers@1.0.0
├── bytes@1.0.0
├── vary@1.0.0
├── debug@2.1.3 (ms@0.7.0)
├── compressible@2.0.2 (mime-db@1.9.1)
└── accepts@1.1.4 (negotiator@0.4.9, mime-types@2.0.11)

nodemailer@1.3.4 node_modules/nodemailer
├── nodemailer-direct-transport@1.0.2 (smtp-connection@1.2.0)
├── buildmail@1.2.4 (libbase64@0.1.0, libqp@1.0.0, addressparser@0.3.2)
├── nodemailer-smtp-transport@1.0.3 (nodemailer-wellknown@0.1.5, clone@1.0.2, smtp-connection@1.2.0)
├── libmime@1.0.0 (libbase64@0.1.0, libqp@1.0.0, iconv-lite@0.4.8)
└── hyperquest@1.2.0 (through2@0.6.5, duplexer2@0.0.2)

lodash@2.4.2 node_modules/lodash

grunt-contrib-watch@0.6.1 node_modules/grunt-contrib-watch
├── async@0.2.10
├── tiny-lr-fork@0.0.5 (debug@0.7.4, faye-websocket@0.4.4, noptify@0.0.3, qs@0.5.6)
└── gaze@0.5.1 (globule@0.1.0)

passport-twitter@1.0.3 node_modules/passport-twitter
├── xtraverse@0.1.0 (xmldom@0.1.19)
└── passport-oauth1@1.0.1 (utils-merge@1.0.0, passport-strategy@1.0.0, oauth@0.9.12)

glob@4.0.6 node_modules/glob
├── inherits@2.0.1
├── graceful-fs@3.0.6
├── once@1.3.2 (wrappy@1.0.1)
└── minimatch@1.0.0 (sigmund@1.0.0, lru-cache@2.6.2)

express@4.10.8 node_modules/express
├── methods@1.1.1
├── cookie@0.1.2
├── merge-descriptors@0.0.2
├── fresh@0.2.4
├── cookie-signature@1.0.5
├── escape-html@1.0.1
├── range-parser@1.0.2
├── utils-merge@1.0.0
├── vary@1.0.0
├── media-typer@0.3.0
├── parseurl@1.3.0
├── finalhandler@0.3.3
├── serve-static@1.7.2
├── content-disposition@0.5.0
├── path-to-regexp@0.1.3
├── on-finished@2.2.1 (ee-first@1.1.0)
├── depd@1.0.1
├── qs@2.3.3
├── etag@1.5.1 (crc@3.2.1)
├── proxy-addr@1.0.8 (forwarded@0.1.0, ipaddr.js@1.0.1)
├── debug@2.1.3 (ms@0.7.0)
├── send@0.10.1 (destroy@1.0.3, ms@0.6.2, mime@1.2.11, on-finished@2.1.1)
├── type-is@1.5.7 (mime-types@2.0.11)
└── accepts@1.1.4 (negotiator@0.4.9, mime-types@2.0.11)

grunt-cli@0.1.13 node_modules/grunt-cli
├── nopt@1.0.10 (abbrev@1.0.5)
├── resolve@0.3.1
└── findup-sync@0.1.3 (glob@3.2.11)

passport-facebook@1.0.3 node_modules/passport-facebook
└── passport-oauth2@1.1.2 (uid2@0.0.3, passport-strategy@1.0.0, oauth@0.9.12)

helmet@0.5.4 node_modules/helmet
├── ienoopen@0.1.0
├── dont-sniff-mimetype@0.1.0
├── hide-powered-by@0.1.0
├── helmet-crossdomain@0.1.0
├── nocache@0.2.0
├── frameguard@0.2.0 (lodash.isstring@2.4.1)
├── x-xss-protection@0.1.1 (platform@1.3.0)
├── hsts@0.1.0 (underscore@1.7.0)
├── connect@3.3.3 (utils-merge@1.0.0, parseurl@1.3.0, finalhandler@0.3.2, debug@2.1.3)
└── helmet-csp@0.1.2 (camelize@1.0.0, platform@1.2.0, lodash@2.4.1)

grunt-contrib-uglify@0.6.0 node_modules/grunt-contrib-uglify
├── uri-path@0.0.2
├── chalk@0.5.1 (ansi-styles@1.1.0, escape-string-regexp@1.0.3, supports-color@0.2.0, has-ansi@0.1.0, strip-ansi@0.3.0)
├── uglify-js@2.4.21 (uglify-to-browserify@1.0.2, async@0.2.10, yargs@3.5.4, source-map@0.1.34)
└── maxmin@1.1.0 (figures@1.3.5, chalk@1.0.0, pretty-bytes@1.0.4, gzip-size@1.0.0)

mocha@2.2.4 node_modules/mocha
├── escape-string-regexp@1.0.2
├── supports-color@1.2.1
├── diff@1.0.8
├── growl@1.8.1
├── commander@2.3.0
├── debug@2.0.0 (ms@0.6.2)
├── glob@3.2.3 (graceful-fs@2.0.3, inherits@2.0.1, minimatch@0.2.14)
├── mkdirp@0.5.0 (minimist@0.0.8)
└── jade@0.26.3 (commander@0.6.1, mkdirp@0.3.0)

grunt-mocha-test@0.12.7 node_modules/grunt-mocha-test
├── hooker@0.2.3
└── mkdirp@0.5.0 (minimist@0.0.8)

swig@1.4.2 node_modules/swig
├── optimist@0.6.1 (wordwrap@0.0.3, minimist@0.0.10)
└── uglify-js@2.4.21 (uglify-to-browserify@1.0.2, async@0.2.10, yargs@3.5.4, source-map@0.1.34)

karma-phantomjs-launcher@0.1.4 node_modules/karma-phantomjs-launcher
└── phantomjs@1.9.16 (which@1.0.9, progress@1.1.8, kew@0.4.0, request-progress@0.3.1, adm-zip@0.4.4, npmconf@2.1.1, fs-extra@0.16.5, request@2.42.0)

grunt-contrib-cssmin@0.10.0 node_modules/grunt-contrib-cssmin
├── chalk@0.4.0 (has-color@0.1.7, ansi-styles@1.0.0, strip-ansi@0.1.1)
├── clean-css@2.2.23 (commander@2.2.0)
└── maxmin@0.2.2 (pretty-bytes@0.1.2, figures@1.3.5, chalk@0.5.1, gzip-size@0.2.0)

forever@0.11.1 node_modules/forever
├── watch@0.8.0
├── colors@0.6.2
├── pkginfo@0.3.0
├── timespan@2.3.0
├── nssocket@0.5.3 (eventemitter2@0.4.14, lazy@1.0.11)
├── optimist@0.6.1 (wordwrap@0.0.3, minimist@0.0.10)
├── utile@0.2.1 (deep-equal@1.0.0, ncp@0.4.2, async@0.2.10, i@0.3.3, mkdirp@0.5.0, rimraf@2.3.3)
├── nconf@0.6.9 (ini@1.3.3, async@0.2.9, optimist@0.6.0)
├── cliff@0.1.8 (eyes@0.1.8, winston@0.6.2)
├── winston@0.7.3 (cycle@1.0.3, stack-trace@0.0.9, eyes@0.1.8, async@0.2.10, request@2.16.6)
├── forever-monitor@1.2.3 (watch@0.5.1, minimatch@0.2.14, utile@0.1.7, ps-tree@0.0.3, broadway@0.2.10)
└── flatiron@0.3.11 (optimist@0.6.0, director@1.1.10, prompt@0.2.11, broadway@0.2.9)

grunt@0.4.5 node_modules/grunt
├── which@1.0.9
├── dateformat@1.0.2-1.2.3
├── eventemitter2@0.4.14
├── getobject@0.1.0
├── rimraf@2.2.8
├── colors@0.6.2
├── async@0.1.22
├── hooker@0.2.3
├── grunt-legacy-util@0.2.0
├── nopt@1.0.10 (abbrev@1.0.5)
├── exit@0.1.2
├── glob@3.1.21 (inherits@1.0.0, graceful-fs@1.2.3)
├── minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.6.2)
├── lodash@0.9.2
├── coffee-script@1.3.3
├── underscore.string@2.2.1
├── iconv-lite@0.2.11
├── js-yaml@2.0.5 (argparse@0.1.16, esprima@1.0.4)
├── findup-sync@0.1.3 (glob@3.2.11, lodash@2.4.2)
└── grunt-legacy-log@0.1.1 (underscore.string@2.3.3, lodash@2.4.2)

grunt-karma@0.9.0 node_modules/grunt-karma

grunt-contrib-jshint@0.10.0 node_modules/grunt-contrib-jshint
├── hooker@0.2.3
└── jshint@2.5.11 (strip-json-comments@1.0.2, underscore@1.6.0, exit@0.1.2, console-browserify@1.1.0, minimatch@1.0.0, shelljs@0.3.0, cli@0.6.6, htmlparser2@3.8.2)

grunt-ng-annotate@0.4.0 node_modules/grunt-ng-annotate
└── ng-annotate@0.10.3 (tryor@0.1.2, alter@0.2.0, simple-fmt@0.1.0, simple-is@0.2.0, stringset@0.2.1, stringmap@0.2.2, stable@0.1.5, convert-source-map@0.4.1, ordered-ast-traverse@0.1.1, source-map@0.1.43, optimist@0.6.1, esprima@1.2.5, acorn@0.9.0)

grunt-nodemon@0.3.0 node_modules/grunt-nodemon
└── nodemon@1.2.1 (minimatch@0.3.0, ps-tree@0.0.3, update-notifier@0.1.10)

karma-coverage@0.2.7 node_modules/karma-coverage
├── minimatch@0.3.0 (sigmund@1.0.0, lru-cache@2.6.2)
├── dateformat@1.0.11 (get-stdin@4.0.1, meow@3.1.0)
├── ibrik@2.0.0 (estraverse@1.8.0, which@1.0.9, mkdirp@0.5.0, optimist@0.6.1, fileset@0.1.5, coffee-script@1.8.0, esprima@1.2.5)
└── istanbul@0.3.14 (supports-color@1.3.1, which@1.0.9, abbrev@1.0.5, nopt@3.0.1, wordwrap@0.0.3, once@1.3.2, mkdirp@0.5.0, esprima@2.1.0, resolve@1.1.6, fileset@0.1.5, escodegen@1.6.1, handlebars@3.0.0, js-yaml@3.3.1)

bower@1.3.12 node_modules/bower
├── is-root@1.0.0
├── junk@1.0.1
├── stringify-object@1.0.1
├── which@1.0.9
├── abbrev@1.0.5
├── chmodr@0.1.0
├── osenv@0.1.0
├── archy@0.0.2
├── opn@1.0.2
├── rimraf@2.2.8
├── bower-logger@0.2.2
├── bower-endpoint-parser@0.2.2
├── graceful-fs@3.0.6
├── lockfile@1.0.0
├── nopt@3.0.1
├── lru-cache@2.5.2
├── retry@0.6.0
├── tmp@0.0.23
├── request-progress@0.3.0 (throttleit@0.0.2)
├── q@1.0.1
├── chalk@0.5.0 (ansi-styles@1.1.0, escape-string-regexp@1.0.3, supports-color@0.2.0, has-ansi@0.1.0, strip-ansi@0.3.0)
├── shell-quote@1.4.3 (array-filter@0.0.1, array-reduce@0.0.0, array-map@0.0.0, jsonify@0.0.0)
├── semver@2.3.2
├── bower-json@0.4.0 (intersect@0.0.3, deep-extend@0.2.11, graceful-fs@2.0.3)
├── promptly@0.2.0 (read@1.0.5)
├── p-throttler@0.1.0 (q@0.9.7)
├── fstream@1.0.6 (inherits@2.0.1)
├── bower-config@0.5.2 (osenv@0.0.3, graceful-fs@2.0.3, optimist@0.6.1)
├── fstream-ignore@1.0.2 (inherits@2.0.1, minimatch@2.0.7)
├── mkdirp@0.5.0 (minimist@0.0.8)
├── tar-fs@0.5.2 (pump@0.3.5, tar-stream@0.4.7)
├── decompress-zip@0.0.8 (nopt@2.2.1, mkpath@0.1.0, touch@0.0.2, readable-stream@1.1.13, binary@0.3.0)
├── request@2.42.0 (caseless@0.6.0, json-stringify-safe@5.0.0, aws-sign2@0.5.0, forever-agent@0.5.2, stringstream@0.0.4, oauth-sign@0.4.0, tunnel-agent@0.4.0, qs@1.2.2, node-uuid@1.4.3, mime-types@1.0.2, form-data@0.1.4, http-signature@0.10.1, bl@0.9.4, hawk@1.1.1, tough-cookie@1.1.0)
├── cardinal@0.4.0 (redeyed@0.4.4)
├── bower-registry-client@0.2.4 (graceful-fs@2.0.3, request-replay@0.2.0, lru-cache@2.3.1, mkdirp@0.3.5, async@0.2.10, request@2.51.0)
├── mout@0.9.1
├── handlebars@2.0.0 (optimist@0.3.7, uglify-js@2.3.6)
├── inquirer@0.7.1 (figures@1.3.5, through@2.3.7, mute-stream@0.0.4, readline2@0.1.1, cli-color@0.3.3, rx@2.5.2)
├── update-notifier@0.2.0 (semver-diff@0.1.0, string-length@0.1.2, latest-version@0.2.0, configstore@0.3.2)
└── insight@0.4.3 (object-assign@1.0.0, chalk@0.5.1, lodash.debounce@2.4.1, os-name@1.0.3, tough-cookie@0.12.1, configstore@0.3.2, inquirer@0.6.0)

connect-mongo@0.4.2 node_modules/connect-mongo
└── mongodb@1.4.37 (readable-stream@1.0.33, kerberos@0.0.11, bson@0.2.21)

mongoose@3.8.28 node_modules/mongoose
├── regexp-clone@0.0.1
├── sliced@0.0.5
├── muri@1.1.0
├── hooks@0.2.1
├── mpath@0.1.1
├── mpromise@0.4.3
├── ms@0.1.0
├── mquery@1.4.0 (debug@0.7.4, bluebird@2.3.2)
└── mongodb@1.4.32 (readable-stream@1.0.33, kerberos@0.0.9, bson@0.2.21)

karma@0.12.31 node_modules/karma
├── di@0.0.1
├── graceful-fs@2.0.3
├── rimraf@2.2.8
├── colors@0.6.2
├── mime@1.2.11
├── q@0.9.7
├── source-map@0.1.43 (amdefine@0.1.0)
├── minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.6.2)
├── optimist@0.6.1 (minimist@0.0.10, wordwrap@0.0.3)
├── chokidar@1.0.1 (arrify@1.0.0, is-glob@1.1.3, glob-parent@1.2.0, async-each@0.1.6, is-binary-path@1.0.0, readdirp@1.3.0, anymatch@1.3.0)
├── log4js@0.6.25 (async@0.2.10, underscore@1.8.2, readable-stream@1.0.33, semver@4.3.4)
├── glob@3.2.11 (inherits@2.0.1, minimatch@0.3.0)
├── http-proxy@0.10.4 (pkginfo@0.3.0, utile@0.2.1)
├── connect@2.26.6 (cookie@0.1.2, fresh@0.2.4, pause@0.0.1, cookie-signature@1.0.5, on-headers@1.0.0, response-time@2.0.1, bytes@1.0.0, media-typer@0.3.0, vhost@3.0.0, parseurl@1.3.0, basic-auth-connect@1.0.0, depd@0.4.5, connect-timeout@1.3.0, finalhandler@0.2.0, method-override@2.2.0, qs@2.2.4, debug@2.0.0, morgan@1.3.2, serve-favicon@2.1.7, csurf@1.6.6, express-session@1.8.2, type-is@1.5.7, serve-static@1.6.5, multiparty@3.3.2, body-parser@1.8.4, errorhandler@1.2.4, serve-index@1.2.1, compression@1.1.2)
├── useragent@2.0.10 (lru-cache@2.2.4)
└── socket.io@0.9.16 (base64id@0.1.0, policyfile@0.0.4, redis@0.7.3, socket.io-client@0.9.16)

grunt-node-inspector@0.1.6 node_modules/grunt-node-inspector
└── node-inspector@0.9.2 (debug@1.0.4, which@1.1.1, rc@0.5.5, semver@3.0.1, strong-data-uri@0.1.1, serve-favicon@2.2.0, yargs@1.3.3, glob@4.5.3, biased-opener@0.2.5, ws@0.4.32, v8-debug@0.4.4, v8-profiler@5.2.7)
testnode # bower --allow-root --config.interactive=false install
bower angular-mocks#~1.2    not-cached git://github.com/angular/bower-angular-mocks.git#~1.2
bower angular-mocks#~1.2       resolve git://github.com/angular/bower-angular-mocks.git#~1.2
bower angular-animate#~1.2  not-cached git://github.com/angular/bower-angular-animate.git#~1.2
bower angular-animate#~1.2     resolve git://github.com/angular/bower-angular-animate.git#~1.2
bower angular#~1.2          not-cached git://github.com/angular/bower-angular.git#~1.2
bower angular#~1.2             resolve git://github.com/angular/bower-angular.git#~1.2
bower angular-bootstrap#~0.12.0       not-cached git://github.com/angular-ui/bootstrap-bower.git#~0.12.0
bower angular-bootstrap#~0.12.0          resolve git://github.com/angular-ui/bootstrap-bower.git#~0.12.0
bower angular-ui-utils#~0.1.1         not-cached git://github.com/angular-ui/ui-utils.git#~0.1.1
bower angular-ui-utils#~0.1.1            resolve git://github.com/angular-ui/ui-utils.git#~0.1.1
bower angular-ui-router#~0.2.11       not-cached git://github.com/angular-ui/ui-router.git#~0.2.11
bower angular-ui-router#~0.2.11          resolve git://github.com/angular-ui/ui-router.git#~0.2.11
bower angular-resource#~1.2           not-cached git://github.com/angular/bower-angular-resource.git#~1.2
bower angular-resource#~1.2              resolve git://github.com/angular/bower-angular-resource.git#~1.2
bower bootstrap#~3                    not-cached git://github.com/twbs/bootstrap.git#~3
bower bootstrap#~3                       resolve git://github.com/twbs/bootstrap.git#~3
bower angular-bootstrap#~0.12.0         download https://github.com/angular-ui/bootstrap-bower/archive/0.12.1.tar.gz
bower angular-ui-utils#~0.1.1           download https://github.com/angular-ui/ui-utils/archive/v0.1.1.tar.gz
bower angular-ui-router#~0.2.11         download https://github.com/angular-ui/ui-router/archive/0.2.14.tar.gz
bower angular-mocks#~1.2                download https://github.com/angular/bower-angular-mocks/archive/v1.2.28.tar.gz
bower angular-resource#~1.2             download https://github.com/angular/bower-angular-resource/archive/v1.2.28.tar.gz
bower angular-animate#~1.2              download https://github.com/angular/bower-angular-animate/archive/v1.2.28.tar.gz
bower angular#~1.2                      download https://github.com/angular/bower-angular/archive/v1.2.28.tar.gz
bower bootstrap#~3                      download https://github.com/twbs/bootstrap/archive/v3.3.4.tar.gz
bower angular-ui-utils#~0.1.1            extract archive.tar.gz
bower angular-bootstrap#~0.12.0          extract archive.tar.gz
bower angular-ui-utils#~0.1.1       invalid-meta angular-ui-utils is missing "ignore" entry in bower.json
bower angular-ui-utils#~0.1.1           resolved git://github.com/angular-ui/ui-utils.git#0.1.1
bower angular#>= 1.0.2                not-cached git://github.com/angular/bower-angular.git#>= 1.0.2
bower angular#>= 1.0.2                   resolve git://github.com/angular/bower-angular.git#>= 1.0.2
bower angular#>= 1.0.2                  download https://github.com/angular/bower-angular/archive/v1.3.15.tar.gz
bower angular-mocks#~1.2                 extract archive.tar.gz
bower angular-animate#~1.2               extract archive.tar.gz
bower angular-bootstrap#~0.12.0         resolved git://github.com/angular-ui/bootstrap-bower.git#0.12.1
bower angular-resource#~1.2              extract archive.tar.gz
bower angular-mocks#~1.2                resolved git://github.com/angular/bower-angular-mocks.git#1.2.28
bower angular-animate#~1.2              resolved git://github.com/angular/bower-angular-animate.git#1.2.28
bower angular-resource#~1.2             resolved git://github.com/angular/bower-angular-resource.git#1.2.28
bower angular#~1.2                       extract archive.tar.gz
bower angular#~1.2                      resolved git://github.com/angular/bower-angular.git#1.2.28
bower angular#>= 1.0.2                   extract archive.tar.gz
bower angular-ui-router#~0.2.11          extract archive.tar.gz
bower angular#>= 1.0.2                  resolved git://github.com/angular/bower-angular.git#1.3.15
bower angular-ui-router#~0.2.11         resolved git://github.com/angular-ui/ui-router.git#0.2.14
bower bootstrap#~3                       extract archive.tar.gz
bower bootstrap#~3                      resolved git://github.com/twbs/bootstrap.git#3.3.4
bower jquery#>= 1.9.1                 not-cached git://github.com/jquery/jquery.git#>= 1.9.1
bower jquery#>= 1.9.1                    resolve git://github.com/jquery/jquery.git#>= 1.9.1
bower jquery#>= 1.9.1                   download https://github.com/jquery/jquery/archive/2.1.4.tar.gz
bower jquery#>= 1.9.1                    extract archive.tar.gz
bower jquery#>= 1.9.1                   resolved git://github.com/jquery/jquery.git#2.1.4
bower angular-ui-utils#~0.1.1            install angular-ui-utils#0.1.1
bower angular-bootstrap#~0.12.0          install angular-bootstrap#0.12.1
bower angular-mocks#~1.2                 install angular-mocks#1.2.28
bower angular-animate#~1.2               install angular-animate#1.2.28
bower angular-resource#~1.2              install angular-resource#1.2.28
bower angular#~1.2                       install angular#1.2.28
bower angular-ui-router#~0.2.11          install angular-ui-router#0.2.14
bower bootstrap#~3                       install bootstrap#3.3.4
bower jquery#>= 1.9.1                    install jquery#2.1.4

angular-ui-utils#0.1.1 public/lib/angular-ui-utils
└── angular#1.2.28

angular-bootstrap#0.12.1 public/lib/angular-bootstrap
└── angular#1.2.28

angular-mocks#1.2.28 public/lib/angular-mocks
└── angular#1.2.28

angular-animate#1.2.28 public/lib/angular-animate
└── angular#1.2.28

angular-resource#1.2.28 public/lib/angular-resource
└── angular#1.2.28

angular#1.2.28 public/lib/angular

angular-ui-router#0.2.14 public/lib/angular-ui-router
└── angular#1.2.28

bootstrap#3.3.4 public/lib/bootstrap
└── jquery#2.1.4

jquery#2.1.4 public/lib/jquery
testnode # grunt 
Running "jshint:all" (jshint) task
>> 56 files lint free.

Running "csslint:all" (csslint) task
>> 2 files lint free.

Running "concurrent:default" (concurrent) task
Running "watch" task
Waiting...
Running "nodemon:dev" (nodemon) task
[nodemon] v1.2.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: app/views/**/*.* gruntfile.js server.js config/**/*.js app/**/*.js
[nodemon] starting `node --debug server.js`
debugger listening on port 5858
NODE_ENV is not defined! Using default development environment
--
MEAN.JS - Development Environment application started
Environment:                    development
Port:                           3000
Database:                       mongodb://localhost/mean-dev
--
Could not connect to MongoDB!
Error: failed to connect to [localhost:27017]

Open in new window

0
nociSoftware EngineerCommented:
And after installing mongodb, started grunt, and accessed the webside through a browser.

testnode # grunt 
Running "jshint:all" (jshint) task
>> 56 files lint free.

Running "csslint:all" (csslint) task
>> 2 files lint free.

Running "concurrent:default" (concurrent) task
Running "nodemon:dev" (nodemon) task
Running "watch" task
Waiting...
[nodemon] v1.2.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: app/views/**/*.* gruntfile.js server.js config/**/*.js app/**/*.js
[nodemon] starting `node --debug server.js`
debugger listening on port 5858
Fatal error: Port 35729 is already in use by another process.
    Warning:  Used --force, continuing.
        
    
    NODE_ENV is not defined! Using default development environment
--
MEAN.JS - Development Environment application started
Environment:                    development
Port:                           3000
Database:                       mongodb://localhost/mean-dev
--
GET / 200 117.451 ms - -
GET /lib/bootstrap/dist/css/bootstrap.css 200 24.521 ms - -
GET /lib/bootstrap/dist/css/bootstrap-theme.css 200 8.382 ms - -
GET /modules/core/css/core.css 200 3.569 ms - 354
GET /modules/users/css/users.css 200 3.573 ms - 211
GET /lib/angular/angular.js 200 65.220 ms - -
GET /lib/angular-resource/angular-resource.js 200 9.153 ms - -
GET /lib/angular-animate/angular-animate.js 200 9.094 ms - -
GET /lib/angular-ui-router/release/angular-ui-router.js 200 17.506 ms - -
GET /lib/angular-ui-utils/ui-utils.js 200 13.735 ms - -
GET /lib/angular-bootstrap/ui-bootstrap-tpls.js 200 15.681 ms - -
GET /config.js 200 2.710 ms - 791
GET /application.js 200 3.072 ms - 730
GET /modules/articles/articles.client.module.js 200 4.811 ms - 133
GET /modules/core/core.client.module.js 200 4.435 ms - 129
GET /modules/users/users.client.module.js 200 3.090 ms - 129
GET /modules/articles/config/articles.client.config.js 200 2.446 ms - 389
GET /modules/articles/config/articles.client.routes.js 200 2.512 ms - 700
GET /modules/articles/controllers/articles.client.controller.js 200 3.311 ms - -
GET /modules/articles/services/articles.client.service.js 200 3.139 ms - 294
GET /modules/core/config/core.client.routes.js 200 3.093 ms - 384
GET /modules/core/controllers/header.client.controller.js 200 3.397 ms - 495
GET /modules/core/controllers/home.client.controller.js 200 2.455 ms - 224
GET /modules/core/services/menus.client.service.js 200 4.727 ms - -
GET /modules/users/config/users.client.config.js 200 2.479 ms - 708
GET /modules/users/config/users.client.routes.js 200 2.986 ms - -
GET /modules/users/controllers/authentication.client.controller.js 200 2.840 ms - -
GET /modules/users/controllers/password.client.controller.js 200 2.974 ms - -
GET /modules/users/controllers/settings.client.controller.js 200 5.563 ms - -
GET /modules/users/services/authentication.client.service.js 200 2.442 ms - 202
GET /modules/users/services/users.client.service.js 200 4.556 ms - 244
GET /modules/core/views/header.client.view.html 200 6.754 ms - -
GET /modules/core/views/home.client.view.html 200 3.597 ms - -
GET /modules/core/img/brand/favicon.ico 200 4.943 ms - 32038
GET /modules/core/img/brand/logo.png 200 2.855 ms - 14055
GET /modules/core/img/brand/favicon.ico 304 4.596 ms - -
GET / 304 14.846 ms - -
GET /lib/bootstrap/dist/css/bootstrap.css 304 3.157 ms - -
GET /lib/bootstrap/dist/css/bootstrap-theme.css 304 1.927 ms - -
GET /modules/core/css/core.css 304 2.436 ms - -
GET /modules/users/css/users.css 304 1.427 ms - -
GET /lib/angular/angular.js 304 2.106 ms - -
GET /lib/angular-resource/angular-resource.js 304 4.780 ms - -
GET /lib/angular-animate/angular-animate.js 304 3.073 ms - -
GET /lib/angular-ui-router/release/angular-ui-router.js 304 3.639 ms - -
GET /lib/angular-ui-utils/ui-utils.js 304 2.296 ms - -
GET /lib/angular-bootstrap/ui-bootstrap-tpls.js 304 12.429 ms - -
GET /config.js 304 11.198 ms - -
GET /application.js 304 10.538 ms - -
GET /modules/articles/articles.client.module.js 304 7.757 ms - -
GET /modules/core/core.client.module.js 304 3.187 ms - -
GET /modules/users/users.client.module.js 304 2.383 ms - -
GET /modules/articles/config/articles.client.config.js 304 7.232 ms - -
GET /modules/articles/config/articles.client.routes.js 304 11.502 ms - -
GET /modules/articles/controllers/articles.client.controller.js 304 12.149 ms - -
GET /modules/articles/services/articles.client.service.js 304 10.938 ms - -
GET /modules/core/config/core.client.routes.js 304 3.096 ms - -
GET /modules/core/controllers/header.client.controller.js 304 2.876 ms - -
GET /modules/core/controllers/home.client.controller.js 304 1.531 ms - -
GET /modules/core/services/menus.client.service.js 304 1.727 ms - -
GET /modules/users/config/users.client.config.js 304 15.254 ms - -
GET /modules/users/config/users.client.routes.js 304 13.665 ms - -
GET /modules/users/controllers/authentication.client.controller.js 304 10.751 ms - -
GET /modules/users/controllers/password.client.controller.js 304 10.679 ms - -
GET /modules/users/controllers/settings.client.controller.js 304 8.204 ms - -
GET /modules/users/services/authentication.client.service.js 304 8.637 ms - -
GET /modules/users/services/users.client.service.js 304 2.352 ms - -
GET /modules/core/views/header.client.view.html 304 1.433 ms - -
GET /modules/core/views/home.client.view.html 304 1.446 ms - -
GET /modules/core/img/brand/logo.png 304 2.047 ms - -

Open in new window

0
badwolfffAuthor Commented:
Hi Noci,

thanks for the effort in running the test. So if I get it right you followed the exact same procedure and were able to start grunt and get an output in the browser? If it is so, I did the same too. The problem was always with the grunt command in the shell/putty. As I say in my original questions:
When I run this command my shell is occupied by this and I can't use it for anything else.
If I close the shell mean.js goes offline.

So I ask you, after you ran grunt, were you still able to use putty? If not, were you able to use the script suggested by Mark Bullock or any of the other suggestions by anyone else at all?

I am happy to uninstall and reinstall if you did get results as it would clearly mean I missed a step somewhere.

thanks
0
serialbandCommented:
When you run grunt?  Add the ampersand (&) after the command, before you press Enter.  That should background the task.

If you've already started the command, you can also press Control z and you will put the command temporarily to sleep.  You then type the command bg, press enter, and the grunt command will run in the background.
0
badwolfffAuthor Commented:
Yes serialband, thanks
What I would like to know from Noci is if your suggestions work on his shell or not

thanks
0
serialbandCommented:
Have you tried it yourself?
0
badwolfffAuthor Commented:
In my case they didn't work
0
nociSoftware EngineerCommented:
I wanted to establish a common ground first: So i did an install like the one you described with the exception of nodejs, because i have a distro package for that (emerge nodejs)
grunt gets installed in /usr and not in /usr/local like you have. (there is a first difference).

testnode# which grunt
/usr/bin/grunt


If i start it with nohup:

nohup grunt &
or
nohup /usr/bin/grunt >/var/log/grunt.log &

The service starts...
this would suffice for one time startup....

To start on each boot then the above command needs to be in a script called
/etc/init.d/rungrunt
#!/bin/bash
nohup /usr/bin/grunt >/var/log/grunt.log &

Open in new window

Unless you are using very recent versions of some major distro's that jumped the systemd bandwagon.
Now it still runs as root etc.
that can be fixed with:

/etc/init.d/rungrunt
#!/bin/bash
su - gruntuser -c "nohup /usr/bin/grunt >/var/log/grunt.log &"

Open in new window


and that can be expanded using daemontools when running under debian etc. or the tooling of choice on your distro. (see other scripts in /etc/init.d/

the /etc/init.d/rungrunt should be symlinked in  the runlevel of your choice (3, 4, 5) as network is needed.

ln -nsf /etc/init.d/rungrunt /etc/rc3.d/S99rungrunt
ln -nsf /etc/init.d/rungrunt /etc/rc4.d/S99rungrunt
ln -nsf /etc/init.d/rungrunt /etc/rc5.d/S99rungrunt

For chkconfig et. al more header info is needed inside the script.
0
badwolfffAuthor Commented:
Ok tomorrow I will uninstall and reinstall and see what happens :D
Will keep you guys posted

However, Noci, I did not ask the installation to go into /usr/local
How do I force it to act differently as in the scenario illustration by yourself?
I am just asking it if my reinstall runs into the same problems as before

thanks all
0
nociSoftware EngineerCommented:
/usr/local might be the default for the ./configure step.
You may need --prefix=/usr on the ./configure command line.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Linux

From novice to tech pro — start learning today.