# Trying to background a start up script

**URL:** <https://forum.ansible.com/t/trying-to-background-a-start-up-script/33738>\
**Category:** Ansible Project\
**Created:** [September 3, 2020, 12:07pm UTC](https://forum.ansible.com/t/trying-to-background-a-start-up-script/33738 "2020-09-03T12:07:18Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jonin](https://avatars.discourse-cdn.com/v4/letter/j/87869e/32.png) [@Jonin](https://forum.ansible.com/u/Jonin)\
**Post date:** [September 3, 2020, 12:07pm UTC](https://forum.ansible.com/t/trying-to-background-a-start-up-script/33738/1 "2020-09-03T12:07:18Z")

</div>

Hi,

I have this task and I can’t for the life of me get it to keep the process running. I have added in some debug and it shows me the process is getting shutdown almost immediately after it is started up as can be seen by the end time in the output I have provided below. Please advise how I can fix this so that the process keeps on running as future tasks are performed.

- hosts: nodes  
remote\_user: root  
become\_user: test  
become: true  
tasks:

- name: execute startup script  
shell: nohup npm start \> test.out 2\>&1 &  
register: status  
args:  
chdir: “/apps/test/postcodes.io”

- debug:  
var: status

Output:

TASK [execute startup script] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
changed: [host] =\> {“changed”: true, “cmd”: “nohup npm start \> test.out 2\>&1 &”, “delta”: “0:00:00.006275”, “end”: “2020-09-03 12:37:51.797561”, “rc”: 0, “start”: “2020-09-03 12:37:51.791286”, “stderr”: “”, “stderr\_lines”: , “stdout”: “”, “stdout\_lines”: }

TASK [debug] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
ok: [host] =\> {  
“status”: {  
“changed”: true,  
“cmd”: “nohup npm start \> test.out 2\>&1 &”,  
“delta”: “0:00:00.006275”,  
“end”: “2020-09-03 12:37:51.797561”,  
“failed”: false,  
“rc”: 0,  
“start”: “2020-09-03 12:37:51.791286”,  
“stderr”: “”,  
“stderr\_lines”: ,  
“stdout”: “”,  
“stdout\_lines”:   
}  
}

If I go on to the host and run it manually it works:

host:APACHE \> nohup npm start \> host.out 2\>&1 &  
[1] 45428  
user@host:/apps/test/postcodes.io  
host:APACHE \> ps -ef | grep node  
user 45439 45428 3 12:54 pts/2 00:00:00 node server.js

Any help much appreciated.

---

<div class="post-metadata">

**Author:** ![racke](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/racke/32/4767_2.png) [@racke](https://forum.ansible.com/u/racke)\
**Post date:** [September 3, 2020, 12:19pm UTC](https://forum.ansible.com/t/trying-to-background-a-start-up-script/33738/2 "2020-09-03T12:19:53Z")

</div>

> Hi,
> 
> I have this task and I can't for the life of me get it to keep the process running. I have added in some debug and it  
> shows me the process is getting shutdown almost immediately after it is started up as can be seen by the end time in the  
> output I have provided below. Please advise how I can fix this so that the process keeps on running as future tasks are  
> performed.
> 
> - hosts: nodes  
> remote\_user: root  
> become\_user: test  
> become: true  
> tasks:
> 
> ```
> \- name: execute startup script
> shell: nohup npm start &gt; test\.out 2&gt;&amp;1 &amp;
> register: status
> args:
> chdir: &quot;/apps/test/postcodes\.io&quot;
>     
> \- debug:
> var: status
> 
> ```

Use a proper daemon process manager (PM2, [https://pm2.keymetrics.io/](https://pm2.keymetrics.io/)).

Regards  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Racke

---

<div class="post-metadata">

**Author:** ![Jonin](https://avatars.discourse-cdn.com/v4/letter/j/87869e/32.png) [@Jonin](https://forum.ansible.com/u/Jonin)\
**Post date:** [September 3, 2020, 3:45pm UTC](https://forum.ansible.com/t/trying-to-background-a-start-up-script/33738/3 "2020-09-03T15:45:11Z")

</div>

Thanks for your suggestion. PM2 actually looks really good. Great monitoring metrics and ansible seems to seamlessly invoke it no problem:

- name: Task17 - start nodejs - Step1 of 3 - execute startup script  
shell: pm2 start app.js  
register: status  
args:  
chdir: “/apps/test/[postcodes.io](http://postcodes.io)”

- debug:  
var: status

]

and provides a handy output to the terminal

“stdout”: “[PM2] Applying action restartProcessId on app [app](ids: [0])\n[PM2] app ✓\n[PM2] Process successfully started\n┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐\n│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │\n├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤\n│ 0 │ app │ default │ 12.0.0 │ fork │ 59888 │ 0s │ 1 │ online │ 0% │ 8.7mb │ wasadm │ disabled │\n└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘”,  
“stdout\_lines”: [  
“[PM2] Applying action restartProcessId on app [app](ids: [0])”,  
“[PM2] app ✓”,  
“[PM2] Process successfully started”,  
“┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐”,  
“│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │”,  
“├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤”,  
“│ 0 │ app │ default │ 12.0.0 │ fork │ 59888 │ 0s │ 1 │ online │ 0% │ 8.7mb │ wasadm │ disabled │”,  
“└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘”  
]  
}  
}

However, using pm2 has introduced other problems such as me failing to have it read the process.env file that node had no issues with so now I am not listening on the intended port with the custom credentials. No doubt there is a way to do this but before looking at adopting pm2 is there not just a simple fix to my existing ansible task in order to launch “node start” and keep that process up and running?

---

<div class="post-metadata">

**Author:** ![racke](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/racke/32/4767_2.png) [@racke](https://forum.ansible.com/u/racke)\
**Post date:** [September 3, 2020, 4:51pm UTC](https://forum.ansible.com/t/trying-to-background-a-start-up-script/33738/4 "2020-09-03T16:51:31Z")

</div>

> Thanks for your suggestion. PM2 actually looks really good. Great monitoring metrics and ansible seems to  
> seamlessly invoke it no problem:
> 
> - name: Task17 - start nodejs - Step1 of 3 - execute startup script  
> shell: pm2 start app.js  
> register: status  
> args:  
> chdir: "/apps/test/postcodes.io \<[http://postcodes.io](http://postcodes.io)\>"
> 
> ```
> \- debug:
> var: status
> 
> ```
> 
> ]

Use command instead of shell module. See documentation.

> and provides a handy output to the terminal
> 
> "stdout": "[PM2] Applying action restartProcessId on app [app](ids: [0])\n[PM2] [app](0) ✓\n[PM2] Process successfully  
> started\n┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐\n│  
> id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │  
> watching  
> │\n├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤\n│  
> 0 │ app │ default │ 12.0.0 │ fork │ 59888 │ 0s │ 1 │ online │ 0% │ 8.7mb │ wasadm │  
> disabled  
> │\n└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘",  
> "stdout\_lines": [  
> "[PM2] Applying action restartProcessId on app [app](ids: [0])",  
> "[PM2] [app](0) ✓",  
> "[PM2] Process successfully started",
> 
> "┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐",  
> "│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem  
> │ user │ watching │",
> 
> "├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤",  
> "│ 0 │ app │ default │ 12.0.0 │ fork │ 59888 │ 0s │ 1 │ online │ 0% │ 8.7mb  
> │ wasadm │ disabled │",
> 
> "└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘"  
> ]  
> }  
> }
> 
> However, using pm2 has introduced other problems such as me failing to have it read the process.env file that node had  
> no issues with so now I am not listening on the intended port with the custom credentials. No doubt there is a way to do  
> this but before looking at adopting pm2 is there not just a simple fix to my existing ansible task in order to launch  
> "node start" and keep that process up and running?

I'm sure that pm2 can regard your process.env file, but I think that is beyond the topic of this group.

And no, I neither have or want "just" a fix for your inferior hack, sorry.

Regards  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Racke

---

<div class="post-metadata">

**Author:** ![Jonin](https://avatars.discourse-cdn.com/v4/letter/j/87869e/32.png) [@Jonin](https://forum.ansible.com/u/Jonin)\
**Post date:** [September 3, 2020, 5:58pm UTC](https://forum.ansible.com/t/trying-to-background-a-start-up-script/33738/5 "2020-09-03T17:58:30Z")

</div>

I tried the command module before using the shell module.

I thought the command module was the wrong choice because when I run it, as below, it simply hangs.

If I log on to the host I can see the ansible task has spawned the node.js process but I suppose my playbook is hanging because it can’t background it.

Any ideas how to do this because the documentation has left me none the wiser.

tasks:

- name: execute startup script  
command: npm start app.js  
register: status  
args:  
chdir: “/apps/test/[postcodes.io](http://postcodes.io)”

- debug:  
var: status

---

<div class="post-metadata">

**Author:** ![racke](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/racke/32/4767_2.png) [@racke](https://forum.ansible.com/u/racke)\
**Post date:** [September 3, 2020, 6:01pm UTC](https://forum.ansible.com/t/trying-to-background-a-start-up-script/33738/6 "2020-09-03T18:01:05Z")

</div>

> I tried the command module before using the shell module.
> 
> I thought the command module was the wrong choice because when I run it, as below, it simply hangs.
> 
> If I log on to the host I can see the ansible task has spawned the node.js process but I suppose my playbook is hanging  
> because it can't background it.

Correct, npm doesn't do that. Use PM2.

Regards  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Racke

---

<div class="post-metadata">

**Author:** ![Jonin](https://avatars.discourse-cdn.com/v4/letter/j/87869e/32.png) [@Jonin](https://forum.ansible.com/u/Jonin)\
**Post date:** [September 3, 2020, 10:51pm UTC](https://forum.ansible.com/t/trying-to-background-a-start-up-script/33738/7 "2020-09-03T22:51:03Z")

</div>

Touché!

Ok, I understand now. I thought using pm2 involved a lot of tweaking. I was trying and failing to get it to read my npm dotenv. Instead of trying to use pm2 to call my app.js directly I have just realised I can use it to launch it indirectly via npm without having to change any config . Simples!

Thanks for your advice.
