데몬을 실행할 때 특정 디렉터리에서 명령을 어떻게 실행할 수 있나요?

데몬을 실행할 때 특정 디렉터리에서 명령을 어떻게 실행할 수 있나요?

내 쉘 스크립팅 지식이 약간 부족하지만 /etc/init.d/unicorn(Ubuntu 14.04)에 정의된 데몬을 다음과 같이 실행하고 싶습니다.

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"

"$GEM_HOME/bin/bundle"이 실행되어야 하는 디렉토리이기 때문에 "cd $APP_ROOT"를 추가했습니다. 그런데 서비스를 시작하면 다음과 같은 오류가 발생합니다.

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)

원하는 디렉터리에서 명령을 실행할 수 있도록 옵션을 저장하는 다른 방법이 있습니까?

답변1

당신이 하고 있는 일에 몇 가지 문제가 있는 것 같습니다.

  • --execstart-stop-daemon하나의 매개변수만 허용하지만 매개변수는 의 끝에 전달될 수 있습니다 --.

  • 인수는 --exec식별자로도 사용됩니다. start-stop-daemon실행 중인 인스턴스가 있는지 확인하세요(이렇게 하면 /bin/sh매우 좋지 않은 후보가 됩니다.

따라서 머신당 하나의 인스턴스를 실행할 것으로 예상되는 쉘 스크립트를 작성하십시오. --exec.in 에 절대 경로를 전달합니다 --.

관련 정보