Search code examples
processsalt-projectnohup

Running a service in the background withouth getting stuck


Currently I am having an issue with trying to run a process/script in the background[The master starts it on the minion]

The script is something like this:

#!/bin/bash

nohup ping 8.8.8.8 >/dev/null&

And I call it from the master with:

Process-Name:
  service.running:
   - name: Script-Name
   - enable: True

For some reason it gets stuck on the master,I've read a little bit on this issue[it has happenned before apparently] and tried their solutions on it but apparently nothing involving the service state seems to work.

Is there anyway to work around this?


Solution

  • In short, you should configure your script as system daemon first (SysV init.d script, or systemd unit, or ... depends on OS).

    Details

    The service.running function requires properly configured system service ~ daemon.

    For example, on RHEL-based Linux, if you don't see your script name in the output of one of these commands, you should configure it as proper service first (which is a separate topic):

    # systemd
    systemctl list-units | grep your_service_name
    
    # SysV init.d
    chkconfig --list     | grep your_service_name
    

    And because you want to start it in background, cmd.run function is not the right tool either:

    • It will only report successful start of the script without waiting for its completion results.
    • It will also start new instance of your script every time.

    However, if all you simply want is to "fire and forget", use cmd.run.