Shell-Script

執行守護程序時,如何從給定目錄執行命令?

  • August 23, 2017

我的 shell 腳本知識有點不穩定,但我想執行 /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"

我添加了“cd $ APP_ROOT" because that’s the directory from where " $ 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)

有沒有其他方法可以儲存我的選項,以便我可以從所需的目錄執行我的命令?

看起來你正在做的事情有一些問題。

  • --exec只接受一個參數,但是可以在start-stop-daemona的末尾傳遞參數--
  • 的參數--exec也用作標識符:start-stop-daemon檢查是否有一個實例正在執行(這會使/bin/sh, 一個非常糟糕的候選者。

因此,創建一個 shell 腳本,預計每台機器執行一個實例。將絕對路徑傳遞給--exec. 在--.

引用自:https://unix.stackexchange.com/questions/356235