Giter Site home page Giter Site logo

unitech / pm2 Goto Github PK

View Code? Open in Web Editor NEW
40.6K 658.0 2.6K 12.89 MB

Node.js Production Process Manager with a built-in Load Balancer.

Home Page: https://pm2.keymetrics.io/docs/usage/quick-start/

License: Other

JavaScript 81.05% Shell 18.30% Smarty 0.60% Dockerfile 0.03% Python 0.01%
pm2 nodejs node process-manager monitoring load-balancer production deploy command-line command-line-tool

pm2's Introduction




P(rocess) M(anager) 2
Runtime Edition

Donate Downloads per Month Downloads per Year npm version


PM2 is a production process manager for Node.js applications with a built-in load balancer. It allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks.

Starting an application in production mode is as easy as:

$ pm2 start app.js

PM2 is constantly assailed by more than 1800 tests.

Official website: https://pm2.keymetrics.io/

Works on Linux (stable) & macOS (stable) & Windows (stable). All Node.js versions are supported starting Node.js 12.X.

Installing PM2

With NPM:

$ npm install pm2 -g

You can install Node.js easily with NVM or FNM.

Start an application

You can start any application (Node.js, Python, Ruby, binaries in $PATH...) like that:

$ pm2 start app.js

Your app is now daemonized, monitored and kept alive forever.

Managing Applications

Once applications are started you can manage them easily:

Process listing

To list all running applications:

$ pm2 list

Managing apps is straightforward:

$ pm2 stop     <app_name|namespace|id|'all'|json_conf>
$ pm2 restart  <app_name|namespace|id|'all'|json_conf>
$ pm2 delete   <app_name|namespace|id|'all'|json_conf>

To have more details on a specific application:

$ pm2 describe <id|app_name>

To monitor logs, custom metrics, application information:

$ pm2 monit

More about Process Management

Cluster Mode: Node.js Load Balancing & Zero Downtime Reload

The Cluster mode is a special mode when starting a Node.js application, it starts multiple processes and load-balance HTTP/TCP/UDP queries between them. This increase overall performance (by a factor of x10 on 16 cores machines) and reliability (faster socket re-balancing in case of unhandled errors).

Framework supported

Starting a Node.js application in cluster mode that will leverage all CPUs available:

$ pm2 start api.js -i <processes>

<processes> can be 'max', -1 (all cpu minus 1) or a specified number of instances to start.

Zero Downtime Reload

Hot Reload allows to update an application without any downtime:

$ pm2 reload all

More informations about how PM2 make clustering easy

Container Support

With the drop-in replacement command for node, called pm2-runtime, run your Node.js application in a hardened production environment. Using it is seamless:

RUN npm install pm2 -g
CMD [ "pm2-runtime", "npm", "--", "start" ]

Read More about the dedicated integration

Host monitoring speedbar

PM2 allows to monitor your host/server vitals with a monitoring speedbar.

To enable host monitoring:

$ pm2 set pm2:sysmonit true
$ pm2 update

Framework supported

Terminal Based Monitoring

Monit

Monitor all processes launched straight from the command line:

$ pm2 monit

Log Management

To consult logs just type the command:

$ pm2 logs

Standard, Raw, JSON and formated output are available.

Examples:

$ pm2 logs APP-NAME       # Display APP-NAME logs
$ pm2 logs --json         # JSON output
$ pm2 logs --format       # Formated output

$ pm2 flush               # Flush all logs
$ pm2 reloadLogs          # Reload all logs

To enable log rotation install the following module

$ pm2 install pm2-logrotate

More about log management

Startup Scripts Generation

PM2 can generate and configure a Startup Script to keep PM2 and your processes alive at every server restart.

Init Systems Supported: systemd, upstart, launchd, rc.d

# Generate Startup Script
$ pm2 startup

# Freeze your process list across server restart
$ pm2 save

# Remove Startup Script
$ pm2 unstartup

More about Startup Scripts Generation

Updating PM2

# Install latest PM2 version
$ npm install pm2@latest -g
# Save process list, exit old PM2 & restore all processes
$ pm2 update

PM2 updates are seamless

PM2+ Monitoring

If you manage your apps with PM2, PM2+ makes it easy to monitor and manage apps across servers.

https://app.pm2.io/

Feel free to try it:

Discover the monitoring dashboard for PM2

Thanks in advance and we hope that you like PM2!

CHANGELOG

CHANGELOG

Contributors

Contributors

License

PM2 is made available under the terms of the GNU Affero General Public License 3.0 (AGPL 3.0). For other licenses contact us.

pm2's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pm2's Issues

Can't install PM2 on OSX

$ sudo npm install pm2

pm http GET https://registry.npmjs.org/pm2
npm http 304 https://registry.npmjs.org/pm2
npm http GET https://registry.npmjs.org/commander/1.1.0
npm http GET https://registry.npmjs.org/cli-table/0.2.0
npm http GET https://registry.npmjs.org/usage/0.3.6
npm http GET https://registry.npmjs.org/axon-rpc/0.0.2
npm http GET https://registry.npmjs.org/watch/0.7.0
npm http GET https://registry.npmjs.org/axon/0.6.1
npm http GET https://registry.npmjs.org/debug
npm http 304 https://registry.npmjs.org/commander/1.1.0
npm http 304 https://registry.npmjs.org/watch/0.7.0
npm http 304 https://registry.npmjs.org/cli-table/0.2.0
npm http 304 https://registry.npmjs.org/usage/0.3.6
npm http 304 https://registry.npmjs.org/axon-rpc/0.0.2
npm http 304 https://registry.npmjs.org/axon/0.6.1
npm http 304 https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/commander/1.0.5
npm http GET https://registry.npmjs.org/keypress
npm http GET https://registry.npmjs.org/charm
npm http GET https://registry.npmjs.org/colors/0.3.0
npm http GET https://registry.npmjs.org/bindings
npm http GET https://registry.npmjs.org/configurable/0.0.1
npm http GET https://registry.npmjs.org/escape-regexp/0.0.1
npm http 304 https://registry.npmjs.org/keypress
npm http 304 https://registry.npmjs.org/commander/1.0.5
npm http 304 https://registry.npmjs.org/colors/0.3.0
npm http 304 https://registry.npmjs.org/charm
npm http 304 https://registry.npmjs.org/bindings

