Trying to background a start up script

53 views
Skip to first unread message

Sebastian Collins

unread,
Sep 3, 2020, 8:07:18 AM9/3/20
to Ansible Project
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.


Stefan Hornburg (Racke)

unread,
Sep 3, 2020, 8:20:41 AM9/3/20
to ansible...@googlegroups.com
On 9/3/20 2:07 PM, Sebastian Collins wrote:
> 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
>
>

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

Regards
Racke
> --
> You received this message because you are subscribed to the Google Groups "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to
> ansible-proje...@googlegroups.com <mailto:ansible-proje...@googlegroups.com>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/02be6001-7a5f-4f13-b478-199947412270n%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/02be6001-7a5f-4f13-b478-199947412270n%40googlegroups.com?utm_medium=email&utm_source=footer>.


--
Ecommerce and Linux consulting + Perl and web application programming.
Debian and Sympa administration. Provisioning with Ansible.

signature.asc

Sebastian Collins

unread,
Sep 3, 2020, 11:45:49 AM9/3/20
to ansible...@googlegroups.com
Thanks for your suggestion. PM2 actually looks really good. Great monitoring metrics and ansible seems to seamlessly invoke it no problem:

nameTask17 - start nodejs - Step1 of 3 - execute startup script
        shellpm2 start app.js
        registerstatus
        args:
          chdir"/apps/test/postcodes.io"
        
      - debug:
          varstatus
]

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?



You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/wEC_V3rGxeg/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/bd730ce8-9abc-cce9-1854-14457cd27475%40linuxia.de.

Stefan Hornburg (Racke)

unread,
Sep 3, 2020, 12:52:25 PM9/3/20
to ansible...@googlegroups.com
On 9/3/20 5:45 PM, Sebastian Collins wrote:
> 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
> ]
>

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
Racke

>
>
> On Thu, Sep 3, 2020 at 1:20 PM Stefan Hornburg (Racke) <ra...@linuxia.de <mailto:ra...@linuxia.de>> wrote:
>
> On 9/3/20 2:07 PM, Sebastian Collins wrote:
> > 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 <http://postcodes.io>"
> > user@host:/apps/test/postcodes.io <http://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.
> >
> >
> > --
> > You received this message because you are subscribed to the Google Groups "Ansible Project" group.
> > To unsubscribe from this group and stop receiving emails from it, send an email to
> > ansible-proje...@googlegroups.com <mailto:ansible-project%2Bunsu...@googlegroups.com>
> <mailto:ansible-proje...@googlegroups.com <mailto:ansible-project%2Bunsu...@googlegroups.com>>.
> > To view this discussion on the web visit
> > https://groups.google.com/d/msgid/ansible-project/02be6001-7a5f-4f13-b478-199947412270n%40googlegroups.com
> >
> <https://groups.google.com/d/msgid/ansible-project/02be6001-7a5f-4f13-b478-199947412270n%40googlegroups.com?utm_medium=email&utm_source=footer>.
>
>
> --
> Ecommerce and Linux consulting + Perl and web application programming.
> Debian and Sympa administration. Provisioning with Ansible.
>
> --
> You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/wEC_V3rGxeg/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com
> <mailto:ansible-project%2Bunsu...@googlegroups.com>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/bd730ce8-9abc-cce9-1854-14457cd27475%40linuxia.de.
>
> --
> You received this message because you are subscribed to the Google Groups "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to
> ansible-proje...@googlegroups.com <mailto:ansible-proje...@googlegroups.com>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/CAFqnG036tjLc%3DDkScJ_RtcQvuyZgx5YUA3ubqk4jYeHnngSiPQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CAFqnG036tjLc%3DDkScJ_RtcQvuyZgx5YUA3ubqk4jYeHnngSiPQ%40mail.gmail.com?utm_medium=email&utm_source=footer>.
signature.asc

Sebastian Collins

unread,
Sep 3, 2020, 1:59:19 PM9/3/20
to ansible...@googlegroups.com
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:

      - nameexecute startup script
        commandnpm start app.js
        registerstatus
        args:
          chdir"/apps/test/postcodes.io"
        
      - debug:
          varstatus



To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/1e256e75-78ce-ae98-30f8-71956757aa4b%40linuxia.de.

Stefan Hornburg (Racke)

