Ao executar um daemon, como executo um comando de um determinado diretório?

0

Meu conhecimento de script de shell é um pouco instável, mas eu quero executar um daemon (Ubuntu 14.04) definido em /etc/init.d/unicorn, assim

case "$1" in
  start)
        check_config
        check_app_root

        log_daemon_msg "Starting $DESC" $NAME || true
        if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then

Em um arquivo separado, / etc / default / unicorn, tenho as seguintes variáveis definidas:

APP_ROOT=/home/rails/myproject
...
UNICORN_OPTS="-D -c $CONFIG_RB -E $RAILS_ENV"
...
DAEMON="cd $APP_ROOT; $GEM_HOME/bin/bundle exec $GEM_PATH/bin/unicorn"

Eu adicionei "cd $ APP_ROOT" porque esse é o diretório de onde "$ GEM_HOME / bin / bundle" deve ser executado. No entanto, quando vou começar o meu serviço, recebo o erro abaixo:

myuser@myproject:~$ sudo service unicorn restart
/home/rails/.gem/bin/bundle
 * Restarting Unicorn web server unicorn
start-stop-daemon: unable to stat //cd (No such file or directory)

Existe alguma outra maneira que eu possa armazenar minhas opções para que eu possa executar o meu comando a partir do diretório desejado?

    
por Dave 06.04.2017 / 01:57

1 resposta

1

Parece que há alguns problemas com o que você está fazendo.

  • --exec leva apenas um argumento, no entanto, argumentos podem ser passados no final de start-stop-daemon após um -- .

  • O argumento de --exec também é usado como um identificador: start-stop-daemon verifica se há uma instância em execução (isso tornaria /bin/sh , um candidato muito ruim.

Portanto, crie um script de shell, que deverá ter uma instância em execução por máquina. Passe o caminho absoluto para --exec . Passar quaisquer argumentos necessários pelo script no final depois de um -- .

    
por 08.04.2017 / 20:56