> [email protected] install /path/to/dev/node_modules/pm2/node_modules/usage
> node-gyp rebuild

npm http GET https://registry.npmjs.org/keypress
npm http 304 https://registry.npmjs.org/configurable/0.0.1
npm http 304 https://registry.npmjs.org/escape-regexp/0.0.1
  CXX(target) Release/obj.target/sysinfo/src/binding.o
  CXX(target) Release/obj.target/sysinfo/src/mac.o
In file included from ../src/mac.cpp:7:
In file included from ../src/mac.h:6:
In file included from /Users/Me/.node-gyp/0.8.19/src/node.h:61:
In file included from /Users/Me/.node-gyp/0.8.19/deps/uv/include/uv.h:61:
In file included from /Users/Me/.node-gyp/0.8.19/deps/uv/include/uv-private/uv-unix.h:27:
/Users/Me/.node-gyp/0.8.19/deps/uv/include/uv-private/ev.h:229:3: error: expected '}'
  EV_ERROR    = (-2147483647 - 1) /* sent when an error occurs */
  ^
/usr/include/sys/event.h:144:18: note: expanded from macro 'EV_ERROR'
#define EV_ERROR        0x4000          /* error, data contains errno */
                        ^
/Users/Me/.node-gyp/0.8.19/deps/uv/include/uv-private/ev.h:205:6: note: to match this '{'
enum {
     ^
1 error generated.
make: *** [Release/obj.target/sysinfo/src/mac.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:255:23)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:99:17)
gyp ERR! stack     at Process._handle.onexit (child_process.js:678:10)
gyp ERR! System Darwin 12.4.0
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /path/to/dev/node_modules/pm2/node_modules/usage
gyp ERR! node -v v0.8.19
gyp ERR! node-gyp -v v0.8.2
gyp ERR! not ok
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! `sh "-c" "node-gyp rebuild"` failed with 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the usage package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls usage
npm ERR! There is likely additional logging output above.

npm ERR! System Darwin 12.4.0
npm ERR! command "node" "/usr/local/bin/npm" "install" "pm2"
npm ERR! cwd /path/to/dev
npm ERR! node -v v0.8.19
npm ERR! npm -v 1.1.71
npm ERR! code ELIFECYCLE
npm http 304 https://registry.npmjs.org/keypress
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /path/to/dev/npm-debug.log
npm ERR! not ok code 0

node version v0.8.19

Add a -q, --quiet option, and reduce the default level of verbosity.

pm2 is very verbose by default even without the -v, --verbose option. I feel that some of this default verbosity could be reduced and output only if the -v option is specified. Additionally, I feel pm2 needs a -q, --quiet option where it does not output to the console except in case of errors.

For an example of what I mean by reducing the default level of verbosity consider what happens when executing pm2 stopAll

$ pm2 stopAll
⌬ PM2 Stopping all processes
  ◡ Processing...

┌────────┬────┬─────┬────────┬───────────┬──────────────┬────────┬──────────┐
│ Script │ id │ PID │ status │ Restarted │ Last restart │ memory │ err logs │
└────────┴────┴─────┴────────┴───────────┴──────────────┴────────┴──────────┘

If pm2 stopped all processes then there shouldn't be any processes to list, and this process list below the command is useless nearly 100% of the time except perhaps if pm2 has a bug which caused a process to not be stopped.

This is just one example of where excessive console output could be trimmed out and only output if the user explicitly specifies the -v option.

What are your thoughts on this? Does anyone else agree? If so I may spend some time creating a less verbose fork and submit a pull request.

[feature request] kill conditions

greetings pm2 developers,

I've just converted my personal project to use pm2, seems pretty good so far. One thing I find lacking though is the option to kill dysfunctional instances, eg. those that are using >1G of memory or taking 110% cpu for extended period of time. I occasionally find my node instances slowing to a crawl after weeks or months, and it would be wonderful if pm2 can relaunch them for me instead of me having to log in to ec2 every other day to check the status and restart manually. Just my two cents.

Regards,

xkxx

Crash in Dev Mode

Somethimes PM2 crash in Dev Mode:

node.js:728
        throw errnoException(process._errno, 'kill');
              ^
Error: kill ESRCH
    at errnoException (node.js:540:13)
    at process.kill (node.js:728:15)
    at /usr/local/lib/node_modules/pm2/bin/pm2:388:22
    at Array.forEach (native)
    at /usr/local/lib/node_modules/pm2/bin/pm2:387:17
    at /usr/local/lib/node_modules/pm2/lib/Satan.js:170:5
    at /usr/local/lib/node_modules/pm2/node_modules/axon-rpc/lib/client.js:43:10
    at Parser.onmessage (/usr/local/lib/node_modules/pm2/node_modules/axon/lib/sockets/req.js:65:8)
    at Parser.frameBody (/usr/local/lib/node_modules/pm2/node_modules/axon/lib/parser.js:106:10)
    at Parser.write (/usr/local/lib/node_modules/pm2/node_modules/axon/lib/parser.js:50:13)

Return process id after pm2 start <script>

We create scripts for starting and stopping our programs. Currently, these invoke pm2.
There is however only one way to stop applications (script name) from a script, as there is no way to receive the process id after starting a script.

This is an issue with duplicate script names: most of our applications start with a file called 'index.js' ;-)...

