Daemonizing an executable in ansible

后端 未结 5 476
借酒劲吻你
借酒劲吻你 2020-12-15 17:55

I am trying to create a task in ansible which executes a shell command to run an executable in daemon mode using &. Something like following

-name: Star         


        
相关标签:
5条回答
  • 2020-12-15 18:29

    Adding to the daemonize suggestions above, if you want to start your program in a specific directory you can do:

    - name: install daemonize package
      package:
        name: daemonize
        state: latest
    - name: start program
      command: daemonize -c /folder/to/run/in /path/to/myexeprogram arg1 arg2
    

    Notably, you also probably want the -e -o flags to log output.

    0 讨论(0)
  • 2020-12-15 18:32

    From the brief description on what you want to achieve, it sounds like it would be best for you to set up your executable as a service (using Upstart or similar) and then start/stop it as needed based on the other conditions that require it to be running (or not running).

    Trying to run this as a process otherwise will entail having to capture the PID or similar so you can try and shut down the daemon you have started when you need to, with pretty much the same amount of complexity as installing an init config file would take and without the niceties that systems such as Upstart give you with the controls such as start/stop.

    0 讨论(0)
  • 2020-12-15 18:32

    I found the best way, particularly because I wanted output to be logged, was to use the "daemonize" package. If you are on CentOS/Redhat, like below. There is probably also an apt-package for it.

    - name: yum install daemonize
      yum:
        name: daemonize
        state: latest
    
    - name: run in background, log errors and standout to file
      shell:  daemonize -e /var/log/myprocess.log -o /var/log/myprocess.log  /opt/myscripts/myprocess.sh
    
    0 讨论(0)
  • 2020-12-15 18:41

    Running program with '&' does not make program a daemon, it just runs in background. To make a "true daemon" your program should do steps described here.

    If your program is written in C, you can call daemon() function, which will do it for you. Then you can start your program even without '&' at the end and it will be running as a daemon.

    The other option is to call your program using daemon, which should do the job as well.

    - name: Start daemon
      shell: daemon -- myexeprogram arg1 arg2
    
    0 讨论(0)
  • 2020-12-15 18:48

    When you (or Ansible) log out the exit signal will still be sent to the running process, even though it is running in the background.

    You can use nohup to circumvent that.

    - name: Start daemon
      shell: nohup myexeprogram arg1 arg2 &
    

    http://en.wikipedia.org/wiki/Nohup

    0 讨论(0)
提交回复
热议问题