При запуске демона, как мне выполнить команду из заданного каталога?

Мои знания сценария оболочки немного шаткие, но я хочу запустить демон (Ubuntu 14.04), определенный в /etc/init.d/unicorn вот так

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

В отдельном файле, / etc / default / unicorn, у меня определены следующие переменные:

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"

Я добавил "cd $ APP_ROOT", потому что это каталог, из которого "$ GEM_HOME / bin / bundle" должен бегать. Однако когда я запускаю свою службу, я получаю следующую ошибку:

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)

Есть ли другой способ сохранить свои параметры, чтобы я мог запускать свою команду из нужного каталога?

0
23.08.2017, 04:09
1 ответ

Похоже, у вас несколько проблем с тем, что вы делаете.

  • - exec принимает только один аргумент, однако аргументы могут быть переданы в конце start-stop-daemon после - .

  • Аргумент - exec также используется в качестве идентификатора: start-stop-daemon проверяет, запущен ли экземпляр (это сделало бы / bin / sh , очень плохой кандидат.

Поэтому создайте сценарий оболочки, который, как ожидается, будет иметь один экземпляр, работающий на каждой машине. Передайте абсолютный путь к - exec . Передайте любой аргументы, необходимые скрипту в конце после - .

1
28.01.2020, 02:46

Теги

Похожие вопросы