Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't supply command line arguments to script #13

Closed
Morriz opened this issue Jun 18, 2013 · 14 comments
Closed

Can't supply command line arguments to script #13

Morriz opened this issue Jun 18, 2013 · 14 comments

Comments

@Morriz
Copy link

Morriz commented Jun 18, 2013

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'

@Unitech
Copy link
Owner

Unitech commented Jun 19, 2013

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

@Morriz
Copy link
Author

Morriz commented Jun 19, 2013

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 notifications@github.com 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.

@Unitech
Copy link
Owner

Unitech commented Jun 19, 2013

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

@Morriz
Copy link
Author

Morriz commented Jun 19, 2013

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

On 19 jun. 2013, at 12:54, Alexandre Strzelewicz notifications@github.com wrote:

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


Reply to this email directly or view it on GitHub.

@rlidwka
Copy link
Collaborator

rlidwka commented Jun 19, 2013

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.

@Morriz
Copy link
Author

Morriz commented Jun 19, 2013

Nice. Learned a thing on my day off ;)

On 19 jun. 2013, at 18:43, Alex Kocharin notifications@github.com 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.

@Unitech
Copy link
Owner

Unitech commented Jun 23, 2013

Fixed and thanks for the tip Alex ;)

@xieranmaya
Copy link

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...

@govo
Copy link

govo commented May 19, 2016

@xieranmaya Thank you!

@Unitech
Copy link
Owner

Unitech commented May 19, 2016

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)

@xieranmaya
Copy link

@Unitech Great improve!

@martinjuhasz
Copy link

martinjuhasz commented Jun 23, 2016

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

@SonicReal
Copy link

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?

@anoop-ananthan
Copy link

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"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

8 participants