unread,
Sep 3, 2020, 2:02:02 PM9/3/20
to ansible...@googlegroups.com
On 9/3/20 7:58 PM, Sebastian Collins wrote:
> 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
Racke

> 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
>
>
>
> On Thu, Sep 3, 2020 at 5:52 PM Stefan Hornburg (Racke) <ra...@linuxia.de <mailto:ra...@linuxia.de>> wrote:
>
> On 9/3/20 5:45 PM, Sebastian Collins wrote:
> > 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>"
> >     >           chdir: "/apps/test/postcodes.io <http://postcodes.io> <http://postcodes.io>"
> >     > user@host:/apps/test/postcodes.io <http://postcodes.io> <http://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.
> >     >
> >     >
> >     > --
> >     > You received this message because you are subscribed to the Google Groups "Ansible Project" group.
> >     > To unsubscribe from this group and stop receiving emails from it, send an email to
> >     > ansible-proje...@googlegroups.com <mailto:ansible-project%2Bunsu...@googlegroups.com>
> <mailto:ansible-project%2Bunsu...@googlegroups.com <mailto:ansible-project%252Buns...@googlegroups.com>>
> >     <mailto:ansible-proje...@googlegroups.com <mailto:ansible-project%2Bunsu...@googlegroups.com>
> <mailto:ansible-project%2Bunsu...@googlegroups.com <mailto:ansible-project%252Buns...@googlegroups.com>>>.
> >     > To view this discussion on the web visit
> >     > https://groups.google.com/d/msgid/ansible-project/02be6001-7a5f-4f13-b478-199947412270n%40googlegroups.com
> >     >
> >   
>  <https://groups.google.com/d/msgid/ansible-project/02be6001-7a5f-4f13-b478-199947412270n%40googlegroups.com?utm_medium=email&utm_source=footer>.
> >
> >
> >     --
> >     Ecommerce and Linux consulting + Perl and web application programming.
> >     Debian and Sympa administration. Provisioning with Ansible.
> >
> >     --
> >     You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
> >     To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/wEC_V3rGxeg/unsubscribe.
> >     To unsubscribe from this group and all its topics, send an email to
> ansible-proje...@googlegroups.com <mailto:ansible-project%2Bunsu...@googlegroups.com>
> >     <mailto:ansible-project%2Bunsu...@googlegroups.com <mailto:ansible-project%252Buns...@googlegroups.com>>.
> >     To view this discussion on the web visit
> >     https://groups.google.com/d/msgid/ansible-project/bd730ce8-9abc-cce9-1854-14457cd27475%40linuxia.de.
> >
> > --
> > You received this message because you are subscribed to the Google Groups "Ansible Project" group.
> > To unsubscribe from this group and stop receiving emails from it, send an email to
> https://groups.google.com/d/msgid/ansible-project/CAFqnG036tjLc%3DDkScJ_RtcQvuyZgx5YUA3ubqk4jYeHnngSiPQ%40mail.gmail.com
> >
> <https://groups.google.com/d/msgid/ansible-project/CAFqnG036tjLc%3DDkScJ_RtcQvuyZgx5YUA3ubqk4jYeHnngSiPQ%40mail.gmail.com?utm_medium=email&utm_source=footer>.
>
>
> --
> Ecommerce and Linux consulting + Perl and web application programming.
> Debian and Sympa administration. Provisioning with Ansible.
>
> --
> You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/wEC_V3rGxeg/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com
> <mailto:ansible-project%2Bunsu...@googlegroups.com>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/1e256e75-78ce-ae98-30f8-71956757aa4b%40linuxia.de.
>
> --
> You received this message because you are subscribed to the Google Groups "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to
> ansible-proje...@googlegroups.com <mailto:ansible-proje...@googlegroups.com>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/CAFqnG01yOzodEKMz9sO5_chO3rRfVJLnkjNXqTxbL0p7Jxd%3Daw%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CAFqnG01yOzodEKMz9sO5_chO3rRfVJLnkjNXqTxbL0p7Jxd%3Daw%40mail.gmail.com?utm_medium=email&utm_source=footer>.
signature.asc

Sebastian Collins

unread,
Sep 3, 2020, 6:51:41 PM9/3/20
to ansible...@googlegroups.com
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.



To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/fabc0952-4f74-f959-011d-97ed15fc4bfb%40linuxia.de.
Reply all
Reply to author
Forward
0 new messages