Option for max times of restarts / fast crash threshold?

Would be nice to have options that stop monitoring a script if:

  1. It has been dying and restarting too many times
  2. It has been dying too fast (i.e. within a certain amount of uptime consistently.) The readme seems to mention such a feature but I cannot find it.

Tested Report on OSX, node v0.10.12

At first, I follow https://github.com/Unitech/pm2#is-my-production-server-ready-for-pm2- to use npm install --dev to install all dependcy packages, but it spent a long time and keep trying download and install something forever. I thinks something went wrong, so I just use `npm install' and 'npm test', it works fine, only show missing a scirpt.

⌬ PM2 [ERROR] script not found : /Users/hank/nodeProjects/pm2/test/fixtures/eyayimfake

 17 passing (5 seconds)
  1 pending
################# DEBUG

PM2 Command = /usr/local/Cellar/node/0.10.12/bin/node /pm2/bin/pm2
PM2 version = /usr/local/Cellar/node/0.10.12/bin/node /pm2/bin/pm2 -V
Node version = v0.10.12
arch : x64
platform : darwin
release : 12.4.0
type : Darwin
mem : 8589934592

can't stop web server when use `pm2 stop`

I use pm2 to start my express web server. test progress like below:

$ mkdir test && cd test && express && npm i
$ pm2 start app.js

