Pm2: Can't supply command line arguments to script

Created on 18 Jun 2013  Â·  14Comments  Â·  Source: Unitech/pm2

Try:

pm2 start 'script.js -d 1'

and it crashes, showing a module not found error:

Error: Cannot find module '......./device-simulation.js -d 1'

Enhancement

Most helpful comment

A standard unix way of doing such things would be something like that:
pm2 start script.js -- -d 1

when anything after "--" parameter is passed to the script

(see http://unix.stackexchange.com/questions/11376/what-does-double-dash-mean)

PS: I suppose, commander can already do that, just add something like process.argv = commander.argv after a require.

All 14 comments

Not sure we can do that easily for now, as require is used for launching the script.
The alternative would be to use environment variables instead.

CLI Code :
https://github.com/Unitech/pm2/blob/master/bin/pm2#L235

Fork child ProcessContainer.js :
http://nodejs.org/api/cluster.html#cluster_cluster_fork_env

ProcessContainer script require :
https://github.com/Unitech/pm2/blob/master/lib/ProcessContainer.js#L56

I think it would be really easy to parse extra params within single quote chars and enrich process.argv with them.

On 19 jun. 2013, at 05:49, Alexandre Strzelewicz [email protected] wrote:

Not sure we can do that easily for now, as require is used for launching the script.
The alternative would be to use environment variables instead.

CLI Code :
https://github.com/Unitech/pm2/blob/master/bin/pm2#L235

Fork child ProcessContainer.js :
http://nodejs.org/api/cluster.html#cluster_cluster_fork_env

ProcessContainer script require :
https://github.com/Unitech/pm2/blob/master/lib/ProcessContainer.js#L56

—
Reply to this email directly or view it on GitHub.

That's a solution, pull me a request :+1: ! :)

Not behind comp today nor have time soon, but will do at some point...

On 19 jun. 2013, at 12:54, Alexandre Strzelewicz [email protected] wrote:

That's a solution, pull me a request ! :)

—
Reply to this email directly or view it on GitHub.

A standard unix way of doing such things would be something like that:
pm2 start script.js -- -d 1

when anything after "--" parameter is passed to the script

(see http://unix.stackexchange.com/questions/11376/what-does-double-dash-mean)

PS: I suppose, commander can already do that, just add something like process.argv = commander.argv after a require.

Nice. Learned a thing on my day off ;)

On 19 jun. 2013, at 18:43, Alex Kocharin [email protected] wrote:

A standard unix way of doing such things would be something like that:
pm2 start script.js -- -d 1

when anything after "--" parameter is passed to the script

(see http://unix.stackexchange.com/questions/11376/what-does-double-dash-mean)

—
Reply to this email directly or view it on GitHub.

Fixed and thanks for the tip Alex ;)

NOTICE that the arguments you supply will persist until you delete and restart the app:

pm2 start app.js -- aa bb cc
pm2 restart app.js -- 11 22 33

Above will not work, you should do the following:

pm2 delete app.js
pm2 start app.js -- 11 22 33

However I think it's weird, what if I want to change an argument...

@xieranmaya Thank you!

Now with PM2 > 1.1.x

this:

$ pm2 start app.js -- aa bb cc
$ pm2 restart app.js -- 11 22 33

works, but doing

$ pm2 restart app.js

Will still keep the latest arguments (11, 22, 33)

@Unitech Great improve!

Is there a way to run two processes with different arguments but the same script with this configuration?
It also seems that i cant put more than 8 arguments in there:

pm2 start log --name "Logger" --node-args='--harmony_destructuring' -- arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8
[PM2] Starting log in fork_mode (1 instance)
[PM2] Done.
pm2 start log --name "Logger" --node-args='--harmony_destructuring' -- arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 
[PM2][ERROR] script not found : /somedir/bin/arg9

Now with PM2 > 1.1.x

this:

$ pm2 start app.js -- aa bb cc
$ pm2 restart app.js -- 11 22 33
works, but doing

$ pm2 restart app.js
Will still keep the latest arguments (11, 22, 33)

Hello. I dont need to keep latest arguments. How can i "nullify" them?

What is the way to run
pm2 start --env production --node-args "DB_HOST=some.host.xyz DB_NAME=mybase DB_USER=heman DB_PASSWORD=Morning@r00t90"

Was this page helpful?
0 / 5 - 0 ratings

Related issues

rajendar38 picture rajendar38  Â·  3Comments

waygee picture waygee  Â·  4Comments

morfies picture morfies  Â·  3Comments

jubairsaidi picture jubairsaidi  Â·  3Comments

ghost picture ghost  Â·  3Comments