Launch node server in background

Hmm. I must be making again something fundamentally wrong :slight_smile:

Trying to start a simple node server app into background

  • name: Start server (run as non-privileged user)
    tags: server
    shell: |
    nohup node server.js 2>&1 &
    args:
    chdir: my-server-dir
    become: yes
    become_user: “{{ non_root_user }}”

This runs w/o problems. However, the service is not started…

Running the same command from console works…

It doesn’t even run as “sudo” (if f I remove the “become” lines at the end, my entire script runs as sudo)

Worked around with forever, but would like to understand…

Hmm. I must be making again something fundamentally wrong :slight_smile:

Yes, you are trying to use Ansible as glorified shell *and* ignore all the options to run a service properly (e.g. with systemd).

Regards
            Racke

Thanks for the helpful comment.

…even though it might not be the high level of “best practice” (in fact you can read a lot of this Racke comments, especially with Ansible) - and I’m surely aware of that - it is a legit shell command.

...even though it might not be the high level of "best practice" (in fact you can read a lot of this Racke comments, especially with Ansible) - and I'm surely aware of that - it is a legit shell command.

Yes, but running a server through nohup is certainly bad practice. Nohup is rather provided to prevent long running processes to be disrupted.

There is no really good way to control the server when it is running. How do you stop it for example? Restart it when it is crashed? Etc.

And the shell called from Ansible doesn't have the same environment as when you login as regular user.

Regards
             Racke

Posts disappear here…

However, disregard. IMHO there is nothing wrong with “node server.js &” and I was just trying to figure out why this doesn’t work with Ansible. I wasn’t looking for a religious discussion.

Posts disappear here...

However, disregard. IMHO there is nothing wrong with "node server.js &" and I was just trying to figure out why this doesn't work with Ansible. I wasn't looking for a religious discussion.

Neither me .. just pointing out common sense using Ansible and Unix services.

Regards
           Racke

Look, that sucks meanwhile. The question was: “why is this not working”? Not: Who here is able to teach me best practice?

Because - this is something I can get around the corner.

I give you the last word. Will not respond.

Thanks

Look, that sucks meanwhile. The question was: "why is this not working"? Not: Who here is able to teach me best practice?

Because - this is something I can get around the corner.

I give you the last word. Will not respond.

Thanks

Fair enough, but the trouble is other users might reuse your questionable examples.

   Racke

Yes, now everyone understands that you’ve got it.

Anyone else with an answer to the actual question? Why is that not possible?

I don’t mean: Why can’t you do that?

Yes, now everyone understands that you've got it.

Anyone else with an answer to the actual question? Why is that not possible?

Did you try to remove the redirection from your shell command and look at stdout/stderr (with register + debug task)?

Regards
         Racke

OK, then back to the problem:

With and without nohup the same result: The app seems to start, but is killed then. Didn’t try debug yet, but the console output looks good:

TASK [Start server (run as non-privileged user)] ******************************************************************************************************************************************************************
changed: [ubuntuVM] => {“changed”: true, “cmd”: “nohup node wss.js &\n”, “delta”: “0:00:01.190398”, “end”: “2021-10-12 18:30:38.791334”, “msg”: “”, “rc”: 0, “start”: “2021-10-12 18:30:37.600936”, “stderr”: “”, “stderr_lines”: , “stdout”: “WSS mock running on port 8080”, “stdout_lines”: [“WSS mock running on port 8080”]}

TASK [Start server (run as non-privileged user)] ******************************************************************************************************************************************************************
changed: [ubuntuVM] => {“changed”: true, “cmd”: “node wss.js &\n”, “delta”: “0:00:01.182786”, “end”: “2021-10-12 18:31:23.449623”, “msg”: “”, “rc”: 0, “start”: “2021-10-12 18:31:22.266837”, “stderr”: “”, “stderr_lines”: , “stdout”: “WSS mock running on port 8080”, “stdout_lines”: [“WSS mock running on port 8080”]}

OK, then back to the problem:

With and without nohup the same result: The app seems to start, but is killed then. Didn't try debug yet, but the console output looks good:

TASK [Start server (run as non-privileged user)] ******************************************************************************************************************************************************************
changed: [ubuntuVM] => {"changed": true, "cmd": "nohup node wss.js &\n", "delta": "0:00:01.190398", "end": "2021-10-12 18:30:38.791334", "msg": "", "rc": 0, "start": "2021-10-12 18:30:37.600936", "stderr": "", "stderr_lines": , "stdout": "WSS mock running on port 8080", "stdout_lines": ["WSS mock running on port 8080"]}

TASK [Start server (run as non-privileged user)] ******************************************************************************************************************************************************************
changed: [ubuntuVM] => {"changed": true, "cmd": "node wss.js &\n", "delta": "0:00:01.182786", "end": "2021-10-12 18:31:23.449623", "msg": "", "rc": 0, "start": "2021-10-12 18:31:22.266837", "stderr": "", "stderr_lines": , "stdout": "WSS mock running on port 8080", "stdout_lines": ["WSS mock running on port 8080"]}

My advice would be to write a script that does the nohup with all the redirections instead using it verbatim. See https://stackoverflow.com/questions/41676607/ansible-terminates-my-app-with-nohup for more information. If you do that, switch to command module.

Regards
        Racke

I know this reference. This was my first attempt before I stripped it down to what is there. Didn’t work either.

Tried again. Same result. No obvious error, but server not started.

./start-wss.sh

#!/bin/sh

Launch as service

nohup node wss.js </dev/null >/dev/null 2>&1 &

  • name: Start server (run as non-privileged user)
    tags: server
    command: ./start-wss.sh
    args:
    chdir: server

Script works on the node, btw.

For node I could live with forever, which works fine. But I also have some python scripts to start like so. Maybe to wrap them as service seems the only option then. I’m not aware of a “forever” for python…

Let’s bury that.

Looks like forever is supposed to work with python as well. Let’s see

forever start -c python python_script.py

https://stackoverflow.com/questions/19571282/using-forever-js-with-python