Then I open website on http://localhost:3000, after that I try to stop it: $ pm2 stop 0
But the port still be occupied. I always must do `$ pm2 kill 0' to really release the port.

Is that a bug or I use it by a wrong way?

Node 0.10.x - Port still in use after a "pm2 stop :id"

When I kill a pm2 process (http server with expressjs) with the kill command and try to restart the same process without pm2 I get:

server started on port 4242
   warn  - error raised: Error: listen EADDRINUSE

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EADDRINUSE
    at errnoException (net.js:901:11)
    at Server._listen2 (net.js:1039:14)
    at listen (net.js:1061:10)
    at Server.listen (net.js:1127:5)

If I start the process with pm2, everything is working.

To be able to start the process without pm2, I need to kill the pm2 demon process: 'pm2: Satan Daemonizer'.

Not very practical :).

Cannot read property 'getsockname' of undefined = don't use port from 0 to 1024

I've tried running two different apps both on OSX and Fedora and I get this same error when starting the server with pm2. I'm using node v0.10.12

Linux mainserver1 2.6.35.4-rscloud #8 SMP Mon Sep 20 15:54:33 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux

Darwin Roys-MacBook-Pro.local 12.4.0 Darwin Kernel Version 12.4.0: Wed May 1 17:57:12 PDT 2013; root:xnu-2050.24.15~1/RELEASE_X86_64 x86_64

[server err (l0)] ad (child_process.js:345:11)TypeError: Cannot read property 'getsockname' of undefined
[server err (l1)] at net.js:1072:23
[server err (l2)] at Object.46:1 (cluster.js:587:5)
[server err (l3)] at handleResponse (cluster.js:171:41)
[server err (l4)] at respond (cluster.js:192:5)
[server err (l5)] at handleMessage (cluster.js:202:5)
[server err (l6)] at process.EventEmitter.emit (events.js:117:20)
[server err (l7)] at handleMessage (child_process.js:318:10)
[server err (l8)] at Pipe.channel.onread (child_process.js:345:11)TypeError: Cannot read property 'getsockname' of undefined
[server err (l9)] at net.js:1072:23
[server err (l10)] at Object.47:1 (cluster.js:587:5)
[server err (l11)] at handleResponse (cluster.js:171:41)
[server err (l12)] at respond (cluster.js:192:5)
[server err (l13)] at handleMessage (cluster.js:202:5)
[server err (l14)] at process.EventEmitter.emit (events.js:117:20)
[server err (l15)] at handleMessage (child_process.js:318:10)
[server err (l16)] at Pipe.channel.onread (child_process.js:345:11)
......
PM2 DAEMON (l8)] ["2013-07-02T02:28:52.054Z","/home/users/roy/server/tfavorite/server.js - id51 worker online\n"]
[server out (l46)] info - socket.io started
[server err (l69)] TypeError: Cannot read property 'getsockname' of undefined
[server err (l70)] at net.js:1072:23
[server err (l71)] at Object.52:1 (cluster.js:587:5)
[server err (l72)] at handleResponse (cluster.js:171:41)
[server err (l73)] at respond (cluster.js:192:5)
[server err (l74)] at handleMessage (cluster.js:202:5)
[server err (l75)] at process.EventEmitter.emit (events.js:117:20)
[server err (l76)] at handleMessage (child_process.js:318:10)
[server err (l77)] at Pipe.channel.onread (child_process.js:345:11)
[PM2 DAEMON (l9)] ["2013-07-02T02:28:52.717Z","Script /home/users/roy/server/tfavorite/server.js 51 exited code 1\n"]

Thanks,
Roy

Problem starting a CompoundJS App

Hi,
For some reason, when i want run a app created with CompoundJS with pm2, the aplication doesn't start (but in other ways, like node server.js, using nodemon or forever, the problem doesn't happen).
The script server.js is generic (automatically created by Compound):

#!/usr/bin/env node

/**
 * Server module exports method returning new instance of app.
 *
 * @param {Object} params - compound/express webserver initialization params.
 * @returns CompoundJS powered express webserver
 */
var app = module.exports = function getServerInstance(params) {
    params = params || {};
    // specify current dir as default root of server
    params.root = params.root || __dirname;
    return require('compound').createServer(params);
};

if (!module.parent) {
    var port = process.env.PORT || 3000;
    var host = process.env.HOST || '0.0.0.0';

    var server = app();
    server.listen(port, host, function () {
        console.log(
            'Compound server listening on %s:%d within %s environment',
            host, port, server.set('env')
        );
    });
}

And the console don't show any problem:

$ pm2 start server.js -v
⌬ PM2 Configuration :  { script: 'server.js', name: 'server' }
⌬ PM2 You can write the current configuration by adding -w option
{ script: 'server.js',
  name: 'server',
  pm_exec_path: '<path>/server.js' }
⌬ PM2 Process launched

Any idea? Specifically i don't know if this a problem with compoundjs or with pm2.

Best regards

Error when passing filename to `pm2 stop someFile.txt`

I realize now after reading the docs I was supposed to pass the pm2 id, but passing an invalid argument like I did should probably print the docs/manual or a message instead?

root@ubuntu-desktop:/mnt/Projects/server/Notify-Example# pm2 stop index.js
⌬ PM2 Stopping processindex.js

/usr/lib/node_modules/pm2/lib/God.js:176
God.clusters_db[id].opts.max = 0;
^
TypeError: Cannot read property 'opts' of undefined
at Object.God.stopProcessId (/usr/lib/node_modules/pm2/lib/God.js:176:22)
at server.expose.stopId (/usr/lib/node_modules/pm2/lib/Satan.js:106:11)
at Server.onmessage (/usr/lib/node_modules/pm2/node_modules/axon-rpc/lib/server.js:94:6)
at RepSocket.EventEmitter.emit (events.js:98:17)
at Parser.onmessage (/usr/lib/node_modules/pm2/node_modules/axon/lib/sockets/rep.js:47:15)
at Parser.frameBody (/usr/lib/node_modules/pm2/node_modules/axon/lib/parser.js:106:10)
at Parser.write (/usr/lib/node_modules/pm2/node_modules/axon/lib/parser.js:50:13)
at Parser.frameHeader (/usr/lib/node_modules/pm2/node_modules/axon/lib/parser.js:81:30)
at Parser.write (/usr/lib/node_modules/pm2/node_modules/axon/lib/parser.js:49:36)
at Socket.EventEmitter.emit (events.js:95:17)

Can't install (CentOS 6)

[root@service ~]# npm install -g pm2
npm http GET https://registry.npmjs.org/pm2
npm http 304 https://registry.npmjs.org/pm2
npm WARN git config --get remote.origin.url returned wrong result (git://github.com/Unitech/node-multimeter.git) undefined
npm WARN git config --get remote.origin.url returned wrong result (git://github.com/Unitech/node-multimeter.git) undefined
npm http GET https://registry.npmjs.org/axon-rpc/0.0.2
npm http GET https://registry.npmjs.org/watch/0.7.0
npm http GET https://registry.npmjs.org/usage/0.3.7
npm http GET https://registry.npmjs.org/axon/0.6.1
npm http GET https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/cron/1.0.1
npm http GET https://registry.npmjs.org/commander/1.1.0
npm ERR! git clone git://github.com/Unitech/node-multimeter.git undefined
npm ERR! git clone git://github.com/Unitech/node-multimeter.git undefined
npm http GET https://registry.npmjs.org/cli-table/0.2.0
npm ERR! Error: spawn ENOENT
npm ERR! at errnoException (child_process.js:980:11)
npm ERR! at Process.ChildProcess._handle.onexit (child_process.js:771:34)
npm ERR! If you need help, you may report this log at:
npm ERR! http://github.com/isaacs/npm/issues
npm ERR! or email it to:
npm ERR! [email protected]

npm ERR! System Linux 2.6.32-358.el6.x86_64
npm ERR! command "node" "/usr/bin/npm" "install" "-g" "pm2"
npm ERR! cwd /root
npm ERR! node -v v0.10.12
npm ERR! npm -v 1.2.17
npm ERR! syscall spawn
npm ERR! code ENOENT
npm ERR! errno ENOENT
npm http 304 https://registry.npmjs.org/watch/0.7.0
npm http 304 https://registry.npmjs.org/axon-rpc/0.0.2
npm http 304 https://registry.npmjs.org/debug
npm http 304 https://registry.npmjs.org/axon/0.6.1
npm http 304 https://registry.npmjs.org/cron/1.0.1
npm http 304 https://registry.npmjs.org/commander/1.1.0
npm http 304 https://registry.npmjs.org/cli-table/0.2.0
npm http 304 https://registry.npmjs.org/usage/0.3.7
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /root/npm-debug.log
npm ERR! not ok code 0

Windows support

Running on windows i keep seeing Launching daemon but nothing happens.
I tried with the json file and manually with pm2 start app.js but with no luck.
Also pm2 list and the other commands give the same result.
I am doing something wrong?

Thanks.

OS: Win 7 x64
node: 0.10.3

require.main unexpected behaviour

One of the libraries I'm using expects the value of require.main.filename to point to the filename of the main (read: entry point) script so that it can fine config files in that directory.

Using the following code:

// Start reading from stdin so we don't exit.
process.stdin.resume();
console.log('require.main=%s', require.main.filename);

I get the following output:
CLI:

alex@literally:~/docs/code/node$ nodejs test.js
require.main=/media/sf_docs/code/node/test.js

Forever:

alex@literally:~/docs/code/node$ forever start -o /tmp/test.log test.js
warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: test.js
alex@literally:~/docs/code/node$ cat /tmp/test.log
require.main=/media/sf_docs/code/node/test.js

pm2:

alex@literally:~/docs/code/node$ pm2 start test.js
⌬ PM2 Configuration :  { script: 'test.js', name: 'test' }
⌬ PM2 You can write the current configuration by adding -w option
{ script: 'test.js',
  name: 'test',
  pm_exec_path: '/media/sf_docs/code/node/test.js' }
⌬ PM2 Process launched
    ┌─────────┬─────┬──────┬────────┬───────────┬─────────────────────┬──────────┬───────────────────────────────────┐
    │ Script  │ id  │ PID  │ status │ Restarted │ Last restart        │   memory │ err logs                          │
    ├─────────┼─────┼──────┼────────┼───────────┼─────────────────────┼──────────┼───────────────────────────────────┤
    │ test.js │ 253 │ 7274 │ online │ 0         │ 2013-07-29 16:08:38 │ 7.648 MB │ /home/alex/.pm2/logs/test-err.log │
    └─────────┴─────┴──────┴────────┴───────────┴─────────────────────┴──────────┴───────────────────────────────────┘
alex@literally:~/docs/code/node$ cat /home/alex/.pm2/logs/test-out.log
require.main=/usr/lib/node_modules/pm2/lib/ProcessContainer.js

As you can see, forever behaves how I expect it to, pm2 does not, and my library does not work.

I'm not sure if this strictly qualifies as a bug or just a symptom of the way pm2 operates, but I would be very grateful for some clarification from someone who knows the inner workings of pm2 and forever better than me.

Thanks.

pm2 startup error on Centos 6.3

When running pm2 startup the following error is generated

pm2 startup
{ [Error: Command failed: /bin/sh: update-rc.d: command not found
] killed: false, code: 127, signal: null }

I guess there are 2 possible solutions

  1. Check Platform OS and if not debian / ubuntu don't attempt to run update-rc.d
  2. Check if update-rc.d script exists on the platform before attempting to run it

Any thoughts on the best way to solve this?

Coffeescript Support

Hey there,

Is it possible for PM2 to handle Coffeescript files directly like Forever do .

In Forever
forever start -c coffee app.coffee

Maybe in PM2
pm2 start -c coffee app.coffee

It would be pretty nice to have this feature.

jsonp support for web api

I'm currently working on a javascript monitoring app with angularjs and I would really appreciate jsonp support for pm2 web app.

Thanks for all the good work,
Johnny

pm2 sync app-conf.json

  • Provide a cron who check a git repos (or a specific branch), checkout it and restart the target process

Parameters in quotes don't get passed right

If I were to run a script with

pm2 start myscript.js -- --topic="My Favorite Script"

the --topic flag would only contain "My".

This is also the case if you try to escape the spaces.

Why is status "stopped" ?

Long time use of forever here, trying to make the change. Very impressed by the work so far but keep hitting instances where fire up my express app (pm2 start server.js) and everything is going well. A couple hours will pass and I will get an alert from my monitoring service saying stuff is offline. So I log into the server and do a "pm2 list" only to find that the status is "stopped"

Why would it be "stopped" no one stopped it, isnt the idea that it monitor itself and keep the app online?

This is happening on multiple servers, any idea on how to debug further?

Can't install pm2 from deb

Can't install pm2 from deb

In debian/postinst i type

npm install pm2 -g

but in logs:

npm http GET https://registry.npmjs.org/pm2
npm http 304 https://registry.npmjs.org/pm2
npm http GET https://registry.npmjs.org/commander/1.1.0
npm http GET https://registry.npmjs.org/cli-table/0.2.0
npm http GET https://registry.npmjs.org/pm2-multimeter/0.1.2
npm http GET https://registry.npmjs.org/usage/0.3.8
npm http GET https://registry.npmjs.org/axon-rpc/0.0.2
npm http GET https://registry.npmjs.org/watch/0.7.0
npm http GET https://registry.npmjs.org/axon/0.6.1
npm http GET https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/cron/1.0.1
npm http 304 https://registry.npmjs.org/cli-table/0.2.0
npm http 304 https://registry.npmjs.org/commander/1.1.0
npm http 304 https://registry.npmjs.org/axon-rpc/0.0.2
npm http 304 https://registry.npmjs.org/pm2-multimeter/0.1.2
npm http 304 https://registry.npmjs.org/usage/0.3.8
npm http 304 https://registry.npmjs.org/watch/0.7.0
npm http 304 https://registry.npmjs.org/axon/0.6.1
npm http 304 https://registry.npmjs.org/debug
npm http 304 https://registry.npmjs.org/cron/1.0.1
npm http GET https://registry.npmjs.org/commander/1.0.5
npm http GET https://registry.npmjs.org/charm
npm http GET https://registry.npmjs.org/keypress
npm http GET https://registry.npmjs.org/colors/0.3.0
npm http GET https://registry.npmjs.org/bindings
npm http GET https://registry.npmjs.org/configurable/0.0.1
npm http GET https://registry.npmjs.org/escape-regexp/0.0.1
npm http 304 https://registry.npmjs.org/keypress
npm http 304 https://registry.npmjs.org/colors/0.3.0
npm http 304 https://registry.npmjs.org/charm
npm http 304 https://registry.npmjs.org/bindings
npm http 304 https://registry.npmjs.org/commander/1.0.5

[email protected] install /usr/lib/node_modules/pm2/node_modules/usage
node-gyp rebuild
npm http GET https://registry.npmjs.org/keypress
npm http 304 https://registry.npmjs.org/configurable/0.0.1
npm http 304 https://registry.npmjs.org/escape-regexp/0.0.1
gyp WARN EACCES user "root" does not have permission to access the dev dir "/home/autoadmin/.node-gyp/0.8.20"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/lib/node_modules/pm2/node_modules/usage/.node-gyp"
gyp http GET http://nodejs.org/dist/v0.8.20/node-v0.8.20.tar.gz
gyp http 200 http://nodejs.org/dist/v0.8.20/node-v0.8.20.tar.gz
npm http 304 https://registry.npmjs.org/keypress
gyp ERR! build error
gyp ERR! stack Error: not found: make
gyp ERR! stack at F (/usr/lib/node_modules/npm/node_modules/which/which.js:43:28)
gyp ERR! stack at E (/usr/lib/node_modules/npm/node_modules/which/which.js:46:29)
gyp ERR! stack at /usr/lib/node_modules/npm/node_modules/which/which.js:57:16
gyp ERR! stack at Object.oncomplete (fs.js:297:15)
gyp ERR! System Linux 3.2.0-24-generic
gyp ERR! command "node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/lib/node_modules/pm2/node_modules/usage
gyp ERR! node -v v0.8.20
gyp ERR! node-gyp -v v0.8.1
gyp ERR! not ok
npm ERR! [email protected] install: node-gyp rebuild
npm ERR! sh "-c" "node-gyp rebuild" failed with 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the usage package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get their info via:
npm ERR! npm owner ls usage
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 3.2.0-24-generic
npm ERR! command "node" "/usr/bin/npm" "install" "pm2" "-g"
npm ERR! cwd /
npm ERR! node -v v0.8.20
npm ERR! npm -v 1.1.70
npm ERR! code ELIFECYCLE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /npm-debug.log

npm ERR! not ok code 0

what is this? path /home/autoadmin is exists and rights are ok.

Thank you.

pm2 monit throws 'TypeError: Cannot read property 'cpu' of undefined'

pm2 start server.js
pm2 monit

PM2 monitoring :

server.js [93944]

/usr/local/lib/node_modules/pm2/lib/Monit.js:46
bar_cpu.percent(proc.monit.cpu);
^
TypeError: Cannot read property 'cpu' of undefined
at /usr/local/lib/node_modules/pm2/lib/Monit.js:46:31
at Array.forEach (native)
at Object.Monit.init (/usr/local/lib/node_modules/pm2/lib/Monit.js:17:13)
at /usr/local/lib/node_modules/pm2/bin/pm2:484:11
at /usr/local/lib/node_modules/pm2/lib/Satan.js:126:5
at /usr/local/lib/node_modules/pm2/node_modules/axon-rpc/lib/client.js:43:10
at Parser.onmessage (/usr/local/lib/node_modules/pm2/node_modules/axon/lib/sockets/req.js:65:8)
at Parser.frameBody (/usr/local/lib/node_modules/pm2/node_modules/axon/lib/parser.js:106:10)
at Parser.write (/usr/local/lib/node_modules/pm2/node_modules/axon/lib/parser.js:50:13)
at Parser.frameHeader (/usr/local/lib/node_modules/pm2/node_modules/axon/lib/parser.js:81:30)

pm2 restart X

sometimes I need to restart a particular process, would be nice to be able to do so...

application binds on a busy port

When an app under pm2 tries to bind to a busy port, pm2 restarts this app over and over again.

The sad thing is: there is no way to stop this app now without killing everything. pm2_id changes so fast that pm2 stop pm2_id becomes useless.

PS: what about "pm2 stop <app_name>" syntax?

Ready for prod?

Is the current feature set considered ready for prod, or at least as stable as forever? I'm planning on running on our dev & qa boxes very soon and will see how it goes.

Arch Linux init script

On Arch Linux pm2 startup fails to generate the script:

fs.js:427
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^
Error: ENOENT, no such file or directory '/etc/init.d/pm2-init.sh'
    at Object.fs.openSync (fs.js:427:18)
    at Object.fs.writeFileSync (fs.js:966:15)
    at Object.CLI.upstart (/usr/lib/node_modules/pm2/bin/pm2:446:6)
    at Command.commander.command.description.action.exec (/usr/lib/node_modules/pm2/bin/pm2:145:7)
    at Command.<anonymous> (/usr/lib/node_modules/pm2/node_modules/commander/index.js:254:8)
    at Command.EventEmitter.emit (events.js:98:17)
    at Command.parseArgs (/usr/lib/node_modules/pm2/node_modules/commander/index.js:471:12)
    at Command.parse (/usr/lib/node_modules/pm2/node_modules/commander/index.js:378:15)
    at process.module.exports (/usr/lib/node_modules/pm2/bin/pm2:266:13)
    at process.EventEmitter.emit (events.js:92:17)

Bug fixes

  • When memory too high monit crash
  • Sometimes try to kill pid that doesnt exist (remove pid when script stopped)
  • Sometimes Reload undesired files (nipster.js)
  • Instances number

Init scripts ?

Any status for the init script? Need some help around for that?
We're getting ready for the release and I wish I could use pm2 for the prod ;)

Enjoy your return to France and don't burn too much brain cells :D

numCPUs is not used anywhere

Hi, I was wondering if it would be possible to max out the number of instances (i.e. by using param 'max') against the available number of cpus. You seem to are ready for this by having the following line in God.js (line 5):

var numCPUs = require('os').cpus().length;

However, it is never used.

What is the idea?

non-existent app in the middle of the config file

I have a global config file with all applications written there. I don't like json very much (yaml looks better), but it's still better than other choices I have.

Anyway, if a script in the middle of that config doesn't exists for some reason, all scripts before gets executed, but all scripts after it don't. pm2 just stops executing this array on a first error.

Config file:

[{
   "script": "/home/alex/test1",
   "name": "test1"
}, {
   "script": "/home/alex/test2",
   "name": "test2"
}, {
   "script": "/home/alex/test3",
   "name": "test3"
}]
[alex@dev-2 ~]$ pm2 start all-pm2.json 
Launching daemon
{ online: true, success: true, pid: 23063 }
⌬ PM2 [ERROR] script not found : /home/alex/test2

Expected behaviour:
test1 started, test3 started

OR (if it's a fatal error for some reason)
test1 stopped, test3 stopped

Actual behaviour:
test1 started, test3 stopped

Development dashboard

An option should permits to monitor

  • Log streaming of the processes monitored
  • Reload when file has changed
  • Display in termcaps the memory and cpu consumption at the top right of the terminal
  • V8 memory leak detection

Unable to run test

I follow the instructions here to test my environment

$ git clone https://github.com/Unitech/pm2.git
$ cd pm2
$ npm install 
$ npm test

The output is

npm test

> [email protected] test /home/node/pm2
> bash ./test/cli.sh && NODE_ENV=test ./node_modules/mocha/bin/mocha test

Running tests:

And it keeps showing that for about 30 minutes, so I assume that it fails

My sever is Ubuntu 12.04 running node 0.8.22

Feature Req: Restarting process based on program existing with custom configurable 'failure'-flag.

I've got some processes that I'd like to restart on servere exceptions that result in terminating the program, after cleanly shutting down servers, etc. (because the program can't get back to a normal state) .

These exceptions terminate with a 'failure'-flag printed to console.
Similarly, when a progam exists normally (when everything is done), a 'succes'-flag is printed to console.

It would be great to be able to conditionally restart a process when such a custom 'failure'-flag is received

logging multiple instances

  1. When pm2 starts N instances, it outputs all errors from them to one logfile
  2. When pm2 tails these logs to stdout, it reads this logfile N times (one time per instance)

So, pm2 logs shows every line of every instance N times where N is an amount of instances.

$ cat test.js
setInterval(function() {
        console.error(process.pid);
}, 10000);

$ pm2 start test.js -i 4
⌬ PM2 Configuration :  { script: 'test.js', name: 'test', instances: '4' }
⌬ PM2 You can write the current configuration by adding -w option
⌬ PM2 Process launched
┌─────────┬────┬───────┬────────┬───────────┬──────────┬───────────────────────────────────┐
│ Script  │ id │ PID   │ status │ Restarted │ memory   │ err logs                          │
├─────────┼────┼───────┼────────┼───────────┼──────────┼───────────────────────────────────┤
│ test.js │ 3  │ 19527 │ online │ 0         │ 8.637 MB │ /home/alex/.pm2/logs/test-err.log │
├─────────┼────┼───────┼────────┼───────────┼──────────┼───────────────────────────────────┤
│ test.js │ 2  │ 19521 │ online │ 0         │ 8.637 MB │ /home/alex/.pm2/logs/test-err.log │
├─────────┼────┼───────┼────────┼───────────┼──────────┼───────────────────────────────────┤
│ test.js │ 1  │ 19515 │ online │ 0         │ 8.641 MB │ /home/alex/.pm2/logs/test-err.log │
├─────────┼────┼───────┼────────┼───────────┼──────────┼───────────────────────────────────┤
│ test.js │ 0  │ 19513 │ online │ 0         │ 8.637 MB │ /home/alex/.pm2/logs/test-err.log │
└─────────┴────┴───────┴────────┴───────────┴──────────┴───────────────────────────────────┘

$ pm2 logs
[test err (l269)] 19515
[test err (l269)] 19515 <-- duplicate
[test err (l269)] 19515 <-- duplicate
[test err (l269)] 19515 <-- duplicate
[test err (l270)] 19521
[test err (l270)] 19521 <-- duplicate
[test err (l270)] 19521 <-- duplicate
[test err (l270)] 19521 <-- duplicate
[test err (l271)] 19527
[test err (l271)] 19527 <-- duplicate
[test err (l271)] 19527 <-- duplicate
[test err (l271)] 19527 <-- duplicate
[test err (l272)] 19513
[test err (l272)] 19513 <-- duplicate
[test err (l272)] 19513 <-- duplicate
[test err (l272)] 19513 <-- duplicate

'stop' and 'stopAll' are faulty and leave traces

Hi, when I do a 'pm2 start' on a script, and then a pm2 stop or stopAll, the script isn't killed correctly. Ports are not released in my server script. I have to kill Satan for that, which is easy, but should be unnecesary :P

pid files will not be deleted after job stoped

When we use the command pm2 stopAll, we can find the pid file still exist in ~/.pm2/pids, is there any reason for keeping these pid files after the job quit?

p.s. I don's like to use uppercase letters in terminal, but some commands in pm2 like pm2 stopAll, pm2 restartAll is really annoying, I think pm2 stopall or pm2 stop-all will be much better. just a suggestion~

p.s.s. There is a spelling mistake in the following article Goodbye node-forever, hello PM2, please search pm2 resurect and fix it.

Monit reports diffent memory usage

Hi there,
i use pm2 in both local and on a ec2 instance and i have a very weird memory consumption difference between those two (using same node v, same modules and same v of modules and so on on both). When using on prod, pm2 monit reports without any client connected, 40MB at start and increases 400kb per request. On local i am very far from those numbers (about 40kb at start, nothing really noticeable at each request). At first, i was thinking it could be a huge mem leak but i don't really know how it could be since i am not manipulating huge arrays or files (and null-fying any thing i can).
Maybe someone could enlighten me on this ?
Thanks.

e: oh forgot to mention i am running osx in local, maybe the difference is related to node-usage not being updated ?

Passing environmental variables to the script ...

Let us say I want to do:

PORT=8080 pm2 start -i 4 app.js

I expect that the environment variable will be available to the script. (And I am not able to receive it.) I am trying to find why I am not able to see that variable.

Before I dig deeper, could you confirm (by updating the documentation) that environmental variables are indeed available?

Tests fail on raspberry pi

Hi,
PM2 looks like the tool I have been looking for a long time, so really excited!

I am trying to get it working on my home server, a raspberry pi, but it doesn't seem to work at all when I run the tests.

I have installed it like so

git clone https://github.com/Unitech/pm2.git
cd pm2/
npm install
npm test
---> Doesn't work, so I aborted and tried with sudo
sudo npm test
---> Same thing. Get a whole lot of errors like the one below.

Any ideas or pointers for me to try?

Cheers!

Anders

Error

/mnt/500GB_USB_HD/users/pi/projects/tmp/pm2/node_modules/usage/node_modules/bindings/bindings.js:83
        throw e
              ^
Error: /mnt/500GB_USB_HD/users/pi/projects/tmp/pm2/node_modules/usage/build/Release/sysinfo.node: failed to map segment from shared object: Operation not permitted
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at bindings (/mnt/500GB_USB_HD/users/pi/projects/tmp/pm2/node_modules/usage/node_modules/bindings/bindings.js:76:44)
    at Object.<anonymous> (/mnt/500GB_USB_HD/users/pi/projects/tmp/pm2/node_modules/usage/lib/usage.js:1:100)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

More complete

pi@raspberrypi ~/projects/tmp/pm2 $ sudo npm test

> [email protected] test /mnt/500GB_USB_HD/users/pi/projects/tmp/pm2
> bash ./test/cli.sh && NODE_ENV=test ./node_modules/mocha/bin/mocha test

Running tests:
####################### DEBUG ############################
PM2 Command =  /usr/local/bin/node /mnt/500GB_USB_HD/users/pi/projects/tmp/pm2/bin/pm2
PM2 version =  /usr/local/bin/node /mnt/500GB_USB_HD/users/pi/projects/tmp/pm2/bin/pm2 -V
Node version =  v0.10.4
arch : arm
platform : linux
release : 3.6.11+
type : Linux
mem : 492838912
###################### !DEBUG! ###########################
Launching daemon

/mnt/500GB_USB_HD/users/pi/projects/tmp/pm2/node_modules/usage/node_modules/bindings/bindings.js:83
        throw e
              ^
Error: /mnt/500GB_USB_HD/users/pi/projects/tmp/pm2/node_modules/usage/build/Release/sysinfo.node: failed to map segment from shared object: Operation not permitted
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at bindings (/mnt/500GB_USB_HD/users/pi/projects/tmp/pm2/node_modules/usage/node_modules/bindings/bindings.js:76:44)
    at Object.<anonymous> (/mnt/500GB_USB_HD/users/pi/projects/tmp/pm2/node_modules/usage/lib/usage.js:1:100)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
------------> � kill daemon

Environment

node v0.10.4 on a Rasberry Pi running Raspbian (Debian clone)

66road

  • Delete pid files when processes stopped #44
  • Rename stopAll to stop-all or stop all (but still keep restartAll and stopAll for compatibility) #44
  • V8 Options #45
  • Stop web server #42
  • Review merge web interface #36

Combine with Livereload

Hello,
wouldn't it be nice if we could combine PM2 with Livereload ?

So once a file change, the Server is restarted and the Browser is refreshed?!

Already possible ?

A couple of errors regarding invalid pm_ids

Most of these are easy to fix, but you might want to print a nice error message or something.

  1. This throws ESRCH error (process not found).
$ pm2 start nonexistent
$ pm2 list
alex@elu:/tmp/xx/node_modules/.bin$ ./pm2 list
⌬ PM2  Process listing                                                                                         
┌───────────────┬────┬───────┬─────────┬───────────┬────────┬────────────────────────────────────────────┐     
│ Script        │ id │ PID   │ status  │ Restarted │ memory │ err logs                                   │                   
├───────────────┼────┼───────┼─────────┼───────────┼────────┼────────────────────────────────────────────┤                   
│ nonexistent   │ 5  │ 18594 │ stopped │ 6         │        │ /home/alex/.pm2/logs/nonexistent-err.log   │                                     
└───────────────┴────┴───────┴─────────┴───────────┴────────┴────────────────────────────────────────────┘                                     
$ pm2 stop 5
  1. This throws if process with id 12345 doesn't exist:
$ ./pm2 stop 12345
⌬ PM2 Stopping process12345                                                                                                                    

/tmp/xx/node_modules/pm2/lib/God.js:176
  God.clusters_db[id].opts.max = 0;
                     ^
TypeError: Cannot read property 'opts' of undefined
    at Object.God.stopProcessId (/tmp/xx/node_modules/pm2/lib/God.js:176:22)
  1. Is there a way to remove a process in the stopped state from the list?

  2. Can pm2 restart a process in the stopped state?

$ ./pm2 start ../examples/killtoofast.js 
alex@elu:/tmp/xx/node_modules/pm2/bin$ ./pm2 list
⌬ PM2  Process listing
┌────────────────┬────┬───────┬─────────┬───────────┬────────┬──────────────────────────────────────────┐
│ Script         │ id │ PID   │ status  │ Restarted │ memory │ err logs                                 │
├────────────────┼────┼───────┼─────────┼───────────┼────────┼──────────────────────────────────────────┤
│ killtoofast.js │ 5  │ 18895 │ stopped │ 6         │        │ /home/alex/.pm2/logs/killtoofast-err.log │
└────────────────┴────┴───────┴─────────┴───────────┴────────┴──────────────────────────────────────────┘
⌬ PM2  PM2 log file path :  /home/alex/.pm2/pm2.log  (type pm2 logs to see log streaming)
alex@elu:/tmp/xx/node_modules/pm2/bin$ ./pm2 restart 5
⌬ PM2 Restarting process 5
  ◠ Processing...
⌬ PM2 Process 5 restarted
alex@elu:/tmp/xx/node_modules/pm2/bin$ ./pm2 list
⌬ PM2  Process listing
┌────────────────┬────┬───────┬─────────┬───────────┬────────┬──────────────────────────────────────────┐
│ Script         │ id │ PID   │ status  │ Restarted │ memory │ err logs                                 │
├────────────────┼────┼───────┼─────────┼───────────┼────────┼──────────────────────────────────────────┤
│ killtoofast.js │ 5  │ 18895 │ stopped │ 6         │        │ /home/alex/.pm2/logs/killtoofast-err.log │
└────────────────┴────┴───────┴─────────┴───────────┴────────┴──────────────────────────────────────────┘
⌬ PM2  PM2 log file path :  /home/alex/.pm2/pm2.log  (type pm2 logs to see log streaming)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.