Neil_Young
(Neil Young)
October 12, 2021, 3:28pm
1
Hmm. I must be making again something fundamentally wrong
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)
Neil_Young
(Neil Young)
October 12, 2021, 4:07pm
2
Worked around with forever
, but would like to understand…
racke
(Stefan Hornburg)
October 12, 2021, 4:42pm
3
Hmm. I must be making again something fundamentally wrong
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
Neil_Young
(Neil Young)
October 12, 2021, 4:43pm
4
Thanks for the helpful comment.
Neil_Young
(Neil Young)
October 12, 2021, 4:45pm
5
…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.
racke
(Stefan Hornburg)
October 12, 2021, 4:54pm
6
...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
Neil_Young
(Neil Young)
October 12, 2021, 5:04pm
7
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.
racke
(Stefan Hornburg)
October 12, 2021, 5:08pm
8
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
Neil_Young
(Neil Young)
October 12, 2021, 6:00pm
9
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
racke
(Stefan Hornburg)
October 12, 2021, 6:09pm
10
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
Neil_Young
(Neil Young)
October 12, 2021, 6:20pm
11
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?
racke
(Stefan Hornburg)
October 12, 2021, 6:24pm
12
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
Neil_Young
(Neil Young)
October 12, 2021, 6:32pm
13
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”]}
racke
(Stefan Hornburg)
October 12, 2021, 6:43pm
14
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
Neil_Young
(Neil Young)
October 12, 2021, 6:50pm
15
I know this reference. This was my first attempt before I stripped it down to what is there. Didn’t work either.
Neil_Young
(Neil Young)
October 12, 2021, 6:55pm
16
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
Neil_Young
(Neil Young)
October 12, 2021, 6:56pm
17
Script works on the node, btw.
Neil_Young
(Neil Young)
October 12, 2021, 6:59pm
18
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.
Neil_Young
(Neil Young)
October 12, 2021, 7:26pm
19
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